Compare commits

...

326 Commits

Author SHA1 Message Date
29ab6ce9f3 patch 8.2.4477: crash when using fuzzy completion
Problem:    Crash when using fuzzy completion.
Solution:   Temporary fix: put back regexp. (closes #9851)
2022-02-26 15:52:08 +00:00
c51cf03298 Update runtime files. 2022-02-26 12:25:45 +00:00
e41c1dd889 patch 8.2.4476: operator name spelled wrong
Problem:    Operator name spelled wrong.
Solution:   Change trinary to ternary. (Goc Dundar, closes #9850)
2022-02-26 11:46:13 +00:00
4df5b33f20 patch 8.2.4475: fuzzy cmdline completion does not work for lower case
Problem:    Fuzzy cmdline completion does not work for lower case.
Solution:   Also use fuzzy completion for lower case input. (Yegappan
            Lakshmanan, closes #9849)
2022-02-26 11:04:42 +00:00
5a2d4a3ecb patch 8.2.4474: memory allocation failures not tested in quickfix code
Problem:    Memory allocation failures not tested in quickfix code.
Solution:   Add alloc IDs and tests. (Yegappan Lakshmanan, closes #9848)
2022-02-26 10:31:32 +00:00
416b5f4894 patch 8.2.4473: Coverity warnds for not checking return value of ftell()
Problem:    Coverity warnds for not checking return value of ftell().
Solution:   Bail out if ftell() returns a negative value.
2022-02-25 21:47:48 +00:00
9383a3afb6 patch 8.2.4472: Coverity warns for use of a freed function name
Problem:    Coverity warns for use of a freed function name.
Solution:   Only check an autoload name when is prefixed.
2022-02-25 21:35:17 +00:00
62628d97c4 patch 8.2.4471: Coverity warns for uninitialized variable
Problem:    Coverity warns for uninitialized variable.
Solution:   Set flags to zero.
2022-02-25 21:10:53 +00:00
ae49aa8434 patch 8.2.4470: Coverity warns for uninitialized variable
Problem:    Coverity warns for uninitialized variable.
Solution:   Set can_spell to zero.
2022-02-25 21:05:36 +00:00
05c1734c4f patch 8.2.4469: Coverity warns for uninitialized variable
Problem:    Coverity warns for uninitialized variable.
Solution:   Set the value to zero.
2022-02-25 20:57:11 +00:00
68afde4c9b patch 8.2.4468: Coverity warns for uninitialized struct member
Problem:    Coverity warns for uninitialized struct member.
Solution:   Set color.index to zero.
2022-02-25 20:48:26 +00:00
0e71b7d4ce patch 8.2.4467: running filetype test leaves file behind
Problem:    Running filetype test leaves file behind.
Solution:   Delete the file.
2022-02-25 17:45:04 +00:00
5c6edf41f9 patch 8.2.4466: MS-Windows: illegal memory access in installer
Problem:    MS-Windows: illegal memory access in installer when using
            "create-directories" as the final argument.
Solution:   Check the argument count. (Cam Sinclair, closes #9844)
2022-02-25 17:42:23 +00:00
5ec633b9b0 patch 8.2.4465: fuzzy completion does not order matches properly
Problem:    Fuzzy completion does not order matches properly.
Solution:   Do not use regular expression match. (Yegappan Lakshmanan,
            closes #9843)
2022-02-25 15:24:24 +00:00
4d56b971cb patch 8.2.4464: Dtrace files are recognized as filetype D
Problem:    Dtrace files are recognized as filetype D.
Solution:   Add a pattern for Dtrace files. (Teubel György, closes #9841)
            Add some more testing.
2022-02-24 17:59:09 +00:00
38b85cb4d7 patch 8.2.4463: completion only uses strict matching
Problem:    Completion only uses strict matching.
Solution:   Add the "fuzzy" item for 'wildoptions'. (Yegappan Lakshmanan,
            closes #9803)
2022-02-24 13:28:41 +00:00
9c9be05b17 patch 8.2.4462: not enough testing for quickfix code
Problem:    Not enough testing for quickfix code.
Solution:   Add more tests. Fix uncovered problem. (Yegappan Lakshmanan,
            closes #9839)
2022-02-24 12:33:17 +00:00
3c620b0c03 patch 8.2.4461: MS-Windows: garbage characters on stdout with VIMDLL
Problem:    MS-Windows: garbage characters on stdout with VIMDLL.
Solution:   Don't call gui_focus_change() when about to quit. (Ken Takata,
            closes #9840)
2022-02-24 11:39:43 +00:00
dea5ab0fc5 patch 8.2.4460: Vim9: wrong error for defining dict function
Problem:    Vim9: wrong error for defining dict function.
Solution:   Explicitly check for trying to define a dict function.
            (closes 9827)
2022-02-23 22:12:02 +00:00
fa02616718 patch 8.2.4459: Vim9: compiling sort() call fails with unknown arguments
Problem:    Vim9: compiling sort() call fails with a funcref that has unknown
            arguments.
Solution:   Do not check the arguments if they are unknown at compile time.
            (closes #9835)
2022-02-23 21:03:32 +00:00
6e1a38745f patch 8.2.4458: Vim9: compiling filter() call fails with unknown arguments
Problem:    Vim9: compiling filter() call fails with funcref that has unknown
            arguments.
Solution:   Do not check the arguments if they are unknown at compile time.
            (closes #9835)
2022-02-23 19:11:49 +00:00
33fc4a6307 patch 8.2.4457: the GPM library can only be linked statically
Problem:    The GPM library can only be linked statically.
Solution:   Make it possible to load the GPM library dynamically. (Damien)
2022-02-23 18:07:38 +00:00
dd2dfb3cb0 patch 8.2.4456: terminal test may fail on some machines
Problem:    Terminal test may fail on some machines.
Solution:   Increase wait time. (Zdenek Dohnal, closes #9834)
2022-02-23 14:25:17 +00:00
2007dd49f5 patch 8.2.4455: accepting one and zero for second sort() argument is strange
Problem:    Accepting one and zero for the second sort() argument is strange.
Solution:   Disallow using one and zero in Vim9 script.
2022-02-23 13:17:47 +00:00
6a8b13614e patch 8.2.4454: resetting cmdwin_type only for one situation
Problem:    Resetting cmdwin_type only for one situation.
Solution:   Reset cmdwin_type before closing windows. (closes #9822)
2022-02-23 12:23:08 +00:00
4791fcd825 patch 8.2.4453: :helpgrep may free an option that was not allocated
Problem:    :helpgrep may free an option that was not allocated. (Yegappan
            Lakshmanan)
Solution:   Check if the value was allocated.
2022-02-23 12:06:00 +00:00
2dada73a4e patch 8.2.4452: test for what 8.2.4436 fixes does not check for regression
Problem:    Test for what 8.2.4436 fixes does not check for regression.
Solution:   Set several options. (Ken Takata, closes #9830)
2022-02-23 10:52:41 +00:00
9cd4c0fb98 patch 8.2.4451: sort() fails when ignoring case
Problem:    sort() fails when ignoring case.
Solution:   Accept a number one argument in sort().
2022-02-22 22:53:10 +00:00
2afeb40831 patch 8.2.4450: list sort test fails
Problem:    List sort test fails.
Solution:   Pass a valid "how" argument.
2022-02-22 22:17:00 +00:00
e843efcc35 patch 8.2.4449: vim9: function argument of sort() not checked at compile time
Problem:    vim9: function argument of sort() not checked at compile time.
Solution:   Add a compile time check.
2022-02-22 21:54:44 +00:00
b2c72359dc patch 8.2.4448: filetype detection is failing
Problem:    Filetype detection is failing.
Solution:   Do not use "s:" where it is no longer allowed.
2022-02-22 21:17:40 +00:00
afa048f0d4 patch 8.2.4447: Vim9: can still use s:var in a compiled function
Problem:    Vim9: can still use s:var in a compiled function.
Solution:   Disallow using s:var for Vim9 script. (closes #9824)
2022-02-22 20:43:36 +00:00
fe73255c92 patch 8.2.4446: Vim9: cannot refer to a global function like a local one
Problem:    Vim9: cannot refer to a global function like a local one.
Solution:   When g:name is not a variable but a function, use a function
            reference. (closes #9826)
2022-02-22 19:39:13 +00:00
29a9e69718 patch 8.2.4445: exit test fails on MS-Windows anyway
Problem:    Exit test fails on MS-Windows anyway.
Solution:   Skip the test on MS-Windows.
2022-02-22 18:48:11 +00:00
68eab67119 patch 8.2.4444: beep caused by test
Problem:    Beep caused by test.  ASAN reports leaks.
Solution:   Do not put a NL at the end of the script.  Make the text work on
            MS-Windows.  Do not run the test with ASAN.
2022-02-22 17:42:48 +00:00
2457b2bbc2 patch 8.2.4443: regexp pattern test fails on Mac
Problem:    Regexp pattern test fails on Mac.
Solution:   Do not use a swapfile for the buffer.
2022-02-22 16:19:37 +00:00
70b9e4f4c3 patch 8.2.4442: test for error reading input fails on MS-Windows
Problem:    Test for error reading input fails on MS-Windows.
Solution:   Don't run the test on MS-Windows.
2022-02-22 15:24:51 +00:00
16f6c8ac94 patch 8.2.4441: Vim9: function argument of filter() not checked like map()
Problem:    Vim9: function argument of filter() not checked like map().
Solution:   Also check the function argument of filter().
2022-02-22 15:12:14 +00:00
6456fae9ba patch 8.2.4440: crash with specific regexp pattern and string
Problem:    Crash with specific regexp pattern and string.
Solution:   Stop at the start of the string.
2022-02-22 13:37:31 +00:00
1349bd712c patch 8.2.4439: accepting "iso8859" 'encoding' as "iso-8859-"
Problem:    Accepting "iso8859" 'encoding' as "iso-8859-".
Solution:   use "iso8859" as "iso-8859-1".
2022-02-22 12:34:28 +00:00
ca0c1caa36 patch 8.2.4438: crash on exit when using cmdline window
Problem:    Crash on exit when using cmdline window.
Solution:   Reset "cmdwin_type" before exiting. (closes #9817)
2022-02-22 12:08:07 +00:00
0f113e4f7b patch 8.2.4437: vartabs test fails on MS-Windows
Problem:    Vartabs test fails on MS-Windows.
Solution:   Use iso8859-1 'encoding'. (Ken Takata, closes #9818)
2022-02-22 11:04:50 +00:00
4e889f98e9 patch 8.2.4436: crash with weird 'vartabstop' value
Problem:    Crash with weird 'vartabstop' value.
Solution:   Check for running into the end of the line.
2022-02-21 19:36:12 +00:00
7842761bba patch 8.2.4435: dead code in checking map() arguments
Problem:    Dead code in checking map() arguments. (Dominique Pellé)
Solution:   Remove the first return statement. (closes #9815)
2022-02-21 18:34:30 +00:00
16b51d26fe patch 8.2.4434: duplicate check for cmdline window
Problem:    Duplicate check for cmdline window.
Solution:   Remove the second check. (Sean Dewar, closes #9816)
2022-02-21 17:56:33 +00:00
83e36c8606 patch 8.2.4433: CI: cannot see interface versions for MS-Windows
Problem:    CI: cannot see interface versions for MS-Windows.
Solution:   List the interface versions. (Ken Takata, closes #9811)
2022-02-21 17:49:28 +00:00
592f625001 patch 8.2.4432: cannot use settabvar() while the cmdline window is open
Problem:    Cannot use settabvar() while the cmdline window is open.
Solution:   Only give an error when actually switching tabpage.
            (closes #9813)
2022-02-21 16:13:49 +00:00
993faa3405 patch 8.2.4431: unnecessary condition when assigning to a variable
Problem:    Unnecessary condition when assigning to a variable.
Solution:   Remove the condition.
2022-02-21 15:59:11 +00:00
101979358f patch 8.2.4430: GTK: crash when using 'guiligatures' and reading from stdin
Problem:    GTK: crash when using 'guiligatures' and reading from stdin.
Solution:   Make a copy of the message. (Amon Sha, closes #9719, closes #9814)
2022-02-21 15:07:12 +00:00
c2f17f7e64 patch 8.2.4429: using script-local function from the wrong script
Problem:    Using script-local function from the wrong script when using a
            partial. (Yegappan Lakshmanan)
Solution:   Include the script ID in the partial name.
2022-02-21 13:13:50 +00:00
0f6e28f686 patch 8.2.4428: crash when switching tabpage while in the cmdline window
Problem:    Crash when switching tabpage while in the cmdline window.
Solution:   Disallow switching tabpage when in the cmdline window.
2022-02-20 20:49:35 +00:00
944697ae19 Update runtime files 2022-02-20 19:48:20 +00:00
ad6c45f625 patch 8.2.4427: getchar() may return modifiers if no character is available
Problem:    getchar() may return modifiers if no character is available.
Solution:   Do not process modifiers when there is no character. (closes #9806)
2022-02-20 19:05:10 +00:00
c1e6c7bafe patch 8.2.4426: map() function on string and blob does not check types
Problem:    map() function on string and blob does not check argument types at
            compile time.
Solution:   Check string and blob argument types.  Support "0z1234->func()".
2022-02-20 18:26:46 +00:00
eddd4fc4f6 patch 8.2.4425: map() function does not check function arguments
Problem:    map() function does not check function arguments at compile time.
Solution:   Give an error if the arguments of a map() function are wrong.
2022-02-20 15:52:28 +00:00
cdf717283c patch 8.2.4424: ".gts" and ".gjs" files are not recognized
Problem:    ".gts" and ".gjs" files are not recognized.
Solution:   Recognize Glimmer flavored typescript and javascript.
            (closes #9799)
2022-02-19 16:35:58 +00:00
d56eb654f5 patch 8.2.4423: "make nvcmdidxs" fails
Problem:    "make nvcmdidxs" fails.
Solution:   Use "-S" instead of "-u" to source the script.
2022-02-19 16:00:16 +00:00
adbb383e0f patch 8.2.4422: autochdir test fails on MS-Windows
Problem:    Autochdir test fails on MS-Windows.
Solution:   Expecta nother error on MS-Windows.
2022-02-19 14:49:51 +00:00
20563e0f84 patch 8.2.4421: some installed files and directories have wrong permissions
Problem:    Some installed files and directories have wrong permissions.
Solution:   Adjust the Makefile and shell to set permissions. (closes #9793)
2022-02-19 13:25:18 +00:00
Ada
a42535340a patch 8.2.4420: menu translations are inconsistent
Problem:    Menu translations are inconsistent.
Solution:   Add a Makefile to convert between encodings. (Ada (Haowen) Yu,
            closes #9801)
2022-02-19 12:06:09 +00:00
a493b6506b patch 8.2.4419: illegal memory access when using 20 highlights
Problem:    Illegal memory access when using exactly 20 highlights.
Solution:   Add one more item in the array. (Brandon Richardson,
            closes #9800)
2022-02-19 11:45:03 +00:00
5921aeb574 patch 8.2.4418: crash when using special multi-byte character
Problem:    Crash when using special multi-byte character.
Solution:   Don't use isalpha() for an arbitrary character.
2022-02-19 11:20:12 +00:00
e89bfd212b patch 8.2.4417: using NULL pointer
Problem:    Using NULL pointer.
Solution:   Set offset after checking for NULL pointer.
2022-02-18 18:34:45 +00:00
1fca5f3e86 patch 8.2.4416: Vim9: using a script-local function requires using "s:"
Problem:    Vim9: using a script-local function requires using "s:" when
            setting 'completefunc'.
Solution:   Do not require "s:" in Vim9 script. (closes #9796)
2022-02-18 17:50:47 +00:00
b8fb5bb68d patch 8.2.4415: function argument name conflicts with C++ keyword
Problem:    Function argument name conflicts with C++ keyword.
Solution:   Rename the argument.
2022-02-18 13:56:38 +00:00
97b231541d patch 8.2.4414: solidity files are not recognized
Problem:    Solidity files are not recognized.
Solution:   Add the *.sol pattern. (Dundar Goc, closes #9792)
2022-02-18 13:45:55 +00:00
56acd1f8ed patch 8.2.4413: Vim9: Coverity warns for using NULL pointer
Problem:    Vim9: Coverity warns for using NULL pointer.
Solution:   Give an internal error when funcref function can't be found.
2022-02-18 13:24:52 +00:00
0257599036 patch 8.2.4412: translation cleanup script does not remove empty lines at end
Problem:    Translation cleanup script does not remove empty lines at end.
Solution:   Remove empty lines at the end. (Ken Takata, closes #9794)
2022-02-18 11:28:29 +00:00
8e5ba693ad patch 8.2.4411: bicep files are not recognized
Problem:    Bicep files are not recognized.
Solution:   Match *.bicep files. (Dundar Goc, closes #9791)
2022-02-17 21:30:26 +00:00
0c7f2610de patch 8.2.4410: Vim9: some code not covered by tests
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests. Remove dead code.
2022-02-17 19:44:07 +00:00
6296d1e60e patch 8.2.4409: Vim9: some code not covered by tests
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests.  Fix reported line number.
2022-02-17 16:30:11 +00:00
ea5c898b5f patch 8.2.4408: Vim9: some code not covered by tests
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests.  Correct error message.  Allow unlet on dict
            with a number key.
2022-02-17 14:42:02 +00:00
e08be09a08 patch 8.2.4407: Vim9: some code not covered by tests
Problem:    Vim9: some code not covered by tests.
Solution:   Add more tests.  Avoid giving two errors.  Remove dead code.
2022-02-17 13:08:26 +00:00
2438430863 patch 8.2.4406: expand functions use confusing argument names
Problem:    Expand functions use confusing argument names.
Solution:   Rename "file" to "match".  Refactor some completion code.  Add a
            few more tests. (Yegappan Lakshmanan, closes #9790)
2022-02-17 11:26:42 +00:00
8329ab79b2 patch 8.2.4405: compiler warning for unused variable without +folding
Problem:    Compiler warning for unused variable without the +folding feature.
            (Tony Mechelynck)
Solution:   Add #ifdef.
2022-02-16 21:51:00 +00:00
cd1cda2f87 patch 8.2.4404: Vim9: some code not covered by tests
Problem:    Vim9: some code not covered by tests.
Solution:   Add a few specific test cases.
2022-02-16 21:48:25 +00:00
9437737833 patch 8.2.4403: ml_get error with nested folds and deleting lines
Problem:    ml_get error with nested folds and deleting lines.
Solution:   Correct the last line number before calling hasFoldingWin().
2022-02-16 20:30:52 +00:00
ae6f1d8b14 patch 8.2.4402: missing parenthesis may cause unexpected problems
Problem:    Missing parenthesis may cause unexpected problems.
Solution:   Add more parenthesis is macros. (closes #9788)
2022-02-16 19:24:07 +00:00
d288eaad84 patch 8.2.4401: map listing does not clear the rest of the command line
Problem:    Map listing does not clear the rest of the command line.
Solution:   Call msg_clear_eos(). (closes #5623, closes #5962)
2022-02-16 18:27:55 +00:00
646bb7247a patch 8.2.4400: MS-Windows: cannot use the mouse in the console with VIMDLL
Problem:    MS-Windows: cannot use the mouse in the console with VIMDLL.
Solution:   use add_char2buf() instead of fix_input_buffer(). (closes #9784,
            closes #9769)
2022-02-16 17:51:47 +00:00
f9435e49ef patch 8.2.4399: crash after ml_get error
Problem:    Crash after ml_get error.
Solution:   When returning "???" flush the line and set ml_line_lnum.
2022-02-16 16:33:28 +00:00
b31aec3b93 patch 8.2.4398: some command completion functions are too long
Problem:    Some command completion functions are too long.
Solution:   Refactor code into separate functions.  Add a few more tests.
            (Yegappan Lakshmanan, closes #9785)
2022-02-16 12:44:29 +00:00
34f8117dec patch 8.2.4397: crash when using many composing characters in error message
Problem:    Crash when using many composing characters in error message.
Solution:   Use mb_cptr2char_adv() instead of mb_ptr2char_adv().
2022-02-16 12:16:19 +00:00
f5288c5895 patch 8.2.4396: Python3 test fails
Problem:    Python3 test fails.
Solution:   Remove "let".
2022-02-15 21:33:29 +00:00
8b716f5f22 patch 8.2.4395: some code lines not covered by tests
Problem:    Some code lines not covered by tests.
Solution:   Add a few more test cases.  Fix getting more than one error for
            invalid assignment.
2022-02-15 21:17:56 +00:00
9fdde7992a patch 8.2.4394: UTF8 select mode test fails on MS-Windows
Problem:    UTF8 select mode test fails on MS-Windows.
Solution:   Revert the #ifdef change.
2022-02-15 19:52:56 +00:00
6b43471da4 patch 8.2.4393: possible number overflow with nested folds
Problem:    Possible number overflow with nested folds.
Solution:   Avoid a negative line number.
2022-02-15 19:15:22 +00:00
64d95cfc56 patch 8.2.4392: MS-Windows with VIMDLL: Escaping CSI is wrong
Problem:    MS-Windows with VIMDLL: Escaping CSI is wrong.
Solution:   Put back #ifdef. (Ken Takata, closes #9769)
2022-02-15 17:17:18 +00:00
0e1f36fc59 patch 8.2.4391: command line executed when typing Esc in the GUI
Problem:    Command line executed when typing Esc in the GUI.
Solution:   Move saving/restoring KeyTyped to build_stl_str_hl().
            (closes #9783)
2022-02-15 16:17:44 +00:00
e88c6b7a5d patch 8.2.4390: Vim9: list from declaration with inferred type not set
Problem:    Vim9: list from declaration with inferred type does not set the
            type on the value.
Solution:   When inferring the type in a variable declaration also set the
            type of the list or dictionary. (closes #9705)  Do not set the
            type when the member is "any".
2022-02-15 15:37:11 +00:00
4556a2e868 patch 8.2.4389: screenpos() does not handle a position in a closed fold
Problem:    screenpos() does not handle a position in a closed fold.
Solution:   Check if the position is inside a closed fold. (closes #9778)
2022-02-15 13:40:17 +00:00
7745f14ef3 patch 8.2.4388: dead code in op_insert()
Problem:    Dead code in op_insert().
Solution:   Remove condition and else block. (closes #9782)
2022-02-15 11:48:22 +00:00
e3846cf1eb patch 8.2.4387: command line completion doesn't always work properly
Problem:    Command line completion doesn't always work properly.
Solution:   Adjust triggering after a "|".  Add more tests. (Yegappan
            Lakshmanan, closes #9779)
2022-02-15 11:35:54 +00:00
8991be2ab4 patch 8.2.4386: still cannot build tiny version
Problem:    Still cannot build tiny version.
Solution:   Adjust #ifdefs.
2022-02-14 21:51:46 +00:00
b5d2039e00 patch 8.2.4385: cannot build tiny version
Problem:    Cannot build tiny version.
Solution:   Adjust #ifdefs.
2022-02-14 21:42:15 +00:00
bc51006402 patch 8.2.4384: Vim9: error message not tested, some code not tested
Problem:    Vim9: error message not tested, some code not tested.
Solution:   Add a couple of test cases.  Give an error for a command modifier
            without a command.
2022-02-14 21:19:04 +00:00
7a3b802bab patch 8.2.4383: Vim9: unused code lines
Problem:    Vim9: unused code lines.
Solution:   Rely on either "cctx" or "cstack" to not be NULL.
2022-02-14 19:53:03 +00:00
e4835bf340 patch 8.2.4382: a custom 'tabline' may cause Esc to work like Enter
Problem:    A custom 'tabline' may cause Esc to work like Enter on the
            command line when the popup menu is displayed.
Solution:   Save and restore KeyTyped. (closes #9776)
2022-02-14 19:17:53 +00:00
0e76714e90 patch 8.2.4381: translation file listed twice
Problem:    Translation file listed twice.
Solution:   Remove one entry.
2022-02-14 15:59:05 +00:00
Ada
774e55702f patch 8.2.4380: small differences between Chinese translation files
Problem:    Small differences between Chinese translation files.
Solution:   Add rule for converting UTF-8 to gb2312. (closes #9773)
2022-02-14 15:04:55 +00:00
55737c2a31 patch 8.2.4379: an empty change is reported to a listener
Problem:    An empty change is reported to a listener.
Solution:   Do not report an empty change. (closes #9768)  Remove unused
            return value.
2022-02-14 14:51:22 +00:00
6dd7424c7e patch 8.2.4378: incsearch HL broken when calling searchcount in 'tabLine'
Problem:    Incsearch highlight broken when calling searchcount() in 'tabLine'
            function. (Mirko Palmer)
Solution:   Save and restore the incsearch state. (Christian Brabandt,
            closes #9763, closes #9633)
2022-02-14 12:44:32 +00:00
0cd3e94e2c patch 8.2.4377: CI steps for Windows are a bit unorganized
Problem:    CI steps for Windows are a bit unorganized.
Solution:   Organize CI test steps on Windows. (Ozaki Kiichi, closes #9764)
2022-02-14 11:36:57 +00:00
9773db6f9b patch 8.2.4376: not enough tests for command line completion
Problem:    Not enough tests for command line completion.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #9771)
2022-02-14 11:10:59 +00:00
4b1d963972 patch 8.2.4375: ctx_imports is not used
Problem:    ctx_imports is not used.
Solution:   Delete ctx_imports.  Add missing dependency.
2022-02-13 21:51:08 +00:00
0631bb4ed7 patch 8.2.4374: unreachable code
Problem:    Unreachable code.
Solution:   Remove outdated code lines.
2022-02-13 21:20:21 +00:00
c87aa34dfd patch 8.2.4373: expression test fails
Problem:    Expression test fails.
Solution:   Make the test work with latest Vim9 syntax.
2022-02-13 20:46:18 +00:00
299d8e5eec patch 8.2.4372: filetype detection from file contents is in legacy script
Problem:    Filetype detection from file contents is in legacy script.
Solution:   Use a compiled function for filetype detection.
2022-02-13 20:32:02 +00:00
75e27d78f5 patch 8.2.4371: Vim9: can create a script variable from a legacy function
Problem:    Vim9: can create a script variable from a legacy function.
Solution:   Disallow creating a script variable from a function.
2022-02-13 13:56:29 +00:00
cf6ad8ea8c patch 8.2.4370: MS-Windows: libsodium.dll not included with the installer
Problem:    MS-Windows: libsodium.dll not included with the installer.
Solution:   Add the file to the installer if it exists. (Christian Brabandt,
            closes #9762)
2022-02-13 13:11:32 +00:00
f7fbeed0ac patch 8.2.4369: redundant #ifdef argument
Problem:    Redundant #ifdef argument.
Solution:   Remove unused MSWIN. (Ola Söder, closes #9758)
2022-02-13 12:24:21 +00:00
e131496ebf patch 8.2.4368: Amiga: a few compiler warnings
Problem:    Amiga: a few compiler warnings.
Solution:   Adjust #ifdefs. Add "UNUSED". (Ola Söder, closes #9756,
            closes #9757)
2022-02-13 12:13:38 +00:00
4525a57afb patch 8.2.4367: calling in_vim9script() multiple times
Problem:    Calling in_vim9script() multiple times.
Solution:   Call it once and keep the result.
2022-02-13 11:57:33 +00:00
4d03d87000 patch 8.2.4366: not enough tests for command line completion
Problem:    Not enough tests for command line completion.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #9760)
2022-02-13 11:45:09 +00:00
cdf0485969 patch 8.2.4365: sticky command modifiers are too sticky
Problem:    sticky command modifiers are too sticky.
Solution:   Do not apply command modifiers to a called function. (closes #9751)
2022-02-12 22:13:06 +00:00
4549166078 patch 8.2.4364: MS-Windows: still running out of memory for a very long line
Problem:    MS-Windows: still running out of memory for a very long line.
Solution:   Check for negative length.
2022-02-12 21:59:51 +00:00
8e38555ece patch 8.2.4363: MS-Windows: running out of memory for a very long line
Problem:    MS-Windows: running out of memory for a very long line.
Solution:   Use a 32 bit value for MAXCOL also when ints are 64 bits.
2022-02-12 21:16:21 +00:00
33f3c59854 patch 8.2.4362: :retab may allocate too much memory
Problem:    :retab may allocate too much memory.
Solution:   Bail out when allocating more than MAXCOL bytes.
2022-02-12 20:46:15 +00:00
62b191c387 patch 8.2.4361: Vim9: some tests fail
Problem:    Vim9: some tests fail.
Solution:   Fix the tests, mostly by removing "s:".
2022-02-12 20:34:50 +00:00
a749a42ed2 patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Problem:    Vim9: allowing use of "s:" leads to inconsistencies.
Solution:   Disallow using "s:" in Vim9 script at the script level.
2022-02-12 19:52:25 +00:00
6e28703a8e patch 8.2.4359: crash when repeatedly using :retab
Problem:    crash when repeatedly using :retab.
Solution:   Bail out when the line is getting too long.
2022-02-12 15:42:18 +00:00
90a57168a4 patch 8.2.4358: Vim9: line number of exception is not set
Problem:    Vim9: line number of exception is not set.
Solution:   Set the line number before throwing an exception. (closes #9755)
2022-02-12 14:23:17 +00:00
2a9b62dfa2 patch 8.2.4357: sticky command modifiers are too sticky
Problem:    sticky command modifiers are too sticky.
Solution:   Do not apply command modifiers to a sourced script. (closes #9751)
2022-02-12 13:30:17 +00:00
620d8edba0 patch 8.2.4356: command line completion functions are very long
Problem:    Command line completion functions are very long.
Solution:   Refactor into multiple functions. (Yegappan Lakshmanan,
            closes #9753)
2022-02-12 12:03:07 +00:00
0f7ff851cb patch 8.2.4355: unnecessary call to check_colorcolumn()
Problem:    Unnecessary call to check_colorcolumn().
Solution:   Remove the call. (Sean Dewar, closes #9748)
2022-02-12 11:51:25 +00:00
d68b2fc034 patch 8.2.4354: dynamic loading of libsodium not handled properly
Problem:    Dynamic loading of libsodium not handled properly.
Solution:   Fix has() and :version. Show an error message when loading fails.
            Fix memory leaks. (Ken Takata, closes #9754)
2022-02-12 11:18:37 +00:00
18f7593e57 patch 8.2.4353: CI does not use the latest Lua and Python
Problem:    CI does not use the latest Lua and Python.
Solution:   Use Lua 5.4.2 and Python 3.10. (closes #9744)
2022-02-12 10:53:07 +00:00
0c3cc2fec3 patch 8.2.4352: ReScript files are not recognized
Problem:    ReScript files are not recognized.
Solution:   Add the *.res and *.resi patterns. (Ananda Umamil, closes #9752)
2022-02-12 10:33:56 +00:00
41ee5b1913 patch 8.2.4351: no coverage is measured on MS-Windows CI
Problem:    No coverage is measured on MS-Windows CI.
Solution:   Enable coverage on MS-Windows. (Ozaki Kiichi, closes #9750)
2022-02-12 10:13:13 +00:00
29c70f612f patch 8.2.4350: FEAT_GUI_ENABLED defined but never used
Problem:    FEAT_GUI_ENABLED defined but never used.
Solution:   Remove the #define. (Ola Söder, closes #9732)
2022-02-11 21:13:35 +00:00
c9e3187d05 patch 8.2.4349: FileChangedShell test fails on MS-Windows
Problem:    FileChangedShell test fails on MS-Windows.
Solution:   Skip the test on MS-Windows.
2022-02-11 20:55:16 +00:00
5b1d6e98c6 patch 8.2.4348: "legacy exe cmd" does not do what one would expect
Problem:    "legacy exe cmd" does not do what one would expect.
Solution:   Apply the "legacy" and "vim9script" command modifiers to the
            argument of ":execute".
2022-02-11 20:33:48 +00:00
bd89d44063 patch 8.2.4347: in some build setups UNUSED is not defined
Problem:    In some build setups UNUSED is not defined.
Solution:   Change the logic of how UNUSED is defined. (Ola Söder,
            closes #9734)
2022-02-11 19:27:55 +00:00
481acb1141 patch 8.2.4346: a custom statusline may cause Esc to work like Enter
Problem:    A custom statusline may cause Esc to work like Enter on the
            command line when the popup menu is displayed.
Solution:   Save and restore KeyTyped. (closes #9749)
2022-02-11 18:51:45 +00:00
f6246f51e3 patch 8.2.4345: <amatch> is expanded like a file name for DirChangedPre
Problem:    <amatch> is expanded like a file name for DirChangedPre.
Solution:   Do not expand <amatch>. (closes #9742)  Also for the User event.
2022-02-11 16:30:12 +00:00
14f23122bf patch 8.2.4344: Amiga: header file included twice
Problem:    Amiga: header file included twice.
Solution:   Remove #include. (Ola Söder, closes #9733)
2022-02-11 16:11:14 +00:00
8196e94a8b patch 8.2.4343: when reloading not all properties are detected
Problem:    When reloading not all properties are detected.
Solution:   Add the "edit" value to v:fcs_choice. (Rob Pilling, closes #9579)
2022-02-11 15:12:10 +00:00
92f645bef7 Update runtime files. (closes #9741) 2022-02-11 13:29:40 +00:00
bece72785d patch 8.2.4342: CI will soon switch to other windows version
Problem:    CI will soon switch to other windows version.
Solution:   Use "windows-2019" instead of "windows-latest". (Ozaki Kiichi,
            closes #9740)
2022-02-11 11:09:40 +00:00
414acd342f patch 8.2.4341: command line not redrawn when finishing popup menu
Problem:    Command line not redrawn when finishing popup menu and the screen
            has scrolled up.
Solution:   Redraw the command line after updating the screen. (closes #9722)
2022-02-10 21:09:45 +00:00
949b35d83b patch 8.2.4340: Amiga: mch_can_exe() is not implemented
Problem:    Amiga: mch_can_exe() is not implemented.
Solution:   Implement mch_can_exe() for Amiga OS 4. (Ola Söder, closes #9731)
2022-02-10 20:21:04 +00:00
560dff49c0 patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Problem:    CTRL-A does not work properly with the cmdline popup menu.
Solution:   Fix issues with CTRL-A.  Add more tests for the cmdline popup
            menu.  Remove TermWait() before VeriryScreenDump().  Refactor the
            cmdline popup code. (Yegappan Lakshmanan, closes #9735)
2022-02-10 19:52:10 +00:00
74a0a5b26d patch 8.2.4338: an error from an expression mapping messes up the display
Problem:    An error from an expression mapping messes up the display.
Solution:   When the expression results in an empty string return K_IGNORE.
            In cmdline mode redraw the command line. (closes #9726)
2022-02-10 14:07:41 +00:00
9da17d7c57 Update runtime files 2022-02-09 21:50:44 +00:00
78a8404f8b patch 8.2.4337: part of condition is always true
Problem:    Part of condition is always true.
Solution:   Remove that part of the condition. (closes #9729)
2022-02-09 15:20:39 +00:00
769f5895eb patch 8.2.4336: using :filter for :scriptnames does not work
Problem:    Using :filter for :scriptnames does not work. (Ben Jackson)
Solution:   Call message_filtered(). (closes #9720)
2022-02-09 14:31:05 +00:00
28e8f73ae2 patch 8.2.4335: no autocommand event triggered before changing directory
Problem:    No autocommand event triggered before changing directory. (Ronnie
            Magatti)
Solution:   Add DirChangedPre. (closes #9721)
2022-02-09 12:58:20 +00:00
68cc2b8a37 patch 8.2.4334: command line popup menu not positioned correctly
Problem:    Command line popup menu not positioned correctly.
Solution:   Also use vim_strsize() on the existing text. (Naruhiko Nishino,
            closes #9727)
2022-02-09 11:55:47 +00:00
b6a138eb33 patch 8.2.4333: cstack not always passed to where it is needed
Problem:    cstack not always passed to where it is needed.
Solution:   Pass ctack through functions.
2022-02-08 21:17:22 +00:00
dce2441a60 patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Problem:    Vim9: incomplete test for existing script variable in block.
Solution:   Add a couple more tests.  Fix uncovered problem.
2022-02-08 20:35:30 +00:00
3a5988c025 patch 8.2.4331: Vim9: no test for existing script variable in block
Problem:    Vim9: no test for existing script variable in block.
Solution:   Add a test.
2022-02-08 19:23:35 +00:00
779aeff5c3 patch 8.2.4330: Vim9: no error if script imports itself
Problem:    Vim9: no error if script imports itself.
Solution:   Give an error when a script imports itself.
2022-02-08 19:12:19 +00:00
e023d49937 patch 8.2.4329: no support for end line number and column in 'errorformat'
Problem:    No support for end line number and column in 'errorformat'.
Solution:   Add %e and %k. (closes #9624)
2022-02-08 18:09:29 +00:00
73a16c22a4 patch 8.2.4328: command line complete matches cleard when typing character
Problem:    Command line complete matches cleard when typing character.
            (Dominique Pellé)
Solution:   Only remove a popup menu if there is one.
2022-02-08 17:40:36 +00:00
e3537aec2f patch 8.2.4327: may end up with no current buffer
Problem:    May end up with no current buffer.
Solution:   When deleting the current buffer to not pick a quickfix buffer as
            the new current buffer.
2022-02-08 15:05:20 +00:00
51ab7c7d0d patch 8.2.4326: "o" and "O" copying comment not sufficiently tested
Problem:    "o" and "O" copying comment not sufficiently tested.
Solution:   Add a test case. (closes #9718)
2022-02-08 12:58:37 +00:00
3908ef5017 patch 8.2.4325: 'wildmenu' only shows few matches
Problem:    'wildmenu' only shows few matches.
Solution:   Add the "pum" option: use a popup menu to show the matches.
            (Yegappan Lakshmanan et al., closes #9707)
2022-02-08 12:08:07 +00:00
3787f26c2e patch 8.2.4324: Vim9: script-local function name can start with "_"
Problem:    Vim9: script-local function name can start with "_".
Solution:   Check for leading capital after "s:".  Correct error message.
2022-02-07 21:54:01 +00:00
f681cfb90b patch 8.2.4323: Vim9: nested function name can start with "_"
Problem:    Vim9: nested function name can start with "_".
Solution:   Use same rule for function name for nested functions.
            (closes #9713)
2022-02-07 20:30:57 +00:00
7aca5ca676 patch 8.2.4322: Vim9: crash when using funcref with closure
Problem:    Vim9: crash when using funcref with closure.
Solution:   Keep a reference to the funcref that has the outer context.
            (closes #9716)
2022-02-07 19:56:43 +00:00
92368aad61 patch 8.2.4321: Vim9: crash when using a funcref to a closure
Problem:    Vim9: crash when using a funcref to a closure.
Solution:   Copy pt_outer to the new partial. (closes #9714)
2022-02-07 17:50:39 +00:00
28f1a51bde patch 8.2.4320: Athena and Motif: when maximized scrollbar position is wrong
Problem:    Athena and Motif: when maximized scrollbar position is wrong.
Solution:   Implement the scrollbar padding functions. (closes #9712)
2022-02-07 15:57:50 +00:00
4e713bafc0 patch 8.2.4319: :put does not work properly in compiled function
Problem:    :put does not work properly in compiled function. (John Beckett)
Solution:   Adjust the direction when using line zero.
2022-02-07 15:31:37 +00:00
54969f4ef5 patch 8.2.4318: various comment and indent mistakes, returning wrong zero
Problem:    Various comment and indent mistakes, returning wrong zero.
Solution:   Fix the mistakes.  Return NULL instead of FAIL.
2022-02-07 13:56:44 +00:00
63ff72aab9 patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Problem:    MS-Windows: Vim exits when Python 3 initialisation fails.
Solution:   Hook into the exit() function to recover from the failure.
            (Ken Takata, closes #9710)
2022-02-07 13:54:01 +00:00
b247e0622e patch 8.2.4316: __CYGWIN32__ is not defined on 64 bit systems
Problem:    __CYGWIN32__ is not defined on 64 bit systems.
Solution:   Update #ifdefs. (Ken Takata, closes #9709)
2022-02-07 10:45:23 +00:00
6bf821e8ab patch 8.2.4315: put in Visual mode not fully tested
Problem:    Put in Visual mode not fully tested.
Solution:   Add a few more test cases. (closes #9708)
2022-02-07 10:33:20 +00:00
8cbf249917 patch 8.2.4314: test fails where lines are skipped
Problem:    Test fails where lines are skipped.
Solution:   Only give an error when not skipping commands.
2022-02-06 20:28:13 +00:00
5f4ef5f5e5 patch 8.2.4313: Vim9: cannot change type of list after making a slice
Problem:    Vim9: cannot change type of list after making a slice.
Solution:   Adjust the declared member type. (closes #9696)
2022-02-06 18:36:53 +00:00
107f7325f6 patch 8.2.4312: no error for using :vim9script in a :def function
Problem:    No error for using :vim9script in a :def function.
Solution:   Give an error when compiling.
2022-02-06 17:30:41 +00:00
160afdb185 patch 8.2.4311: Vim9: changing script variable type not caught compile time
Problem:    Vim9: changing script variable type not caught at compile time.
Solution:   Set the declared type.
2022-02-06 17:17:02 +00:00
2626d6a71c patch 8.2.4310: Vim9: constant list and dict get a declaration type
Problem:    Vim9: constant list and dict get a declaration type other than
            "any".
Solution:   A constant list and dict have a declared member type "any".
            (closes #9701)
2022-02-06 15:49:35 +00:00
fe1bfc9b26 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Problem:    Vim9: crash when using a partial in the wrong context.
Solution:   Don't use an NULL outer pointer. (closes #9706)
2022-02-06 13:55:03 +00:00
8164f6ea3c patch 8.2.4308: Vim9: cannot list autoload function
Problem:    Vim9: cannot list autoload function.
Solution:   Don't give an error for using # when listing a function.
            (closes #9703)
2022-02-06 13:08:41 +00:00
0c1550d9e9 patch 8.2.4307: a few more messages should not be translated
Problem:    A few more messages should not be translated.
Solution:   Remove _().
2022-02-06 11:41:57 +00:00
500761b1cf patch 8.2.4306: no test for fixed perl filetype check
Problem:    No test for fixed perl filetype check.
Solution:   Add a test. Sort test functions.
2022-02-05 20:23:59 +00:00
e5b7897585 patch 8.2.4305: tex filetype detection fails
Problem:    Tex filetype detection fails.
Solution:   Check value to be positive. (closes #9704)
2022-02-05 19:50:34 +00:00
00eb99528e patch 8.2.4304: Vim9: slice() makes a copy but doesn't change the type
Problem:    Vim9: slice() makes a copy but doesn't change the type.
Solution:   Change the declared type like copy(). (closes #9696)
2022-02-05 19:23:18 +00:00
cd53eed2c5 patch 8.2.4303: a few messages should not be translated
Problem:    A few messages should not be translated.
Solution:   Remove _(). (Dominique Pellé, closes #9702)
2022-02-05 18:53:06 +00:00
82e46e5d31 patch 8.2.4302: Vim9: return type of getline() is too strict
Problem:    Vim9: return type of getline() is too strict.
Solution:   Make the declared type list<any>.  Also do this for other
            functions returning a list of a specific type.
2022-02-05 18:12:34 +00:00
e0c2b2ceaa patch 8.2.4301: Vim9: type error for copy of dict
Problem:    Vim9: type error for copy of dict.
Solution:   Do not use dict<any> but no type. (closes #9696)
2022-02-05 14:05:51 +00:00
4fa1346bf4 patch 8.2.4300: cannot build tiny version
Problem:    Cannot build tiny version. (Tony Mechelynck)
Solution:   Add #ifdef.
2022-02-05 12:39:24 +00:00
46f3080e5c patch 8.2.4299: SafeState autocommand interferes with debugging
Problem:    SafeState autocommand interferes with debugging.
Solution:   Do not trigger SafeState while debugging. (closes #9697)
2022-02-05 12:10:52 +00:00
fc88df42f1 patch 8.2.4298: divide by zero with huge tabstop value
Problem:    Divide by zero with huge tabstop value.
Solution:   Reject tabstop value that overflows to zero.
2022-02-05 11:13:05 +00:00
21ebb0899e patch 8.2.4297: Vim9: not all code covered by tests
Problem:    Vim9: not all code covered by tests.
Solution:   Add a couple more tests.
2022-02-04 21:58:58 +00:00
83d0cec956 patch 8.2.4296: Vim9: not all code covered by tests
Problem:    Vim9: not all code covered by tests.
Solution:   Add a few more tests for corner cases.  Fix hang when single quote
            is missing.
2022-02-04 21:17:58 +00:00
3e79c97c18 Update runtime files; use compiled functions 2022-02-04 19:48:06 +00:00
a2baa73d1d Update runtime files. 2022-02-04 16:09:54 +00:00
46950b225f patch 8.2.4295: Vim9: concatenating two lists may result in wrong type
Problem:    Vim9: concatenating two lists may result in wrong type.
Solution:   Remove the type instead of using list<any>. (closes #9692)
2022-02-04 11:36:51 +00:00
972db23279 patch 8.2.4294: MS-Windows: #ifdefs for Cygwin are too complicated
Problem:    MS-Windows: #ifdefs for Cygwin are too complicated.
Solution:   Simplify the conditions. (Ken Takata, closes #9693)
2022-02-04 10:45:38 +00:00
7676c15879 patch 8.2.4293: Vim9: when copying a list it gets type list<any>
Problem:    Vim9: when copying a list it gets type list<any> even when the
            original list did not have a type.
Solution:   Only set the type when the original list has a type. (closes #9692)
2022-02-03 21:47:34 +00:00
02a977ea5e patch 8.2.4292: test fails
Problem:    Test fails.
Solution:   Adjust the expected error number.
2022-02-03 21:29:39 +00:00
5658ca343f patch 8.2.4291: error number used twice
Problem:    Error number used twice.
Solution:   Renumber of of the errors.
2022-02-03 20:09:19 +00:00
a8ec4916ca patch 8.2.4290: MS-Windows: using type casts for timer IDs
Problem:    MS-Windows: using type casts for timer IDs.
Solution:   Remove type casts and use the right type. (Ken Takata,
            closes #9690)  Remove old debug comments.  Rename variables and
            functions.
2022-02-03 14:32:33 +00:00
5411910c77 patch 8.2.4289: warnings reported by MSVC
Problem:    Warnings reported by MSVC.
Solution:   Rename variables and other fixes. (Ken Takata, closes #9689)
2022-02-03 13:33:03 +00:00
6e1d31e9e3 patch 8.2.4288: preprocessor indents are inconsistent
Problem:    Preprocessor indents are inconsistent.
Solution:   Fix preprocessor indents. (Ken Takata, closes #9691)
2022-02-03 13:05:32 +00:00
2d3ac2e030 patch 8.2.4287: cannot assign empty list with type to variable with list type
Problem:    Cannot assign empty list with any list type to variable with
            specific list type.
Solution:   Use unknown list type for empty list if the specified type is any.
2022-02-03 12:34:05 +00:00
381692b6f1 patch 8.2.4286: Vim9: strict type checking after copy() and deepcopy()
Problem:    Vim9: strict type checking after copy() and deepcopy().
Solution:   Allow type to change after making a copy. (closes #9644)
2022-02-02 20:01:27 +00:00
a1c5195180 patch 8.2.4285: Vim9: type of item in for loop not checked properly
Problem:    Vim9: type of item in for loop not checked properly.
Solution:   Adjust the type checking. (closes #9683)
2022-02-02 16:20:26 +00:00
ab8f7c50cf patch 8.2.4284: old mac resources files are no longer used
Problem:    Old mac resources files are no longer used.
Solution:   Delete the unused files. (Ozaki Kiichi, closes #9688)
2022-02-02 15:19:38 +00:00
73257149d7 patch 8.2.4283: using a variable for the return value is not needed
Problem:    Using a variable for the return value is not needed.
Solution:   Return the value directly. (closes #9687)
2022-02-02 13:16:37 +00:00
adbb1bf21d patch 8.2.4282: restricted mode requires the -Z command line option
Problem:    Restricted mode requires the -Z command line option.
Solution:   Use restricted mode when $SHELL ends in "nologin" or "false".
            (closes #9681)
2022-02-01 17:26:12 +00:00
9b4a80a665 patch 8.2.4281: using freed memory with :lopen and :bwipe
Problem:    Using freed memory with :lopen and :bwipe.
Solution:   Do not use a wiped out buffer.
2022-02-01 13:54:17 +00:00
eb4a9ba293 patch 8.2.4280: list-dict test crashes
Problem:    list-dict test crashes.
Solution:   Check declared type for add().
2022-02-01 12:47:07 +00:00
8133018f50 patch 8.2.4279: Vim9: cannot change item type with map() after range()
Problem:    Vim9: cannot change item type with map() after range().
Solution:   Split the return type in current type and declared type.
            (closes #9665)
2022-02-01 12:11:58 +00:00
4e3b318230 patch 8.2.4278: build with Athena GUI fails
Problem:    Build with Athena GUI fails. (Elimar Riesebieter)
Solution:   Add #ifdef.
2022-02-01 10:16:00 +00:00
68854a82fd patch 8.2.4277: Vim9: an import does not shadow a command modifier
Problem:    Vim9: an import does not shadow a command modifier.
Solution:   Do not accept a command modifier followed by a dot.
2022-01-31 18:59:13 +00:00
9e0208f51c patch 8.2.4276: separate test function for the GUI scrollbar
Problem:    Separate test function for the GUI scrollbar.
Solution:   Use test_gui_event(). (Yegappan Lakshmanan, closes #9674)
2022-01-31 17:40:55 +00:00
223a950a85 patch 8.2.4275: cannot use an autoload function from a package under start
Problem:    Cannot use an autoload function from a package under start.
Solution:   Also look in the "start" package directory. (Bjorn Linse,
            closes #7193)
2022-01-31 17:26:05 +00:00
c570e9cf68 patch 8.2.4274: Basic and form filetype detection is incomplete
Problem:    Basic and form filetype detection is incomplete.
Solution:   Add a separate function for .frm files. (Doug Kearns, closes #9675)
2022-01-31 17:09:14 +00:00
c4573eb12d Update runtime files 2022-01-31 15:40:56 +00:00
424bcae1fb patch 8.2.4273: the EBCDIC support is outdated
Problem:    The EBCDIC support is outdated.
Solution:   Remove the EBCDIC support.
2022-01-31 14:59:41 +00:00
eb6c276595 patch 8.2.4272: Vim9 expr test fails without the channel feature
Problem:    Vim9 expr test fails without the channel feature. (Dominique
            Pellé)
Solution:   Remove "g:" before "CheckFeature". (closes #9671)
2022-01-31 13:36:36 +00:00
1f47a287ee patch 8.2.4271: MS-Windows: cannot build with Ruby 3.1.0
Problem:    MS-Windows: cannot build with Ruby 3.1.0.
Solution:   Adjust the DLL name and include directory. (Ken Takata,
            closes #9666)
2022-01-31 13:25:36 +00:00
672776dbe8 patch 8.2.4270: generating nv_cmdidxs.h requires building Vim twice
Problem:    Generating nv_cmdidxs.h requires building Vim twice.
Solution:   Move the table into a separate file and use a separate executable
            to extract the command characters. (Ozaki Kiichi, closes #9669)
2022-01-31 12:27:18 +00:00
48a604845e patch 8.2.4269: Coverity warns for using a NULL pointer
Problem:    Coverity warns for using a NULL pointer.
Solution:   Check for "name" to not be NULL.
2022-01-31 11:44:48 +00:00
44d1f89c24 patch 8.2.4268: CI log output is long
Problem:    CI log output is long.
Solution:   Group output in sections. (Ozaki Kiichi, closes #9670)
2022-01-31 11:38:53 +00:00
4c93aff20f patch 8.2.4267: unused entry in keymap enum
Problem:    Unused entry in keymap enum.
Solution:   Remove the entry.
2022-01-31 11:29:51 +00:00
5703310e64 patch 8.2.4266: compiler warning for uninitialized variable
Problem:    Compiler warning for uninitialized variable.
Solution:   Initialize saved_did_emsg.
2022-01-30 19:37:52 +00:00
6a05807092 patch 8.2.4265: autoload tests fails
Problem:    Autoload tests fails.
Solution:   Use export instead of name with #.
2022-01-30 18:56:35 +00:00
d8fe6d34bb patch 8.2.4264: Vim9: can use old style autoload function name
Problem:    Vim9: can use old style autoload function name.
Solution:   Give an error for old style autoload function name.
2022-01-30 18:40:44 +00:00
ec3637cbaf patch 8.2.4263: no test for the GUI find/replace dialog
Problem:    No test for the GUI find/replace dialog.
Solution:   Add a test function and a test. (Yegappan Lakshmanan,
            closes #9662)
2022-01-30 18:01:24 +00:00
44a4d947bb patch 8.2.4262: some search tests fail
Problem:    Some search tests fail.
Solution:   Use a better way to reject searching for the Visual area.
2022-01-30 17:17:41 +00:00
679d66c2d2 patch 8.2.4261: accessing invalid memory in a regular expression
Problem:    Accessing invalid memory when a regular expression checks the
            Visual area while matching in a string.
Solution:   Do not try matching the Visual area in a string.
2022-01-30 16:42:56 +00:00
848faddb87 patch 8.2.4260: Vim9: can still use a global function without g:
Problem:    Vim9: can still use a global function without g: at the script
            level.
Solution:   Also check for g: at the script level. (issue #9637)
2022-01-30 15:28:30 +00:00
06011e1a55 patch 8.2.4259: number of test functions for GUI events is growing
Problem:    Number of test functions for GUI events is growing.
Solution:   Use one function with a dictionary. (Yegappan Lakshmanan,
            closes #9660)
2022-01-30 12:37:29 +00:00
6970e1e36a patch 8.2.4258: Coverity warns for array overrun
Problem:    Coverity warns for array overrun.
Solution:   Restrict depth to MAXWLEN - 1.
2022-01-30 12:10:39 +00:00
f10911e5db Update runtime files 2022-01-29 22:20:48 +00:00
62aec93bfd patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Problem:    Vim9: finding global function without g: prefix but not finding
            global variable is inconsistent.
Solution:   Require using g: for a global function.  Change the vim9.vim
            script into a Vim9 script with exports.  Fix that import in legacy
            script does not work.
2022-01-29 21:45:34 +00:00
135e15251e patch 8.2.4256: MS-Windows: compiler warnings when compiled with /W4
Problem:    MS-Windows: compiler warnings when compiled with /W4.
Solution:   Small adjustments to the code. (Ken Takata, closes #9659)
2022-01-29 15:27:58 +00:00
d5cec1f1f0 patch 8.2.4255: theoretical computation overflow
Problem:    Theoretical computation overflow.
Solution:   Perform multiplication in a wider type. (closes #9657)
2022-01-29 15:19:23 +00:00
f12b7815f6 patch 8.2.4254: using short instead of int
Problem:    Using short instead of int.
Solution:   Use int. (closes #9658)
2022-01-29 15:12:39 +00:00
37f47958b8 patch 8.2.4253: using freed memory when substitute with function call
Problem:    Using freed memory when substitute uses a recursive function call.
Solution:   Make a copy of the substitute text.
2022-01-29 14:21:51 +00:00
4dc0dd8699 patch 8.2.4252: generating the normal command table at runtime is inefficient
Problem:    Generating the normal command table at runtime is inefficient.
Solution:   Generate the table with a Vim script and put it in a header file.
            (Yegappan Lakshmanan, closes #9648)
2022-01-29 13:06:40 +00:00
97c554d514 patch 8.2.4251: vala files are not recognized
Problem:    Vala files are not recognized.
Solution:   Add the *.vala pattern. (closes #9654)
2022-01-29 12:45:47 +00:00
24714a1916 patch 8.2.4250: channel out callback test is flaky on Mac
Problem:    Channel out callback test is flaky on Mac.
Solution:   Assign high priority to the test process. (Ozaki Kiichi,
            closes #9653)
2022-01-29 12:10:43 +00:00
585ee07cfe patch 8.2.4249: the timeout limit for spell suggestions is always 5000
Problem:    The timeout limit for spell suggestions is always 5000 milli
            seconds.
Solution:   Add the "timeout" entry to 'spellsuggest'.
2022-01-29 11:22:17 +00:00
a0c4e2f2d7 patch 8.2.4248: no proper test for moving the window separator
Problem:    No proper test for moving the window separator.
Solution:   Add a test.  Add comment in code. (closes #9656)
2022-01-29 10:59:53 +00:00
06f15416bb patch 8.2.4247: stack corruption when looking for spell suggestions
Problem:    Stack corruption when looking for spell suggestions.
Solution:   Prevent the depth increased too much.  Add a five second time
            limit to finding suggestions.
2022-01-29 10:51:59 +00:00
e96eea7b6a patch 8.2.4246: one error message not in errors.h
Problem:    One error message not in errors.h. (Antonio Colombo)
Solution:   Move the message and rename.
2022-01-28 21:00:51 +00:00
652dee4486 patch 8.2.4245: ":retab 0" may cause illegal memory access
Problem:    ":retab 0" may cause illegal memory access.
Solution:   Limit the value of 'tabstop' to 10000.
2022-01-28 20:47:49 +00:00
14cbf77845 patch 8.2.4244: MS-Windows: warning from MSVC on debug build
Problem:    MS-Windows: warning from MSVC on debug build.
Solution:   Adjust "/opt"o options.  Remove unused variables.  Make variables
            uppercase for consistency. (Ken Takata, closes #9647)
2022-01-28 18:54:13 +00:00
57ff2b7068 patch 8.2.4243: Lua tests fail with Lua 5.4.4
Problem:    Lua tests fail with Lua 5.4.4.
Solution:   Check messages like before Lua 5.4.3. (Jakub Kulík, closes #9652)
2022-01-28 17:20:03 +00:00
fb55207ed1 patch 8.2.4242: put in Visual mode cannot be repeated
Problem:    Put in Visual mode cannot be repeated.
Solution:   Use "P" to put without yanking the deleted text into the unnamed
            register. (Shougo Matsushita, closes #9591)
2022-01-28 16:01:13 +00:00
420fabcd4f patch 8.2.4241: some type casts are redundant
Problem:    Some type casts are redundant.
Solution:   Remove the type casts. (closes #9643)
2022-01-28 15:28:04 +00:00
fb80862e49 patch 8.2.4240: error for using flatten() in Vim9 script is unclear
Problem:    Error for using flatten() in Vim9 script is unclear.
Solution:   Add a remark to use flattennew().
2022-01-28 15:01:47 +00:00
ddd815ba2a patch 8.2.4239: build fails with unusual configuration
Problem:    Build fails with unusual configuration.
Solution:   Adjust #ifdef. (closes #9651)
2022-01-28 14:39:58 +00:00
bd8168c770 patch 8.2.4238: *.tf file could be fileytpe "tf" or "terraform"
Problem:    *.tf file could be fileytpe "tf" or "terraform".
Solution:   Detect the type from the file contents. (closes #9642)
2022-01-28 14:15:09 +00:00
fbf4f1ca15 patch 8.2.4237: record buffer wrong if character in Select mode was not typed
Problem:    Record buffer wrong if character in Select mode was not typed.
Solution:   Only delete the tail from the record buffer if the character was
            typed. (closes #9650)
2022-01-28 12:50:43 +00:00
166788c657 patch 8.2.4236: accessing freed memory
Problem:    Accessing freed memory.
Solution:   Set the bh_curr pointer to NULL.
2022-01-27 21:56:40 +00:00
37cf413e3e patch 8.2.4235: invalid check for NULL pointer
Problem:    Invalid check for NULL pointer.
Solution:   Remove the check.
2022-01-27 20:47:03 +00:00
b3d83980d2 patch 8.2.4234: test_garbagecollect_now() does not check v:testing
Problem:    test_garbagecollect_now() does not check v:testing as documented.
Solution:   Give an error if v:testing is not set.
2022-01-27 19:59:47 +00:00
a4bc2dd7cc patch 8.2.4233: crash when recording and using Select mode
Problem:    Crash when recording and using Select mode.
Solution:   When deleting the last recorded character check there is something
            to delete.
2022-01-27 19:27:16 +00:00
98cd30383a patch 8.2.4232: some compilers don't like a goto label without statement
Problem:    Some compilers don't like a goto label without statement.
Solution:   Return instead of using a goto.
2022-01-27 17:37:41 +00:00
35c807df1f patch 8.2.4231: Vim9: map() gives type error when type was not declared
Problem:    Vim9: map() gives type error when type was not declared.
Solution:   Only check the type when it was declared, like extend() does.
            (closes #9635)
2022-01-27 16:36:29 +00:00
94373c48e7 patch 8.2.4230: MS-Windows: set_guifontwide() is included but won't work
Problem:    MS-Windows: set_guifontwide() is included but won't work.
Solution:   Include set_guifontwide() only for X11. (Ken Takata, closes #9640)
2022-01-27 15:04:22 +00:00
745b938a48 patch 8.2.4229: possible crash when invoking timer callback fails
Problem:    Possible crash when invoking timer callback fails.
Solution:   Initialize the typval.  Give an error for an empty callback.
            (closes #9636)
2022-01-27 13:55:35 +00:00
b0ad2d92fd patch 8.2.4228: no tests for clicking in the GUI tabline
Problem:    No tests for clicking in the GUI tabline.
Solution:   Add test functions to generate the events.  Add tests using the
            functions. (Yegappan Lakshmanan, closes #9638)
2022-01-27 13:16:59 +00:00
e939f5ebba patch 8.2.4227: Vim9: using "lockvar!" in :def function does not work
Problem:    Vim9: using "lockvar!" in :def function does not work.
Solution:   Add "!" instead of "-1". (closes #9634)
2022-01-26 21:32:59 +00:00
fc4c44836a patch 8.2.4226: filter-map test fails
Problem:    Filter-map test fails.
Solution:   Only reject number argument in Vim9 script.
2022-01-26 21:17:04 +00:00
70c43d84be patch 8.2.4225: Vim9: depth argument of :lockvar not parsed in :def function
Problem:    Vim9: depth argument of :lockvar not parsed in :def function.
Solution:   Parse the optional depth argument. (closes #9629)
            Fix that locking doesn't work for a non-materialize list.
2022-01-26 21:01:15 +00:00
1080c48ec8 patch 8.2.4224: Vim9: no error when using a number for map() second argument
Problem:    Vim9: no error when using a number for map() second argument
Solution:   Disallow number to string conversion. (closes #9630)
2022-01-26 18:26:21 +00:00
1a804528ab patch 8.2.4223: long/int compiler warnings; function arguments swapped
Problem:    Long/int compiler warnings; function arguments swapped.
Solution:   Add type casts.  Swap arguments. (Ken Takata, closes #9632)
2022-01-26 16:45:20 +00:00
47d1666d60 patch 8.2.4222: MS-Windows: clumsy way to suppress progress on CI
Problem:    MS-Windows: clumsy way to suppress progress on CI.
Solution:   Check for "$CI" in the Makefile itself. (Ken Takata, closes #9631)
2022-01-26 16:20:21 +00:00
a827bf3ea8 patch 8.2.4221: some functions in normal.c are very long
Problem:    Some functions in normal.c are very long.
Solution:   Move code to separate functions. (Yegappan Lakshmanan,
            closes #9628)
2022-01-26 12:14:15 +00:00
250155ae31 patch 8.2.4220: MS-Windows: some old compiler support remains
Problem:    MS-Windows: some old compiler support remains.
Solution:   Remove obsolete compiler support. (Ken Takata, closes #9627)
2022-01-26 11:16:52 +00:00
44db8213d3 patch 8.2.4219: reading before the start of the line
Problem:    Reading before the start of the line.
Solution:   Check boundary before trying to read the character.
2022-01-25 21:26:17 +00:00
806d037671 patch 8.2.4218: illegal memory access with bracketed paste in Ex mode
Problem:    Illegal memory access with bracketed paste in Ex mode.
Solution:   Reserve space for the trailing NUL.
2022-01-25 20:45:16 +00:00
8d02ce1ed7 patch 8.2.4217: illegal memory access when undo makes Visual area invalid
Problem:    Illegal memory access when undo makes Visual area invalid.
Solution:   Correct the Visual area after undo.
2022-01-25 18:24:00 +00:00
06b77229ca patch 8.2.4216: Vim9: cannot use a function from an autoload import directly
Problem:    Vim9: cannot use a function from an autoload import directly.
Solution:   Add the AUTOLOAD instruction to figure out at runtime.
            (closes #9620)
2022-01-25 15:51:56 +00:00
dc5490e2cb patch 8.2.4215: illegal memory access when copying lines in Visual mode
Problem:    Illegal memory access when copying lines in Visual mode.
Solution:   Adjust the Visual position after copying lines.
2022-01-25 13:52:53 +00:00
85b6747abc patch 8.2.4214: illegal memory access with large 'tabstop' in Ex mode
Problem:    Illegal memory access with large 'tabstop' in Ex mode.
Solution:   Allocate enough memory.
2022-01-25 11:55:02 +00:00
76687d2717 patch 8.2.4213: too much code for supporting old MSVC versions
Problem:    Too much code for supporting old MSVC versions.
Solution:   Remove MSVC 2003 support. (Ken Takata, closes #9623)
2022-01-25 10:31:37 +00:00
1450112eef patch 8.2.4212: window title test still fails in some configurations
Problem:    Window title test still fails in some configurations.
Solution:   Explicitly set the 'title' option.
2022-01-24 22:32:28 +00:00
3a8ad5918b patch 8.2.4211: window title test still fails in some configurations
Problem:    Window title test still fails in some configurations.
Solution:   Use WaitForAssert().
2022-01-24 22:18:24 +00:00
a6c09a7c20 patch 8.2.4210: window title test fails in some configurations
Problem:    Window title test fails in some configurations.
Solution:   Only run the test if the title can be obtained.
2022-01-24 22:02:15 +00:00
3e93a2b075 patch 8.2.4209: partial in 'opfunc' cannot use an imported function
Problem:    partial in 'opfunc' cannot use an imported function.
Solution:   Also expand the function name in a partial. (closes #9614)
2022-01-24 21:28:01 +00:00
dff97e65eb patch 8.2.4208: using setbufvar() may change the window title
Problem:    Using setbufvar() may change the window title.
Solution:   Do not redraw when creating the autocommand window. (closes #9613)
2022-01-24 20:00:55 +00:00
50e0525445 patch 8.2.4207: recursion test fails with MSVC
Problem:    Recursion test fails with MSVC.
Solution:   Use a smaller limit for MSVC.
2022-01-24 18:36:39 +00:00
fe6fb267e6 patch 8.2.4206: condition with many "(" causes a crash
Problem:    Condition with many "(" causes a crash.
Solution:   Limit recursion to 1000.
2022-01-24 18:16:12 +00:00
4663435074 patch 8.2.4205: the normal_cmd() function is too long
Problem:    The normal_cmd() function is too long.
Solution:   Move parts to separate functions. (Yegappan Lakshmanan,
            closes #9608)
2022-01-24 16:30:30 +00:00
7924a17791 patch 8.2.4204: screenpos() has non-zero row for invisible text
Problem:    screenpos() has non-zero row for invisible text.
Solution:   Only add the window row when the text is visible. (closes #9618)
2022-01-24 16:15:15 +00:00
502d8ae3e8 patch 8.2.4203: entering a character with CTRL-V may include modifiers
Problem:    Entering a character with CTRL-V may include modifiers.
Solution:   Reset "mod_mask" when entering a character with digits after
            CTRL-V. (closes #9610)
2022-01-24 15:27:50 +00:00
acc4b5648b patch 8.2.4202: Vim9: cannot export function that exists globally
Problem:    Vim9: cannot export function that exists globally.
Solution:   When checking if a function already exists only check for
            script-local functions. (closes #9615)
2022-01-24 13:54:45 +00:00
8e4af851fd patch 8.2.4201: when using the GUI CTRL-Z does not stop gvim
Problem:    When using the GUI CTRL-Z does not stop gvim.
Solution:   When using the GUI set SIGTSTP to SIG_DFL. (Andrew Maltsev,
            closes #9570)
2022-01-24 12:20:45 +00:00
7e765a39b7 patch 8.2.4200: some tests do not clean up properly
Problem:    Some tests do not clean up properly.
Solution:   Delete created files. (Yegappan Lakshmanan, closes #9611)
2022-01-24 11:40:37 +00:00
c351dc1e0c patch 8.2.4199: MS-Windows: Support for MSVC 2003 is not useful
Problem:    MS-Windows: Support for MSVC 2003 is not useful.
Solution:   Remove the exceptions for MSVC 2003. (Ken Takata, closes #9616)
2022-01-24 11:24:08 +00:00
058ee7c569 patch 8.2.4198: Vim9: the switch for executing instructions is too long
Problem:    Vim9: the switch for executing instructions is too long.
Solution:   Move some code to separate functions.
2022-01-23 20:00:42 +00:00
2a7aa83458 patch 8.2.4197: cannot use an import in the "expr" part of 'spellsuggest'
Problem:    Cannot use an import in the "expr" part of 'spellsuggest'.
Solution:   Set the script context when evaluating "expr" of 'spellsuggest'.
2022-01-23 17:59:06 +00:00
428058ab32 patch 8.2.4196: various file types not recognized
Problem:    Various file types not recognized.
Solution:   Add patterns to recognize more file types (closes #9607)
2022-01-23 17:09:05 +00:00
79a6e25b79 patch 8.2.4195: resizing terminal may cause to behave like CTRL-Z
Problem:    Resizing terminal may cause to behave like CTRL-Z.
Solution:   Set "got_tstp" only when in_mch_suspend is set. (Dorian Bivolaru,
            closes #9602, closes #9586)
2022-01-23 16:41:14 +00:00
abe628e1bd patch 8.2.4194: MS-Windows: code for calculating font size is duplicated
Problem:    MS-Windows: code for calculating font size is duplicated.
Solution:   Move the code to a function. (Ken Takata, closes #9603)
2022-01-23 16:25:17 +00:00
f4e88f2152 patch 8.2.4193: cannot use an import in 'charconvert'
Problem:    Cannot use an import in 'charconvert'.
Solution:   Set the script context when evaluating 'charconvert'.  Also expand
            script-local functions in 'charconvert'.
2022-01-23 14:17:28 +00:00
7ef4a2fe37 patch 8.2.4192: cannot use an import in 'printexpr'
Problem:    Cannot use an import in 'printexpr'.
Solution:   Set the script context when evaluating 'printexpr'.
2022-01-23 13:44:35 +00:00
e15ebeffb3 patch 8.2.4191: json5 files are not recognized
Problem:    json5 files are not recognized.
Solution:   Add a pattern for json5 files. (closes #9601)
2022-01-23 13:05:39 +00:00
206919191f patch 8.2.4190: all conceal tests are skipped without the screendumps feature
Problem:    All conceal tests are skipped without the screendumps feature.
Solution:   Only skip the tests that use screendumps. (closes #9599)
2022-01-23 12:42:55 +00:00
d1c58999c8 patch 8.2.4189: MS-Windows: code for "old look" is obsolete
Problem:    MS-Windows: code for "old look" is obsolete.
Solution:   Delete obsolete code.  Use "MS Shell Dlg" font. (Ken Takata,
            closes #9596)
2022-01-23 12:31:57 +00:00
6f4754b9f7 Update runtime files 2022-01-23 12:07:04 +00:00
bcfa11b7df patch 8.2.4188: not all gitconfig files are recognized
Problem:    Not all gitconfig files are recognized.
Solution:   Add a few more patterns. (Tim Pope, closes #9597)
2022-01-23 11:28:16 +00:00
ff5cbe8133 patch 8.2.4187: gnuplot file not recognized
Problem:    Gnuplot file not recognized.
Solution:   Recognize ".gnuplot". (closes #9588)
2022-01-23 11:19:37 +00:00
36c2add7f8 patch 8.2.4186: cannot use an import in 'patchexpr'
Problem:    Cannot use an import in 'patchexpr'.
Solution:   Set the script context when evaluating 'patchexpr'.  Do not
            require 'patchexpr' to return a bool, it was ignored anyway.
2022-01-22 20:55:30 +00:00
28e60cc088 patch 8.2.4185: cannot use an import in 'indentexpr'
Problem:    Cannot use an import in 'indentexpr'.
Solution:   Set the script context when evaluating 'indentexpr'
2022-01-22 20:32:00 +00:00
47bcc5f4c8 patch 8.2.4184: cannot use an import in 'includeexpr'
Problem:    Cannot use an import in 'includeexpr'.
Solution:   Set the script context when evaluating 'includeexpr'
2022-01-22 20:19:22 +00:00
3ba685eeef patch 8.2.4183: cannot use an import in 'formatexpr'
Problem:    Cannot use an import in 'formatexpr'.
Solution:   Set the script context when evaluating 'formatexpr'.
2022-01-22 19:17:31 +00:00
39b8944539 patch 8.2.4182: memory leak when evaluating 'diffexpr'
Problem:    Memory leak when evaluating 'diffexpr'.
Solution:   Use free_tv() instead of clear_tv().
2022-01-22 18:21:36 +00:00
7b29f6a394 patch 8.2.4181: Vim9: cannot use an import in 'diffexpr'
Problem:    Vim9: cannot use an import in 'diffexpr'.
Solution:   Set the script context when evaluating 'diffexpr'.  Do not require
            'diffexpr' to return a bool, it was ignored anyway.
2022-01-22 17:58:13 +00:00
5600a709f4 patch 8.2.4180: 'balloonexpr' is evaluated in the current script context
Problem:    'balloonexpr' is evaluated in the current script context.
Solution:   Use the script context where the option was set.
2022-01-22 15:09:36 +00:00
9530b580a7 patch 8.2.4179: 'foldtext' is evaluated in the current script context
Problem:    'foldtext' is evaluated in the current script context.
Solution:   Use the script context where the option was set.
2022-01-22 13:39:08 +00:00
0bfa84916d patch 8.2.4178: Vim9: invalid error for return type of lambda when debugging
Problem:    Vim9: invalid error for return type of lambda when debugging.
Solution:   Do not check the return type of a lambda. (closes #9589)
2022-01-22 12:27:04 +00:00
b697dc295d patch 8.2.4177: Vim9: autoload script not loaded after "vim9script noclear"
Problem:    Vim9: autoload script not loaded after "vim9script noclear".
Solution:   Check IMP_FLAGS_AUTOLOAD properly.
2022-01-22 11:27:29 +00:00
3d8e25a6d2 patch 8.2.4176: Vim9: cannot use imported function with call()
Problem:    Vim9: cannot use imported function with call().
Solution:   Translate the function name. (closes #9590)
2022-01-22 11:00:02 +00:00
0bd663a380 patch 8.2.4175: MS-Windows: runtime check for multi-line balloon is obsolete
Problem:    MS-Windows: runtime check for multi-line balloon is obsolete.
Solution:   Remove the obsolete code. (Ken Takata, closes #9592)
2022-01-22 10:24:47 +00:00
19e69a6330 patch 8.2.4174: Vim9: can use an autoload name in normal script
Problem:    Vim9: can use an autoload name in normal script.
Solution:   Disallow using an autoload name.
2022-01-21 20:37:05 +00:00
e70dd11ef4 patch 8.2.4173: cannot use an import in 'foldexpr'
Problem:    Cannot use an import in 'foldexpr'.
Solution:   Set the script context to where 'foldexpr' was set. (closes #9584)
            Fix that the script context was not set for all buffers.
2022-01-21 16:31:11 +00:00
6517f14165 patch 8.2.4172: filetype detection for BASIC is not optimal
Problem:    Filetype detection for BASIC is not optimal.
Solution:   Improve BASIC filetype detection. (Doug Kearns)
2022-01-21 14:55:13 +00:00
f0e7e6365e patch 8.2.4171: cannot invoke option function using autoload import
Problem:    Cannot invoke option function using autoload import.
Solution:   Expand the import to an autoload function name. (closes #9578)
2022-01-21 13:29:56 +00:00
b7057bdd09 patch 8.2.4170: MS-Windows: still using old message API calls
Problem:    MS-Windows: still using old message API calls.
Solution:   Call the "W" functions directly. (Ken Takata, closes #9582)
2022-01-21 11:37:07 +00:00
45f9cfbdc7 patch 8.2.4169: MS-Windows: unnessary casts and other minor things
Problem:    MS-Windows: unnessary casts and other minor things.
Solution:   Clean up the MS-Windows code. (Ken Takata, closes #9583)
2022-01-21 11:11:00 +00:00
e6a4200ff4 patch 8.2.4168: disallowing empty function name breaks existing plugins
Problem:    Disallowing empty function name breaks existing plugins.
Solution:   Allow empty function name in legacy script.
2022-01-21 10:32:58 +00:00
dd5893be34 patch 8.2.4167: Vim9: error message for old style import
Problem:    Vim9: error message for old style import.
Solution:   Use another error message.  Add a test.
2022-01-20 21:32:54 +00:00
e615db0604 patch 8.2.4166: undo synced when switching buffer in another window
Problem:    Undo synced when switching buffer in another window.
Solution:   Do not sync undo when not needed. (closes #9575)
2022-01-20 21:00:54 +00:00
05386ca1d4 patch 8.2.4165: the nv_g_cmd() function is too long
Problem:    The nv_g_cmd() function is too long.
Solution:   Move code to separate functions. (Yegappan Lakshmanan,
            closes #9576)
2022-01-20 20:18:27 +00:00
6f0ddbf00d patch 8.2.4164: error in legacy code for function shadowing variable
Problem:    Error in legacy code for function shadowing variable.
Solution:   Only give the error in Vim9 script.
2022-01-20 19:56:49 +00:00
2017d6f3b1 patch 8.2.4163: no error for omitting function name after autoload prefix
Problem:    No error for omitting function name after autoload prefix.
Solution:   Check for missing function name. (issue #9577)
2022-01-20 19:38:46 +00:00
9c7cae66bc patch 8.2.4162: Vim9: no error for redefining function with export
Problem:    Vim9: no error for redefining function with export.
Solution:   Check for existing function with/without prefix. (closes #9577)
2022-01-20 19:10:25 +00:00
21f0d6cbca patch 8.2.4161: Vim9: warning for missing white space after imported variable
Problem:    Vim9: warning for missing white space after imported variable.
Solution:   Do not skip white space. (closes #9567)
2022-01-20 17:35:49 +00:00
531 changed files with 70480 additions and 37989 deletions

6
.github/CODEOWNERS vendored
View File

@ -9,6 +9,7 @@
# So if a pull request only touches javascript files, only these owners
# will be requested to review.
runtime/autoload/freebasic.vim @dkearns
runtime/autoload/getscript.vim @cecamp
runtime/autoload/netrw.vim @cecamp
runtime/autoload/netrwFileHandlers.vim @cecamp
@ -111,6 +112,7 @@ runtime/ftplugin/pbtxt.vim @lakshayg
runtime/ftplugin/pdf.vim @tpope
runtime/ftplugin/ps1.vim @heaths
runtime/ftplugin/ps1xml.vim @heaths
runtime/ftplugin/qb64.vim @dkearns
runtime/ftplugin/routeros.vim @zainin
runtime/ftplugin/ruby.vim @tpope @dkearns
runtime/ftplugin/sass.vim @tpope
@ -126,6 +128,7 @@ runtime/ftplugin/typescript.vim @dkearns
runtime/ftplugin/typescriptreact.vim @dkearns
runtime/ftplugin/xml.vim @chrisbra
runtime/ftplugin/zsh.vim @chrisbra
runtime/indent/basic.vim @dkearns
runtime/indent/bst.vim @tpope
runtime/indent/cdl.vim @dkearns
runtime/indent/clojure.vim @axvr
@ -140,6 +143,7 @@ runtime/indent/elm.vim @andys8
runtime/indent/eruby.vim @tpope @dkearns
runtime/indent/eterm.vim @dkearns
runtime/indent/framescript.vim @dkearns
runtime/indent/freebasic.vim @dkearns
runtime/indent/gitconfig.vim @tpope
runtime/indent/haml.vim @tpope
runtime/indent/idlang.vim @dkearns
@ -154,6 +158,7 @@ runtime/indent/occam.vim @dkearns
runtime/indent/postscr.vim @dkearns
runtime/indent/prolog.vim @dkearns
runtime/indent/ps1.vim @heaths
runtime/indent/qb64.vim @dkearns
runtime/indent/readline.vim @dkearns
runtime/indent/ruby.vim @AndrewRadev @dkearns
runtime/indent/sass.vim @tpope
@ -239,6 +244,7 @@ runtime/syntax/prolog.vim @XVilka
runtime/syntax/ps1.vim @heaths
runtime/syntax/ps1xml.vim @heaths
runtime/syntax/psl.vim @danielkho
runtime/syntax/qb64.vim @dkearns
runtime/syntax/rc.vim @chrisbra
runtime/syntax/routeros.vim @zainin
runtime/syntax/rpcgen.vim @cecamp

View File

@ -225,7 +225,7 @@ jobs:
do_test make ${SHADOWOPT} ${TEST}
# - name: Coveralls
# if: matrix.coverage && success() && github.event_name != 'pull_request'
# if: matrix.coverage && github.event_name != 'pull_request'
# env:
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
# COVERALLS_PARALLEL: true
@ -238,21 +238,21 @@ jobs:
# ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8
- name: Generate gcov files
if: matrix.coverage && success()
if: matrix.coverage
run: |
cd "${SRCDIR}"
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov
if: matrix.coverage && success()
if: matrix.coverage
uses: codecov/codecov-action@v2
with:
flags: ${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}
flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}
- name: ASan logs
if: contains(matrix.extra, 'asan') && !cancelled()
run: |
for f in $(grep -lR '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "${LOG_DIR}"); do
for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); do
asan_symbolize -l "$f"
false # in order to fail a job
done
@ -344,15 +344,14 @@ jobs:
make ${TEST}
windows:
runs-on: windows-latest
runs-on: windows-2019
env:
VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
# Interfaces
# Lua
LUA_VER: 54
LUA_VER_DOT: '5.4'
LUA_RELEASE: 5.4.0
LUA_RELEASE: 5.4.2
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
LUA_DIR: D:\Lua
@ -360,8 +359,8 @@ jobs:
PYTHON_VER: 27
PYTHON_VER_DOT: '2.7'
# Python 3
PYTHON3_VER: 38
PYTHON3_VER_DOT: '3.8'
PYTHON3_VER: 310
PYTHON3_VER_DOT: '3.10'
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
@ -392,6 +391,10 @@ jobs:
msystem: MINGW32
cygreg: registry32
pyreg: "-32"
- toolchain: mingw
arch: x64
features: HUGE
coverage: yes
exclude:
- toolchain: msvc
arch: x64
@ -406,6 +409,7 @@ jobs:
shell: bash
run: |
git config --global core.autocrlf input
echo "VCVARSALL=$(vswhere -products \* -latest -property installationPath)\\VC\\Auxiliary\\Build\\vcvarsall.bat" >> $GITHUB_ENV
python_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON_VER_DOT}/InstallPath/@")
python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@")
echo "PYTHON_DIR=$python_dir" >> $GITHUB_ENV
@ -463,8 +467,7 @@ jobs:
- name: Copy src directory to src2
shell: cmd
run: |
xcopy src src2\ /E > nul
run: xcopy src src2\ /E > nul
- name: Build (MSVC)
if: matrix.toolchain == 'msvc'
@ -472,17 +475,15 @@ jobs:
run: |
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
:: Filter out the progress bar from the build log
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
if "${{ matrix.features }}"=="HUGE" (
nmake -nologo -f Make_mvc2.mak ^
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes ^
DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR%
) else (
nmake -nologo -f Make_mvc2.mak ^
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes
)
@ -503,7 +504,7 @@ jobs:
DYNAMIC_LUA=yes LUA=${LUA_DIR} \
DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
STATIC_STDCPLUS=yes
STATIC_STDCPLUS=yes COVERAGE=${{ matrix.coverage }}
else
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
@ -511,6 +512,14 @@ jobs:
STATIC_STDCPLUS=yes
fi
- name: Check version
shell: cmd
run: |
PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
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
#- name: Prepare Artifact
# shell: cmd
# run: |
@ -524,27 +533,34 @@ jobs:
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
# path: ./artifacts
- name: Test
- name: Copy gcov data files to src2
if: matrix.coverage
shell: msys2 {0}
run: find src -name '*.gcno' | tar -c -T - | tar -x -C src2 --strip-components 1
- name: Test and show the result of testing gVim
shell: cmd
timeout-minutes: 20
run: |
PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
echo.
echo %COL_GREEN%vim version:%COL_RESET%
.\vim --version || exit 1
echo %COL_GREEN%Start testing vim in background.%COL_RESET%
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
echo %COL_GREEN%Start testing Vim in background.%COL_RESET%
start cmd /c "cd src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
echo %COL_GREEN%Test gvim:%COL_RESET%
cd testdir
echo %COL_GREEN%Test gVim:%COL_RESET%
cd src\testdir
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
cd ..
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET%
cd ..\src2\testdir
- name: Show the result of testing Vim
shell: cmd
timeout-minutes: 20
run: |
PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
call "%VCVARSALL%" ${{ matrix.vcarch }}
echo %COL_GREEN%Wait for Vim tests to finish.%COL_RESET%
cd src2\testdir
:: Wait about 10 minutes.
for /L %%i in (1,1,60) do (
if exist done.txt goto exitloop
@ -554,10 +570,35 @@ jobs:
set timeout=1
:exitloop
echo %COL_GREEN%Test results of vim:%COL_RESET%
echo %COL_GREEN%The result of testing Vim:%COL_RESET%
cd src2\testdir
if exist messages type messages
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1
if "%timeout%"=="1" (
echo %COL_RED%Timed out.%COL_RESET%
exit 1
)
- name: Generate gcov files
if: matrix.coverage
shell: msys2 {0}
run: |
cd src
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
cd ../src2
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov (gVim)
if: matrix.coverage
uses: codecov/codecov-action@v2
with:
directory: src
flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }}-gui
- name: Codecov (Vim)
if: matrix.coverage
uses: codecov/codecov-action@v2
with:
directory: src2
flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }}

View File

@ -113,6 +113,8 @@ SRC_ALL = \
src/nbdebug.h \
src/netbeans.c \
src/normal.c \
src/nv_cmdidxs.h \
src/nv_cmds.h \
src/ops.c \
src/option.c \
src/option.h \
@ -443,6 +445,8 @@ SRC_UNIX = \
src/configure \
src/configure.ac \
src/create_cmdidxs.vim \
src/create_nvcmdidxs.c \
src/create_nvcmdidxs.vim \
src/gui_at_fs.c \
src/gui_at_sb.c \
src/gui_at_sb.h \
@ -543,7 +547,6 @@ SRC_DOS = \
tools/rename.bat \
src/bigvim.bat \
src/bigvim64.bat \
src/msvcsetup.bat \
src/msvc2008.bat \
src/msvc2010.bat \
src/msvc2015.bat \
@ -660,10 +663,7 @@ SRC_HAIKU = \
# source files for the Mac (also in the extra archive)
SRC_MAC = \
src/INSTALLmac.txt \
src/dehqx.py \
src/os_mac_rsrc/*.icns \
src/os_mac.h \
src/os_mac.rsr.hqx \
src/os_mac_conv.c \
src/os_macosx.m \
src/proto/os_mac_conv.pro \
@ -701,7 +701,6 @@ SRC_EXTRA = \
$(SRC_QNX) \
$(SRC_VMS) \
README_os390.txt \
src/infplist.xml \
src/link.390 \
src/os_vms_fix.com \
src/toolbar.phi \

View File

@ -5,11 +5,9 @@ setlocal ENABLEDELAYEDEXPANSION
cd %APPVEYOR_BUILD_FOLDER%
cd src
:: Filter out the progress bar from the build log
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
echo "Building MSVC 64bit console Version"
nmake -f Make_mvc2.mak CPU=AMD64 ^
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE%
if not exist vim.exe (
@ -21,13 +19,13 @@ if not exist vim.exe (
:: GUI needs to be last, so that testing works
echo "Building MSVC 64bit GUI Version"
if "%FEATURE%" == "HUGE" (
nmake -f Make_mvc2.mak CPU=AMD64 ^
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^
PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^
PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35-x64 ^
FEATURES=%FEATURE%
) ELSE (
nmake -f Make_mvc2.mak CPU=AMD64 ^
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE%
)

View File

@ -347,6 +347,9 @@ Section "$(str_section_exe)" id_section_exe
File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
!if /FileExists "${VIMSRC}\vim${BIT}.dll"
File ${VIMSRC}\vim${BIT}.dll
!endif
!if /FileExists "${VIMRT}\libsodium.dll"
File ${VIMRT}\libsodium.dll
!endif
File /oname=install.exe ${VIMSRC}\installw32.exe
File /oname=uninstall.exe ${VIMSRC}\uninstallw32.exe

View File

@ -4,13 +4,13 @@ vim9script noclear
# Language: C
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Rewritten in Vim9 script by github user lacygoill
# Last Change: 2021 Dec 27
# Last Change: 2022 Jan 31
var prepended: string
var grepCache: dict<list<dict<any>>>
# This function is used for the 'omnifunc' option.
def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
export def Complete(findstart: bool, abase: string): any # {{{1
if findstart
# Locate the start of the item, including ".", "->" and "[...]".
var line: string = getline('.')
@ -202,7 +202,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|| !v['static']
|| bufnr('%') == bufnr(v['filename']))
res = extendnew(res, tags->map((_, v: dict<any>) => Tag2item(v)))
res = res->extend(tags->map((_, v: dict<any>) => Tag2item(v)))
endif
if len(res) == 0
@ -216,9 +216,9 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
for i: number in len(diclist)->range()
# New ctags has the "typeref" field. Patched version has "typename".
if diclist[i]->has_key('typename')
res = extendnew(res, diclist[i]['typename']->StructMembers(items[1 :], true))
res = res->extend(diclist[i]['typename']->StructMembers(items[1 :], true))
elseif diclist[i]->has_key('typeref')
res = extendnew(res, diclist[i]['typeref']->StructMembers(items[1 :], true))
res = res->extend(diclist[i]['typeref']->StructMembers(items[1 :], true))
endif
# For a variable use the command, which must be a search pattern that
@ -227,7 +227,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
var line: string = diclist[i]['cmd']
if line[: 1] == '/^'
var col: number = line->charidx(match(line, '\<' .. items[0] .. '\>'))
res = extendnew(res, line[2 : col - 1]->Nextitem(items[1 :], 0, true))
res = res->extend(line[2 : col - 1]->Nextitem(items[1 :], 0, true))
endif
endif
endfor
@ -256,11 +256,10 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
enddef
def GetAddition( # {{{1
line: string,
match: string,
memarg: list<dict<any>>,
bracket: bool
): string
line: string,
match: string,
memarg: list<dict<any>>,
bracket: bool): string
# Guess if the item is an array.
if bracket && match(line, match .. '\s*\[') > 0
return '['
@ -403,10 +402,9 @@ def Tagline2item(val: dict<any>, brackets: string): dict<string> # {{{1
enddef
def Tagcmd2extra( # {{{1
cmd: string,
name: string,
fname: string
): string
cmd: string,
name: string,
fname: string): string
# Turn a command from a tag line to something that is useful in the menu
var x: string
if cmd =~ '^/^'
@ -427,11 +425,10 @@ def Tagcmd2extra( # {{{1
enddef
def Nextitem( # {{{1
lead: string,
items: list<string>,
depth: number,
all: bool
): list<dict<string>>
lead: string,
items: list<string>,
depth: number,
all: bool): list<dict<string>>
# Find composing type in "lead" and match items[0] with it.
# Repeat this recursively for items[1], if it's there.
# When resolving typedefs "depth" is used to avoid infinite recursion.
@ -473,11 +470,11 @@ def Nextitem( # {{{1
# New ctags has the "typeref" field. Patched version has "typename".
if item->has_key('typeref')
res = extendnew(res, item['typeref']->StructMembers(items, all))
res = res->extend(item['typeref']->StructMembers(items, all))
continue
endif
if item->has_key('typename')
res = extendnew(res, item['typename']->StructMembers(items, all))
res = res->extend(item['typename']->StructMembers(items, all))
continue
endif
@ -511,11 +508,11 @@ def Nextitem( # {{{1
endif
endfor
if name != ''
res = extendnew(res, StructMembers(cmdtokens[0] .. ':' .. name, items, all))
res = res->extend(StructMembers(cmdtokens[0] .. ':' .. name, items, all))
endif
elseif depth < 10
# Could be "typedef other_T some_T".
res = extendnew(res, cmdtokens[0]->Nextitem(items, depth + 1, all))
res = res->extend(cmdtokens[0]->Nextitem(items, depth + 1, all))
endif
endif
endif
@ -529,10 +526,9 @@ def Nextitem( # {{{1
enddef
def StructMembers( # {{{1
atypename: string,
items: list<string>,
all: bool
): list<dict<string>>
atypename: string,
items: list<string>,
all: bool): list<dict<string>>
# Search for members of structure "typename" in tags files.
# Return a list with resulting matches.
@ -641,10 +637,9 @@ def StructMembers( # {{{1
enddef
def SearchMembers( # {{{1
matches: list<dict<any>>,
items: list<string>,
all: bool
): list<dict<string>>
matches: list<dict<any>>,
items: list<string>,
all: bool): list<dict<string>>
# For matching members, find matches for following items.
# When "all" is true find all, otherwise just return 1 if there is any member.
@ -674,7 +669,7 @@ def SearchMembers( # {{{1
endif
if typename != ''
res = extendnew(res, StructMembers(typename, items, all))
res = res->extend(StructMembers(typename, items, all))
else
# Use the search command (the declaration itself).
var sb: number = line->match('\t\zs/^')
@ -683,7 +678,7 @@ def SearchMembers( # {{{1
var e: number = line
->charidx(match(line, '\<' .. matches[i]['match'] .. '\>', sb))
if e > 0
res = extendnew(res, line[s : e - 1]->Nextitem(items, 0, all))
res = res->extend(line[s : e - 1]->Nextitem(items, 0, all))
endif
endif
endif

File diff suppressed because it is too large Load Diff

426
runtime/autoload/dist/script.vim vendored Normal file
View File

@ -0,0 +1,426 @@
vim9script
# Vim function for detecting a filetype from the file contents.
# Invoked from "scripts.vim" in 'runtimepath'
#
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last Change: 2022 Feb 13
export def DetectFiletype()
var line1 = getline(1)
if line1[0] == '#' && line1[1] == '!'
# File that starts with "#!".
DetectFromHashBang(line1)
else
# File does not start with "#!".
DetectFromText(line1)
endif
enddef
# Called for a script that has "#!" in the first line.
def DetectFromHashBang(firstline: string)
var line1 = firstline
# Check for a line like "#!/usr/bin/env {options} bash". Turn it into
# "#!/usr/bin/bash" to make matching easier.
# Recognize only a few {options} that are commonly used.
if line1 =~ '^#!\s*\S*\<env\s'
line1 = substitute(line1, '\S\+=\S\+', '', 'g')
line1 = substitute(line1, '\(-[iS]\|--ignore-environment\|--split-string\)', '', '')
line1 = substitute(line1, '\<env\s\+', '', '')
endif
# Get the program name.
# Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
# If the word env is used, use the first word after the space:
# "#!/usr/bin/env perl [path/args]"
# If there is no path use the first word: "#!perl [path/args]".
# Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
var name: string
if line1 =~ '^#!\s*\a:[/\\]'
name = substitute(line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
elseif line1 =~ '^#!.*\<env\>'
name = substitute(line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
elseif line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
name = substitute(line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
else
name = substitute(line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
endif
# tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
# third line. Suggested by Steven Atkinson.
if getline(3) =~ '^exec wish'
name = 'wish'
endif
# Bourne-like shell scripts: bash bash2 ksh ksh93 sh
if name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
call dist#ft#SetFileTypeSH(line1)
# csh scripts
elseif name =~ '^csh\>'
if exists("g:filetype_csh")
call dist#ft#SetFileTypeShell(g:filetype_csh)
else
call dist#ft#SetFileTypeShell("csh")
endif
# tcsh scripts
elseif name =~ '^tcsh\>'
call dist#ft#SetFileTypeShell("tcsh")
# Z shell scripts
elseif name =~ '^zsh\>'
set ft=zsh
# TCL scripts
elseif name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
set ft=tcl
# Expect scripts
elseif name =~ '^expect\>'
set ft=expect
# Gnuplot scripts
elseif name =~ '^gnuplot\>'
set ft=gnuplot
# Makefiles
elseif name =~ 'make\>'
set ft=make
# Pike
elseif name =~ '^pike\%(\>\|[0-9]\)'
set ft=pike
# Lua
elseif name =~ 'lua'
set ft=lua
# Perl
elseif name =~ 'perl'
set ft=perl
# PHP
elseif name =~ 'php'
set ft=php
# Python
elseif name =~ 'python'
set ft=python
# Groovy
elseif name =~ '^groovy\>'
set ft=groovy
# Raku
elseif name =~ 'raku'
set ft=raku
# Ruby
elseif name =~ 'ruby'
set ft=ruby
# JavaScript
elseif name =~ 'node\(js\)\=\>\|js\>' || name =~ 'rhino\>'
set ft=javascript
# BC calculator
elseif name =~ '^bc\>'
set ft=bc
# sed
elseif name =~ 'sed\>'
set ft=sed
# OCaml-scripts
elseif name =~ 'ocaml'
set ft=ocaml
# Awk scripts; also finds "gawk"
elseif name =~ 'awk\>'
set ft=awk
# Website MetaLanguage
elseif name =~ 'wml'
set ft=wml
# Scheme scripts
elseif name =~ 'scheme'
set ft=scheme
# CFEngine scripts
elseif name =~ 'cfengine'
set ft=cfengine
# Erlang scripts
elseif name =~ 'escript'
set ft=erlang
# Haskell
elseif name =~ 'haskell'
set ft=haskell
# Scala
elseif name =~ 'scala\>'
set ft=scala
# Clojure
elseif name =~ 'clojure'
set ft=clojure
# Free Pascal
elseif name =~ 'instantfpc\>'
set ft=pascal
# Fennel
elseif name =~ 'fennel\>'
set ft=fennel
# MikroTik RouterOS script
elseif name =~ 'rsc\>'
set ft=routeros
# Fish shell
elseif name =~ 'fish\>'
set ft=fish
# Gforth
elseif name =~ 'gforth\>'
set ft=forth
endif
enddef
# Called for a script that does not have "#!" in the first line.
def DetectFromText(line1: string)
var line2 = getline(2)
var line3 = getline(3)
var line4 = getline(4)
var line5 = getline(5)
# Bourne-like shell scripts: sh ksh bash bash2
if line1 =~ '^:$'
call dist#ft#SetFileTypeSH(line1)
# Z shell scripts
elseif line1 =~ '^#compdef\>'
|| line1 =~ '^#autoload\>'
|| "\n" .. line1 .. "\n" .. line2 .. "\n" .. line3 ..
"\n" .. line4 .. "\n" .. line5
=~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
set ft=zsh
# ELM Mail files
elseif line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
set ft=mail
# Mason
elseif line1 =~ '^<[%&].*>'
set ft=mason
# Vim scripts (must have '" vim' as the first line to trigger this)
elseif line1 =~ '^" *[vV]im$'
set ft=vim
# libcxx and libstdc++ standard library headers like "iostream" do not have
# an extension, recognize the Emacs file mode.
elseif line1 =~? '-\*-.*C++.*-\*-'
set ft=cpp
# MOO
elseif line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
set ft=moo
# Diff file:
# - "diff" in first line (context diff)
# - "Only in " in first line
# - "--- " in first line and "+++ " in second line (unified diff).
# - "*** " in first line and "--- " in second line (context diff).
# - "# It was generated by makepatch " in the second line (makepatch diff).
# - "Index: <filename>" in the first line (CVS file)
# - "=== ", line of "=", "---", "+++ " (SVK diff)
# - "=== ", "--- ", "+++ " (bzr diff, common case)
# - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
# - "# HG changeset patch" in first line (Mercurial export format)
elseif line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
|| (line1 =~ '^--- ' && line2 =~ '^+++ ')
|| (line1 =~ '^\* looking for ' && line2 =~ '^\* comparing to ')
|| (line1 =~ '^\*\*\* ' && line2 =~ '^--- ')
|| (line1 =~ '^=== ' && ((line2 =~ '^=\{66\}' && line3 =~ '^--- ' && line4 =~ '^+++') || (line2 =~ '^--- ' && line3 =~ '^+++ ')))
|| (line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
set ft=diff
# PostScript Files (must have %!PS as the first line, like a2ps output)
elseif line1 =~ '^%![ \t]*PS'
set ft=postscr
# M4 scripts: Guess there is a line that starts with "dnl".
elseif line1 =~ '^\s*dnl\>'
|| line2 =~ '^\s*dnl\>'
|| line3 =~ '^\s*dnl\>'
|| line4 =~ '^\s*dnl\>'
|| line5 =~ '^\s*dnl\>'
set ft=m4
# AmigaDos scripts
elseif $TERM == "amiga" && (line1 =~ "^;" || line1 =~? '^\.bra')
set ft=amiga
# SiCAD scripts (must have procn or procd as the first line to trigger this)
elseif line1 =~? '^ *proc[nd] *$'
set ft=sicad
# Purify log files start with "**** Purify"
elseif line1 =~ '^\*\*\*\* Purify'
set ft=purifylog
# XML
elseif line1 =~ '<?\s*xml.*?>'
set ft=xml
# XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
elseif line1 =~ '\<DTD\s\+XHTML\s'
set ft=xhtml
# HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
# Avoid "doctype html", used by slim.
elseif line1 =~? '<!DOCTYPE\s\+html\>'
set ft=html
# PDF
elseif line1 =~ '^%PDF-'
set ft=pdf
# XXD output
elseif line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
set ft=xxd
# RCS/CVS log output
elseif line1 =~ '^RCS file:' || line2 =~ '^RCS file:'
set ft=rcslog
# CVS commit
elseif line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
set ft=cvs
# Prescribe
elseif line1 =~ '^!R!'
set ft=prescribe
# Send-pr
elseif line1 =~ '^SEND-PR:'
set ft=sendpr
# SNNS files
elseif line1 =~ '^SNNS network definition file'
set ft=snnsnet
elseif line1 =~ '^SNNS pattern definition file'
set ft=snnspat
elseif line1 =~ '^SNNS result file'
set ft=snnsres
# Virata
elseif line1 =~ '^%.\{-}[Vv]irata'
|| line2 =~ '^%.\{-}[Vv]irata'
|| line3 =~ '^%.\{-}[Vv]irata'
|| line4 =~ '^%.\{-}[Vv]irata'
|| line5 =~ '^%.\{-}[Vv]irata'
set ft=virata
# Strace
elseif line1 =~ '[0-9:.]* *execve(' || line1 =~ '^__libc_start_main'
set ft=strace
# VSE JCL
elseif line1 =~ '^\* $$ JOB\>' || line1 =~ '^// *JOB\>'
set ft=vsejcl
# TAK and SINDA
elseif line4 =~ 'K & K Associates' || line2 =~ 'TAK 2000'
set ft=takout
elseif line3 =~ 'S Y S T E M S I M P R O V E D '
set ft=sindaout
elseif getline(6) =~ 'Run Date: '
set ft=takcmp
elseif getline(9) =~ 'Node File 1'
set ft=sindacmp
# DNS zone files
elseif line1 .. line2 .. line3 .. line4 =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
set ft=bindzone
# BAAN
elseif line1 =~ '|\*\{1,80}' && line2 =~ 'VRC '
|| line2 =~ '|\*\{1,80}' && line3 =~ 'VRC '
set ft=baan
# Valgrind
elseif line1 =~ '^==\d\+== valgrind' || line3 =~ '^==\d\+== Using valgrind'
set ft=valgrind
# Go docs
elseif line1 =~ '^PACKAGE DOCUMENTATION$'
set ft=godoc
# Renderman Interface Bytestream
elseif line1 =~ '^##RenderMan'
set ft=rib
# Scheme scripts
elseif line1 =~ 'exec\s\+\S*scheme' || line2 =~ 'exec\s\+\S*scheme'
set ft=scheme
# Git output
elseif line1 =~ '^\(commit\|tree\|object\) \x\{40,\}\>\|^tag \S\+$'
set ft=git
# Gprof (gnu profiler)
elseif line1 == 'Flat profile:'
&& line2 == ''
&& line3 =~ '^Each sample counts as .* seconds.$'
set ft=gprof
# Erlang terms
# (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
elseif line1 =~? '-\*-.*erlang.*-\*-'
set ft=erlang
# YAML
elseif line1 =~ '^%YAML'
set ft=yaml
# MikroTik RouterOS script
elseif line1 =~ '^#.*by RouterOS.*$'
set ft=routeros
# Sed scripts
# #ncomment is allowed but most likely a false positive so require a space
# before any trailing comment text
elseif line1 =~ '^#n\%($\|\s\)'
set ft=sed
else
var lnum = 1
while getline(lnum) =~ "^? " && lnum < line("$")
lnum += 1
endwhile
if getline(lnum) =~ '^Index:\s\+\f\+$'
# CVS diff
set ft=diff
# locale input files: Formal Definitions of Cultural Conventions
# filename must be like en_US, fr_FR@euro or en_US.UTF-8
elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
lnum = 1
while lnum < 100 && lnum < line("$")
if getline(lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
setf fdcc
break
endif
lnum += 1
endwhile
endif
endif
enddef

View File

@ -0,0 +1,41 @@
" Vim filetype plugin file
" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Mar 16
" Dialects can be one of fb, qb, fblite, or deprecated
" Precedence is forcelang > #lang > lang
function! freebasic#GetDialect() abort
if exists("g:freebasic_forcelang")
return g:freebasic_forcelang
endif
if exists("g:freebasic_lang")
let dialect = g:freebasic_lang
else
let dialect = "fb"
endif
" override with #lang directive or metacommand
let skip = "has('syntax_items') && synIDattr(synID(line('.'), col('.'), 1), 'name') =~ 'Comment$'"
let pat = '\c^\s*\%(#\s*lang\s\+\|''\s*$lang\s*:\s*\)"\([^"]*\)"'
let save_cursor = getcurpos()
call cursor(1, 1)
let lnum = search(pat, 'n', '', '', skip)
call setpos('.', save_cursor)
if lnum
let word = matchlist(getline(lnum), pat)[1]
if word =~? '\%(fb\|deprecated\|fblite\|qb\)'
let dialect = word
else
echomsg "freebasic#GetDialect: Invalid lang, found '" .. word .. "' at line " .. lnum .. " " .. getline(lnum)
endif
endif
return dialect
endfunction
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@ -153,6 +153,7 @@ DOCS = \
version6.txt \
version7.txt \
version8.txt \
version9.txt \
vi_diff.txt \
vim9.txt \
visual.txt \
@ -298,6 +299,7 @@ HTMLS = \
version6.html \
version7.html \
version8.html \
version9.html \
vi_diff.html \
vimindex.html \
vim9.html \

View File

@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.2. Last change: 2022 Jan 15
*autocmd.txt* For Vim version 8.2. Last change: 2022 Feb 09
VIM REFERENCE MANUAL by Bram Moolenaar
@ -326,6 +326,7 @@ Name triggered by ~
|FileChangedRO| before making the first change to a read-only file
|DiffUpdated| after diffs have been updated
|DirChangedPre| before the working directory will change
|DirChanged| after the working directory has changed
|ShellCmdPost| after executing a shell command
@ -738,6 +739,11 @@ DiffUpdated After diffs have been updated. Depending on
what kind of diff is being used (internal or
external) this can be triggered on every
change or when doing |:diffupdate|.
*DirChangedPre*
DirChangedPre The working directory is going to be changed,
as with |DirChanged|. The pattern is like
with |DirChanged|. The new directory can be
found in v:event.directory.
*DirChanged*
DirChanged The working directory has changed in response
to the |:cd| or |:tcd| or |:lcd| commands, or
@ -1211,7 +1217,7 @@ TextYankPost After text has been yanked or deleted in the
Not triggered when |quote_| is used nor when
called recursively.
It is not allowed to change the buffer text,
see |textlock|.
see |textlock|. *E1064*
{only when compiled with the +eval feature}
*User*
@ -1633,7 +1639,7 @@ Examples for reading and writing compressed files: >
: autocmd BufReadPre,FileReadPre *.gz set bin
: autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
: autocmd BufReadPost,FileReadPost *.gz set nobin
: autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " . expand("%:r")
: autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " .. expand("%:r")
: autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r
: autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r
@ -1732,7 +1738,7 @@ To insert the current date and time in a *.html file when writing it: >
: else
: let l = line("$")
: endif
: exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified: " .
: exe "1," .. l .. "g/Last modified: /s/Last modified: .*/Last modified: " ..
: \ strftime("%Y %b %d")
:endfun

View File

@ -1,4 +1,4 @@
*builtin.txt* For Vim version 8.2. Last change: 2022 Jan 16
*builtin.txt* For Vim version 8.2. Last change: 2022 Feb 23
VIM REFERENCE MANUAL by Bram Moolenaar
@ -539,8 +539,8 @@ sin({expr}) Float sine of {expr}
sinh({expr}) Float hyperbolic sine of {expr}
slice({expr}, {start} [, {end}]) String, List or Blob
slice of a String, List or Blob
sort({list} [, {func} [, {dict}]])
List sort {list}, using {func} to compare
sort({list} [, {how} [, {dict}]])
List sort {list}, compare with {how}
sound_clear() none stop playing all sounds
sound_playevent({name} [, {callback}])
Number play an event sound
@ -641,10 +641,7 @@ test_feedinput({string}) none add key sequence to input buffer
test_garbagecollect_now() none free memory right now for testing
test_garbagecollect_soon() none free memory soon for testing
test_getvalue({string}) any get value of an internal variable
test_gui_drop_files({list}, {row}, {col}, {mods})
none drop a list of files in a window
test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
none add a mouse event to the input buffer
test_gui_event({event}, {args}) bool generate a GUI event for testing
test_ignore_error({expr}) none ignore a specific error
test_null_blob() Blob null value for testing
test_null_channel() Channel null value for testing
@ -657,8 +654,6 @@ test_null_string() String null value for testing
test_option_not_set({name}) none reset flag indicating option was set
test_override({expr}, {val}) none test with Vim internal overrides
test_refcount({expr}) Number get the reference count of {expr}
test_scrollbar({which}, {value}, {dragging})
none scroll in the GUI for testing
test_setmouse({row}, {col}) none set the mouse position for testing
test_settime({expr}) none set current time for testing
test_srand_seed([seed]) none set seed for testing srand()
@ -859,7 +854,7 @@ argv([{nr} [, {winid}]])
:let i = 0
:while i < argc()
: let f = escape(fnameescape(argv(i)), '.')
: exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
: exe 'amenu Arg.' .. f .. ' :e ' .. f .. '<CR>'
: let i = i + 1
:endwhile
< Without the {nr} argument, or when {nr} is -1, a |List| with
@ -1139,7 +1134,7 @@ bufwinid({buf}) *bufwinid()*
see |bufname()| above. If buffer {buf} doesn't exist or
there is no such window, -1 is returned. Example: >
echo "A window containing buffer 1 is " . (bufwinid(1))
echo "A window containing buffer 1 is " .. (bufwinid(1))
<
Only deals with the current tab page.
@ -1152,7 +1147,7 @@ bufwinnr({buf}) *bufwinnr()*
If buffer {buf} doesn't exist or there is no such window, -1
is returned. Example: >
echo "A window containing buffer 1 is " . (bufwinnr(1))
echo "A window containing buffer 1 is " .. (bufwinnr(1))
< The number can be used with |CTRL-W_w| and ":wincmd w"
|:wincmd|.
@ -1202,7 +1197,7 @@ byteidx({expr}, {nr}) *byteidx()*
byteidxcomp({expr}, {nr}) *byteidxcomp()*
Like byteidx(), except that a composing character is counted
as a separate character. Example: >
let s = 'e' . nr2char(0x301)
let s = 'e' .. nr2char(0x301)
echo byteidx(s, 1)
echo byteidxcomp(s, 1)
echo byteidxcomp(s, 2)
@ -1397,7 +1392,7 @@ col({expr}) The result is a Number, which is the byte index of the column
col(".") column of cursor
col("$") length of cursor line plus one
col("'t") column of mark t
col("'" . markname) column of mark markname
col("'" .. markname) column of mark markname
< The first column is 1. 0 is returned for an error.
For an uppercase mark the column may actually be in another
buffer.
@ -1406,7 +1401,7 @@ col({expr}) The result is a Number, which is the byte index of the column
line. This can be used to obtain the column in Insert mode: >
:imap <F2> <C-O>:let save_ve = &ve<CR>
\<C-O>:set ve=all<CR>
\<C-O>:echo col(".") . "\n" <Bar>
\<C-O>:echo col(".") .. "\n" <Bar>
\let &ve = save_ve<CR>
< Can also be used as a |method|: >
@ -1890,12 +1885,13 @@ digraph_getlist([{listall}]) *digraph_getlist()*
display an error message.
digraph_set({chars}, {digraph}) *digraph_set()* *E1205*
digraph_set({chars}, {digraph}) *digraph_set()*
Add digraph {chars} to the list. {chars} must be a string
with two characters. {digraph} is a string with one UTF-8
encoded character. Be careful, composing characters are NOT
ignored. This function is similar to |:digraphs| command, but
useful to add digraphs start with a white space.
encoded character. *E1215*
Be careful, composing characters are NOT ignored. This
function is similar to |:digraphs| command, but useful to add
digraphs start with a white space.
The function result is v:true if |digraph| is registered. If
this fails an error message is given and v:false is returned.
@ -1918,7 +1914,7 @@ digraph_setlist({digraphlist}) *digraph_setlist()*
Similar to |digraph_set()| but this function can add multiple
digraphs at once. {digraphlist} is a list composed of lists,
where each list contains two strings with {chars} and
{digraph} as in |digraph_set()|.
{digraph} as in |digraph_set()|. *E1216*
Example: >
call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
<
@ -2082,6 +2078,25 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
For checking if a file exists use |filereadable()|.
The {expr} argument is a string, which contains one of these:
varname internal variable (see
dict.key |internal-variables|). Also works
list[i] for |curly-braces-names|, |Dictionary|
import.Func entries, |List| items, imported
items, etc.
Does not work for local variables in a
compiled `:def` function.
Also works for a function in |Vim9|
script, since it can be used as a
function reference.
Beware that evaluating an index may
cause an error message for an invalid
expression. E.g.: >
:let l = [1, 2, 3]
:echo exists("l[5]")
< 0 >
:echo exists("l[xx]")
< E121: Undefined variable: xx
0
&option-name Vim option (only checks if it exists,
not if it really works)
+option-name Vim option that works.
@ -2096,21 +2111,6 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
?funcname built-in function that could be
implemented; to be used to check if
"funcname" is valid
varname internal variable (see
|internal-variables|). Also works
for |curly-braces-names|, |Dictionary|
entries, |List| items, etc.
Does not work for local variables in a
compiled `:def` function.
Beware that evaluating an index may
cause an error message for an invalid
expression. E.g.: >
:let l = [1, 2, 3]
:echo exists("l[5]")
< 0 >
:echo exists("l[xx]")
< E121: Undefined variable: xx
0
:cmdname Ex command: built-in command, user
command or command modifier |:command|.
Returns:
@ -2140,7 +2140,8 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
exists("&shortname")
exists("$HOSTNAME")
exists("*strftime")
exists("*s:MyFunc")
exists("*s:MyFunc") " only for legacy script
exists("*MyFunc")
exists("bufcount")
exists(":Make")
exists("#CursorHold")
@ -2246,12 +2247,12 @@ expand({string} [, {nosuf} [, {list}]]) *expand()*
:e extension only
Example: >
:let &tags = expand("%:p:h") . "/tags"
:let &tags = expand("%:p:h") .. "/tags"
< Note that when expanding a string that starts with '%', '#' or
'<', any following text is ignored. This does NOT work: >
:let doesntwork = expand("%:h.bak")
< Use this: >
:let doeswork = expand("%:h") . ".bak"
:let doeswork = expand("%:h") .. ".bak"
< Also note that expanding "<cfile>" and others only returns the
referenced file name without further expansion. If "<cfile>"
is "~/.cshrc", you need to do another expand() to have the
@ -2632,7 +2633,7 @@ fnameescape({string}) *fnameescape()*
and |:write|). And a "-" by itself (special after |:cd|).
Example: >
:let fname = '+some str%nge|name'
:exe "edit " . fnameescape(fname)
:exe "edit " .. fnameescape(fname)
< results in executing: >
edit \+some\ str\%nge\|name
<
@ -2813,7 +2814,7 @@ function({name} [, {arglist}] [, {dict}])
< The Dictionary is only useful when calling a "dict" function.
In that case the {dict} is passed in as "self". Example: >
function Callback() dict
echo "called for " . self.name
echo "called for " .. self.name
endfunction
...
let context = {"name": "example"}
@ -2882,7 +2883,7 @@ get({dict}, {key} [, {default}])
Preferably used as a |method|: >
mydict->get(key)
get({func}, {what})
Get an item with from Funcref {func}. Possible values for
Get item {what} from Funcref {func}. Possible values for
{what} are:
"name" The function name
"func" The function
@ -3012,7 +3013,7 @@ getbufvar({buf}, {varname} [, {def}]) *getbufvar()*
string is returned, there is no error message.
Examples: >
:let bufmodified = getbufvar(1, "&mod")
:echo "todo myvar = " . getbufvar("todo", "myvar")
:echo "todo myvar = " .. getbufvar("todo", "myvar")
< Can also be used as a |method|: >
GetBufnr()->getbufvar(varname)
@ -3073,9 +3074,9 @@ getchar([expr]) *getchar()*
This example positions the mouse as it would normally happen: >
let c = getchar()
if c == "\<LeftMouse>" && v:mouse_win > 0
exe v:mouse_win . "wincmd w"
exe v:mouse_win .. "wincmd w"
exe v:mouse_lnum
exe "normal " . v:mouse_col . "|"
exe "normal " .. v:mouse_col .. "|"
endif
<
When using bracketed paste only the first character is
@ -3755,7 +3756,7 @@ getreg([{regname} [, 1 [, {list}]]]) *getreg()*
:let cliptext = getreg('*')
< When register {regname} was not set the result is an empty
string.
The {regname} argument must be a string.
The {regname} argument must be a string. *E1162*
getreg('=') returns the last evaluated value of the expression
register. (For use in maps.)
@ -3872,7 +3873,7 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
empty string is returned, there is no error message.
Examples: >
:let list_is_on = gettabwinvar(1, 2, '&list')
:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
:echo "myvar = " .. gettabwinvar(3, 1, 'myvar')
<
To obtain all window-local variables use: >
gettabwinvar({tabnr}, {winnr}, '&')
@ -4005,7 +4006,7 @@ getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
Like |gettabwinvar()| for the current tabpage.
Examples: >
:let list_is_on = getwinvar(2, '&list')
:echo "myvar = " . getwinvar(1, 'myvar')
:echo "myvar = " .. getwinvar(1, 'myvar')
< Can also be used as a |method|: >
GetWinnr()->getwinvar(varname)
@ -4260,7 +4261,7 @@ histdel({history} [, {item}]) *histdel()*
The following three are equivalent: >
:call histdel("search", histnr("search"))
:call histdel("search", -1)
:call histdel("search", '^'.histget("search", -1).'$')
:call histdel("search", '^' .. histget("search", -1) .. '$')
<
To delete the last search pattern and use the last-but-one for
the "n" command and 'hlsearch': >
@ -4279,7 +4280,7 @@ histget({history} [, {index}]) *histget()*
Examples:
Redo the second last search from history. >
:execute '/' . histget("search", -2)
:execute '/' .. histget("search", -2)
< Define an Ex command ":H {num}" that supports re-execution of
the {num}th entry from the output of |:history|. >
@ -4525,7 +4526,7 @@ input({prompt} [, {text} [, {completion}]]) *input()*
|:execute| or |:normal|.
Example with a mapping: >
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
:nmap \x :call GetFoo()<CR>:exe "/" .. Foo<CR>
:function GetFoo()
: call inputsave()
: let g:Foo = input("enter search pattern: ")
@ -4673,9 +4674,11 @@ islocked({expr}) *islocked()* *E786*
:echo islocked('alist') " 1
:echo islocked('alist[1]') " 0
< When {expr} is a variable that does not exist you get an error
message. Use |exists()| to check for existence.
In Vim9 script it does not work for local variables.
< When {expr} is a variable that does not exist -1 is returned.
If {expr} uses a range, list or dict index that is out of
range or does not exist you get an error message. Use
|exists()| to check for existence.
In Vim9 script it does not work for local function variables.
Can also be used as a |method|: >
GetName()->islocked()
@ -4697,7 +4700,7 @@ items({dict}) *items()*
order. Also see |keys()| and |values()|.
Example: >
for [key, value] in items(mydict)
echo key . ': ' . value
echo key .. ': ' .. value
endfor
< Can also be used as a |method|: >
@ -4712,7 +4715,7 @@ join({list} [, {sep}]) *join()*
{sep} is omitted a single space is used.
Note that {sep} is not added at the end. You might want to
add it there too: >
let lines = join(mylist, "\n") . "\n"
let lines = join(mylist, "\n") .. "\n"
< String items are used as-is. |Lists| and |Dictionaries| are
converted into a string like with |string()|.
The opposite function is |split()|.
@ -4787,7 +4790,7 @@ json_encode({expr}) *json_encode()*
Encode {expr} as JSON and return this as a string.
The encoding is specified in:
https://tools.ietf.org/html/rfc7159.html
Vim values are converted as follows:
Vim values are converted as follows: *E1161*
|Number| decimal number
|Float| floating point number
Float nan "NaN"
@ -4901,7 +4904,7 @@ libcallnr({libname}, {funcname}, {argument})
line({expr} [, {winid}]) *line()*
The result is a Number, which is the line number of the file
position given with {expr}. The {expr} argument is a string.
The accepted positions are:
The accepted positions are: *E1209*
. the cursor position
$ the last line in the current buffer
'x position of mark x (if the mark is not set, 0 is
@ -4924,7 +4927,7 @@ line({expr} [, {winid}]) *line()*
line(".") line number of the cursor
line(".", winid) idem, in window "winid"
line("'t") line number of mark t
line("'" . marker) line number of mark marker
line("'" .. marker) line number of mark marker
<
To jump to the last known position when opening a file see
|last-position-jump|.
@ -5000,12 +5003,12 @@ listener_add({callback} [, {buf}]) *listener_add()*
Returns a unique ID that can be passed to |listener_remove()|.
The {callback} is invoked with five arguments:
a:bufnr the buffer that was changed
a:start first changed line number
a:end first line number below the change
a:added number of lines added, negative if lines were
bufnr the buffer that was changed
start first changed line number
end first line number below the change
added number of lines added, negative if lines were
deleted
a:changes a List of items with details about the changes
changes a List of items with details about the changes
Example: >
func Listener(bufnr, start, end, added, changes)
@ -5013,7 +5016,7 @@ listener_add({callback} [, {buf}]) *listener_add()*
endfunc
call listener_add('Listener', bufnr)
< The List cannot be changed. Each item in a:changes is a
< The List cannot be changed. Each item in "changes" is a
dictionary with these entries:
lnum the first line number of the change
end the first line below the change
@ -5140,7 +5143,7 @@ luaeval({expr} [, {expr}]) *luaeval()*
map({expr1}, {expr2}) *map()*
{expr1} must be a |List|, |String|, |Blob| or |Dictionary|.
When {expr1} is a |List|| or |Dictionary|, replace each
When {expr1} is a |List| or |Dictionary|, replace each
item in {expr1} with the result of evaluating {expr2}.
For a |Blob| each byte is replaced.
For a |String|, each character, including composing
@ -5158,7 +5161,7 @@ map({expr1}, {expr2}) *map()*
current byte. For a |String| |v:key| has the index of the
current character.
Example: >
:call map(mylist, '"> " . v:val . " <"')
:call map(mylist, '"> " .. v:val .. " <"')
< This puts "> " before and " <" after each item in "mylist".
Note that {expr2} is the result of an expression and is then
@ -5172,19 +5175,19 @@ map({expr1}, {expr2}) *map()*
The function must return the new value of the item. Example
that changes each value by "key-value": >
func KeyValue(key, val)
return a:key . '-' . a:val
return a:key .. '-' .. a:val
endfunc
call map(myDict, function('KeyValue'))
< It is shorter when using a |lambda|: >
call map(myDict, {key, val -> key . '-' . val})
call map(myDict, {key, val -> key .. '-' .. val})
< If you do not use "val" you can leave it out: >
call map(myDict, {key -> 'item: ' . key})
call map(myDict, {key -> 'item: ' .. key})
< If you do not use "key" you can use a short name: >
call map(myDict, {_, val -> 'item: ' . val})
call map(myDict, {_, val -> 'item: ' .. val})
<
The operation is done in-place for a |List| and |Dictionary|.
If you want it to remain unmodified make a copy first: >
:let tlist = map(copy(mylist), ' v:val . "\t"')
:let tlist = map(copy(mylist), ' v:val .. "\t"')
< Returns {expr1}, the |List| or |Dictionary| that was filtered,
or a new |Blob| or |String|.
@ -5260,7 +5263,7 @@ maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
then the global mappings.
This function can be used to map a key even when it's already
mapped, and have it do the original mapping too. Sketch: >
exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
exe 'nnoremap <Tab> ==' .. maparg('<Tab>', 'n')
< Can also be used as a |method|: >
GetKey()->maparg('n')
@ -5783,7 +5786,7 @@ mkdir({name} [, {path} [, {prot}]])
{name}. Thus if you create /tmp/foo/bar then /tmp/foo will be
created with 0o755.
Example: >
:call mkdir($HOME . "/tmp/foo/bar", "p", 0o700)
:call mkdir($HOME .. "/tmp/foo/bar", "p", 0o700)
< This function is not available in the |sandbox|.
@ -6224,7 +6227,7 @@ prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
stopinsert
close
else
call append(line('$') - 1, 'Entered: "' . a:text . '"')
call append(line('$') - 1, 'Entered: "' .. a:text .. '"')
" Reset 'modified' to allow the buffer to be closed.
set nomodified
endif
@ -6396,8 +6399,8 @@ readdir({directory} [, {expr} [, {dict}]]) *readdir()*
readdir(dirname, {n -> n =~ '.txt$'})
< To skip hidden and backup files: >
readdir(dirname, {n -> n !~ '^\.\|\~$'})
< The optional {dict} argument allows for further custom
< *E857*
The optional {dict} argument allows for further custom
values. Currently this is used to specify if and how sorting
should be performed. The dict can have the following members:
@ -6421,7 +6424,7 @@ readdir({directory} [, {expr} [, {dict}]]) *readdir()*
function! s:tree(dir)
return {a:dir : map(readdir(a:dir),
\ {_, x -> isdirectory(x) ?
\ {x : s:tree(a:dir . '/' . x)} : x})}
\ {x : s:tree(a:dir .. '/' .. x)} : x})}
endfunction
echo s:tree(".")
<
@ -6531,7 +6534,7 @@ reduce({object}, {func} [, {initial}]) *reduce()* *E998*
{func} is called for every item in {object}, which can be a
|String|, |List| or a |Blob|. {func} is called with two
arguments: the result so far and current item. After
processing all items the result is returned.
processing all items the result is returned. *E1132*
{initial} is the initial result. When omitted, the first item
in {object} is used and {func} is first called for the second
@ -6618,16 +6621,22 @@ reltimestr({time}) *reltimestr()*
*remote_expr()* *E449*
remote_expr({server}, {string} [, {idvar} [, {timeout}]])
Send the {string} to {server}. The string is sent as an
expression and the result is returned after evaluation.
The result must be a String or a |List|. A |List| is turned
into a String by joining the items with a line break in
between (not at the end), like with join(expr, "\n").
Send the {string} to {server}. The {server} argument is a
string, also see |{server}|.
The string is sent as an expression and the result is returned
after evaluation. The result must be a String or a |List|. A
|List| is turned into a String by joining the items with a
line break in between (not at the end), like with join(expr,
"\n").
If {idvar} is present and not empty, it is taken as the name
of a variable and a {serverid} for later use with
|remote_read()| is stored there.
If {timeout} is given the read times out after this many
seconds. Otherwise a timeout of 600 seconds is used.
See also |clientserver| |RemoteReply|.
This function is not available in the |sandbox|.
{only available when compiled with the |+clientserver| feature}
@ -6648,7 +6657,7 @@ remote_expr({server}, {string} [, {idvar} [, {timeout}]])
remote_foreground({server}) *remote_foreground()*
Move the Vim server with the name {server} to the foreground.
The {server} argument is a string.
The {server} argument is a string, also see |{server}|.
This works like: >
remote_expr({server}, "foreground()")
< Except that on Win32 systems the client does the work, to work
@ -6677,7 +6686,7 @@ remote_peek({serverid} [, {retvar}]) *remote_peek()*
{only available when compiled with the |+clientserver| feature}
Examples: >
:let repl = ""
:echo "PEEK: ".remote_peek(id, "repl").": ".repl
:echo "PEEK: " .. remote_peek(id, "repl") .. ": " .. repl
< Can also be used as a |method|: >
ServerId()->remote_peek()
@ -6697,12 +6706,17 @@ remote_read({serverid}, [{timeout}]) *remote_read()*
<
*remote_send()* *E241*
remote_send({server}, {string} [, {idvar}])
Send the {string} to {server}. The string is sent as input
keys and the function returns immediately. At the Vim server
the keys are not mapped |:map|.
Send the {string} to {server}. The {server} argument is a
string, also see |{server}|.
The string is sent as input keys and the function returns
immediately. At the Vim server the keys are not mapped
|:map|.
If {idvar} is present, it is taken as the name of a variable
and a {serverid} for later use with remote_read() is stored
there.
See also |clientserver| |RemoteReply|.
This function is not available in the |sandbox|.
{only available when compiled with the |+clientserver| feature}
@ -6710,12 +6724,12 @@ remote_send({server}, {string} [, {idvar}])
Note: Any errors will be reported in the server and may mess
up the display.
Examples: >
:echo remote_send("gvim", ":DropAndReply ".file, "serverid").
:echo remote_send("gvim", ":DropAndReply " .. file, "serverid") ..
\ remote_read(serverid)
:autocmd NONE RemoteReply *
\ echo remote_read(expand("<amatch>"))
:echo remote_send("gvim", ":sleep 10 | echo ".
:echo remote_send("gvim", ":sleep 10 | echo " ..
\ 'server2client(expand("<client>"), "HELLO")<CR>')
<
Can also be used as a |method|: >
@ -6740,7 +6754,7 @@ remove({list}, {idx} [, {end}]) *remove()*
points to an item before {idx} this is an error.
See |list-index| for possible values of {idx} and {end}.
Example: >
:echo "last item: " . remove(mylist, -1)
:echo "last item: " .. remove(mylist, -1)
:call remove(mylist, 0, 9)
<
Use |delete()| to remove a file.
@ -6756,13 +6770,13 @@ remove({blob}, {idx} [, {end}])
byte as {end} a |Blob| with one byte is returned. When {end}
points to a byte before {idx} this is an error.
Example: >
:echo "last byte: " . remove(myblob, -1)
:echo "last byte: " .. remove(myblob, -1)
:call remove(mylist, 0, 9)
remove({dict}, {key})
Remove the entry from {dict} with key {key} and return it.
Example: >
:echo "removed " . remove(dict, "one")
:echo "removed " .. remove(dict, "one")
< If there is no {key} in {dict} this is an error.
rename({from}, {to}) *rename()*
@ -6893,7 +6907,7 @@ screencol() *screencol()*
column inside the command line, which is 1 when the command is
executed. To get the cursor position in the file use one of
the following mappings: >
nnoremap <expr> GG ":echom ".screencol()."\n"
nnoremap <expr> GG ":echom " .. screencol() .. "\n"
nnoremap <silent> GG :echom screencol()<CR>
nnoremap GG <Cmd>echom screencol()<CR>
<
@ -6917,6 +6931,8 @@ screenpos({winid}, {lnum}, {col}) *screenpos()*
as if 'conceallevel' is zero. You can set the cursor to the
right position and use |screencol()| to get the value with
|conceal| taken into account.
If the position is in a closed fold the screen position of the
first character is returned, {col} is not used.
Can also be used as a |method|: >
GetWinid()->screenpos(lnum, col)
@ -7015,7 +7031,7 @@ search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
Example (goes over all files in the argument list): >
:let n = 1
:while n <= argc() " loop over all files in arglist
: exe "argument " . n
: exe "argument " .. n
: " start at the last char in the file and wrap for the
: " first search to find match at start of file
: normal G$
@ -7099,11 +7115,11 @@ searchcount([{options}]) *searchcount()*
return printf(' /%s [%d/%d]', @/,
\ result.current, result.total)
endfunction
let &statusline .= '%{LastSearchCount()}'
let &statusline ..= '%{LastSearchCount()}'
" Or if you want to show the count only when
" 'hlsearch' was on
" let &statusline .=
" let &statusline ..=
" \ '%{v:hlsearch ? LastSearchCount() : ""}'
<
You can also update the search count, which can be useful in a
@ -7390,7 +7406,7 @@ setcellwidths({list}) *setcellwidths()*
setcellwidths([[0xad, 0xad, 1],
\ [0x2194, 0x2199, 2]])
< *E1109* *E1110* *E1111* *E1112* *E1113*
< *E1109* *E1110* *E1111* *E1112* *E1113* *E1114*
The {list} argument is a list of lists with each three
numbers. These three numbers are [low, high, width]. "low"
and "high" can be the same, in which case this refers to one
@ -7648,10 +7664,12 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
module name of a module; if given it will be used in
quickfix error window instead of the filename.
lnum line number in the file
end_lnum end of lines, if the item spans multiple lines
pattern search pattern used to locate the error
col column number
vcol when non-zero: "col" is visual column
when zero: "col" is byte index
end_col end column, if the item spans multiple columns
nr error number
text description of the error
type single-character error type, 'E', 'W', etc.
@ -7896,7 +7914,7 @@ sha256({string}) *sha256()*
shellescape({string} [, {special}]) *shellescape()*
Escape {string} for use as a shell command argument.
When the 'shell' contains powershell (MS-Windows) or pwsh
(MS-Windows, Linux, and MacOS) then it will enclose {string}
(MS-Windows, Linux, and macOS) then it will enclose {string}
in single quotes and will double up all internal single
quotes.
On MS-Windows, when 'shellslash' is not set, it will enclose
@ -7925,10 +7943,10 @@ shellescape({string} [, {special}]) *shellescape()*
character inside single quotes.
Example of use with a |:!| command: >
:exe '!dir ' . shellescape(expand('<cfile>'), 1)
:exe '!dir ' .. shellescape(expand('<cfile>'), 1)
< This results in a directory listing for the file under the
cursor. Example of use with |system()|: >
:call system("chmod +w -- " . shellescape(expand("%")))
:call system("chmod +w -- " .. shellescape(expand("%")))
< See also |::S|.
Can also be used as a |method|: >
@ -8015,21 +8033,22 @@ slice({expr}, {start} [, {end}]) *slice()*
GetList()->slice(offset)
sort({list} [, {func} [, {dict}]]) *sort()* *E702*
sort({list} [, {how} [, {dict}]]) *sort()* *E702*
Sort the items in {list} in-place. Returns {list}.
If you want a list to remain unmodified make a copy first: >
:let sortedlist = sort(copy(mylist))
< When {func} is omitted, is empty or zero, then sort() uses the
< When {how} is omitted or is an string, then sort() uses the
string representation of each item to sort on. Numbers sort
after Strings, |Lists| after Numbers. For sorting text in the
current buffer use |:sort|.
When {func} is given and it is '1' or 'i' then case is
ignored.
When {how} is given and it is 'i' then case is ignored.
In legacy script, for backwards compatibility, the value one
can be used to ignore case. Zero means to not ignore case.
When {func} is given and it is 'l' then the current collation
When {how} is given and it is 'l' then the current collation
locale is used for ordering. Implementation details: strcoll()
is used to compare strings. See |:language| check or set the
collation locale. |v:collate| can also be used to check the
@ -8046,19 +8065,19 @@ sort({list} [, {func} [, {dict}]]) *sort()* *E702*
< ['n', 'o', 'O', 'p', 'z', 'ö'] ~
This does not work properly on Mac.
When {func} is given and it is 'n' then all items will be
When {how} is given and it is 'n' then all items will be
sorted numerical (Implementation detail: this uses the
strtod() function to parse numbers, Strings, Lists, Dicts and
Funcrefs will be considered as being 0).
When {func} is given and it is 'N' then all items will be
When {how} is given and it is 'N' then all items will be
sorted numerical. This is like 'n' but a string containing
digits will be used as the number they represent.
When {func} is given and it is 'f' then all items will be
When {how} is given and it is 'f' then all items will be
sorted numerical. All values must be a Number or a Float.
When {func} is a |Funcref| or a function name, this function
When {how} is a |Funcref| or a function name, this function
is called to compare items. The function is invoked with two
items as argument and must return zero if they are equal, 1 or
bigger if the first one sorts after the second one, -1 or
@ -8700,7 +8719,7 @@ substitute({string}, {pat}, {sub}, {flags}) *substitute()*
When {sub} starts with "\=", the remainder is interpreted as
an expression. See |sub-replace-expression|. Example: >
:echo substitute(s, '%\(\x\x\)',
\ '\=nr2char("0x" . submatch(1))', 'g')
\ '\=nr2char("0x" .. submatch(1))', 'g')
< When {sub} is a Funcref that function is called, with one
optional argument. Example: >
@ -8708,7 +8727,7 @@ substitute({string}, {pat}, {sub}, {flags}) *substitute()*
< The optional argument is a list which contains the whole
matched string and up to nine submatches, like what
|submatch()| returns. Example: >
:echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
:echo substitute(s, '%\(\x\x\)', {m -> '0x' .. m[1]}, 'g')
< Can also be used as a |method|: >
GetString()->substitute(pat, sub, flags)
@ -8897,8 +8916,8 @@ system({expr} [, {input}]) *system()* *E677*
This is not to be used for interactive commands.
The result is a String. Example: >
:let files = system("ls " . shellescape(expand('%:h')))
:let files = system('ls ' . expand('%:h:S'))
:let files = system('ls ' .. shellescape(expand('%:h')))
:let files = system('ls ' .. expand('%:h:S'))
< To make the result more system-independent, the shell output
is filtered to replace <CR> with <NL> for Macintosh, and
@ -9079,7 +9098,7 @@ tempname() *tempname()* *temp-file-name*
doesn't exist. It can be used for a temporary file. The name
is different for at least 26 consecutive calls. Example: >
:let tmpfile = tempname()
:exe "redir > " . tmpfile
:exe "redir > " .. tmpfile
< For Unix, the file will be in a private directory |tempfile|.
For MS-Windows forward slashes are used when the 'shellslash'
option is set, or when 'shellcmdflag' starts with '-' and
@ -9276,7 +9295,7 @@ trim({text} [, {mask} [, {dir}]]) *trim()*
Examples: >
echo trim(" some text ")
< returns "some text" >
echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") .. "_TAIL"
< returns "RESERVE_TAIL" >
echo trim("rm<Xrm<>X>rrm", "rm<>")
< returns "Xrm<>X" (characters in the middle are not removed) >
@ -9467,7 +9486,7 @@ visualmode([{expr}]) *visualmode()*
character-wise, line-wise, or block-wise Visual mode
respectively.
Example: >
:exe "normal " . visualmode()
:exe "normal " .. visualmode()
< This enters the same Visual mode as before. It is also useful
in scripts if you wish to act differently depending on the
Visual mode that was used.
@ -9498,7 +9517,6 @@ win_execute({id}, {command} [, {silent}]) *win_execute()*
call win_execute(winid, 'set syntax=python')
< Doing the same with `setwinvar()` would not trigger
autocommands and not actually show syntax highlighting.
*E994*
Not all commands are allowed in popup windows.
When window {id} does not exist then no error is given and
@ -9672,7 +9690,7 @@ winheight({nr}) *winheight()*
An existing window always has a height of zero or more.
This excludes any window toolbar line.
Examples: >
:echo "The current window has " . winheight(0) . " lines."
:echo "The current window has " .. winheight(0) .. " lines."
< Can also be used as a |method|: >
GetWinid()->winheight()
@ -9813,7 +9831,7 @@ winwidth({nr}) *winwidth()*
returned. When window {nr} doesn't exist, -1 is returned.
An existing window always has a width of zero or more.
Examples: >
:echo "The current window has " . winwidth(0) . " columns."
:echo "The current window has " .. winwidth(0) .. " columns."
:if winwidth(0) <= 50
: 50 wincmd |
:endif

View File

@ -1,4 +1,4 @@
*change.txt* For Vim version 8.2. Last change: 2021 Dec 29
*change.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@ -782,7 +782,7 @@ This deletes "TESTING" from all lines, but only one per line.
For compatibility with Vi these two exceptions are allowed:
"\/{string}/" and "\?{string}?" do the same as "//{string}/r".
"\&{string}&" does the same as "//{string}/".
*pattern-delimiter* *E146*
*pattern-delimiter* *E146* *E1241* *E1242*
Instead of the '/' which surrounds the pattern and replacement string, you can
use another single-byte character. This is useful if you want to include a
'/' in the search pattern or replacement string. Example: >
@ -946,7 +946,7 @@ Consider using a character like "@" or ":". There is no problem if the result
of the expression contains the separation character.
Examples: >
:s@\n@\="\r" . expand("$HOME") . "\r"@
:s@\n@\="\r" .. expand("$HOME") .. "\r"@
This replaces an end-of-line with a new line containing the value of $HOME. >
s/E/\="\<Char-0x20ac>"/g
@ -1076,7 +1076,7 @@ inside of strings can change! Also see 'softtabstop' option. >
in [range] (default: current line |cmdline-ranges|),
[into register x].
*p* *put* *E353*
*p* *put* *E353* *E1240*
["x]p Put the text [from register x] after the cursor
[count] times.
@ -1123,7 +1123,7 @@ inside of strings can change! Also see 'softtabstop' option. >
the command. You need to escape the '|' and '"'
characters to prevent them from terminating the
command. Example: >
:put ='path' . \",/test\"
:put ='path' .. \",/test\"
< If there is no expression after '=', Vim uses the
previous expression. You can see it with ":dis =".
@ -1176,10 +1176,13 @@ register. With blockwise selection it also depends on the size of the block
and whether the corners are on an existing character. (Implementation detail:
it actually works by first putting the register after the selection and then
deleting the selection.)
The previously selected text is put in the unnamed register. If you want to
put the same text into a Visual selection several times you need to use
With 'p' the previously selected text is put in the unnamed register. This is
useful if you want to put that text somewhere else. But you cannot repeat the
same change.
With 'P' the unnamed register is not changed, you can repeat the same change.
But the deleted text cannot be used. If you do need it you can use 'p' with
another register. E.g., yank the text to copy, Visually select the text to
replace and use "0p . You can repeat this as many times as you like, the
replace and use "0p . You can repeat this as many times as you like, and the
unnamed register will be changed each time.
When you use a blockwise Visual mode command and yank only a single line into

View File

@ -91,7 +91,7 @@ And you should see the message in Vim. You can move the cursor a word forward:
To handle asynchronous communication a callback needs to be used: >
func MyHandler(channel, msg)
echo "from the handler: " . a:msg
echo "from the handler: " .. a:msg
endfunc
call ch_sendexpr(channel, 'hello!', {'callback': "MyHandler"})
Vim will not wait for a response. Now the server can send the response later
@ -136,7 +136,7 @@ When using an IPv6 address, enclose it within square brackets. E.g.,
gets two arguments: the channel and the received message.
Example: >
func Handle(channel, msg)
echo 'Received: ' . a:msg
echo 'Received: ' .. a:msg
endfunc
let channel = ch_open("localhost:8765", {"callback": "Handle"})
<
@ -1296,7 +1296,7 @@ prompt. >
" Function handling output from the shell: Added above the prompt.
func GotOutput(channel, msg)
call append(line("$") - 1, "- " . a:msg)
call append(line("$") - 1, "- " .. a:msg)
endfunc
" Function handling the shell exist: close the window.

View File

@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 8.2. Last change: 2022 Jan 08
*cmdline.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@ -227,7 +227,7 @@ CTRL-\ e {expr} *c_CTRL-\_e*
Example: >
:cmap <F7> <C-\>eAppendSome()<CR>
:func AppendSome()
:let cmd = getcmdline() . " Some()"
:let cmd = getcmdline() .. " Some()"
:" place the cursor on the )
:call setcmdpos(strlen(cmd))
:return cmd
@ -730,7 +730,7 @@ If more line specifiers are given than required for the command, the first
one(s) will be ignored.
Line numbers may be specified with: *:range* *{address}*
{number} an absolute line number
{number} an absolute line number *E1247*
. the current line *:.*
$ the last line in the file *:$*
% equal to 1,$ (the entire file) *:%*

View File

@ -1,4 +1,4 @@
*diff.txt* For Vim version 8.2. Last change: 2021 May 24
*diff.txt* For Vim version 8.2. Last change: 2022 Jan 22
VIM REFERENCE MANUAL by Bram Moolenaar
@ -335,8 +335,9 @@ After setting this variable, reload the syntax script: >
FINDING THE DIFFERENCES *diff-diffexpr*
The 'diffexpr' option can be set to use something else than the standard
"diff" program to compare two files and find the differences. *E959*
The 'diffexpr' option can be set to use something else than the internal diff
support or the standard "diff" program to compare two files and find the
differences. *E959*
When 'diffexpr' is empty, Vim uses this command to find the differences
between file1 and file2: >
@ -369,7 +370,7 @@ format mentioned. These variables are set to the file names used:
v:fname_in original file
v:fname_new new version of the same file
v:fname_out resulting diff file
v:fname_out where to write the resulting diff file
Additionally, 'diffexpr' should take care of "icase" and "iwhite" in the
'diffopt' option. 'diffexpr' cannot change the value of 'lines' and
@ -381,13 +382,13 @@ Example (this does almost the same as 'diffexpr' being empty): >
function MyDiff()
let opt = ""
if &diffopt =~ "icase"
let opt = opt . "-i "
let opt = opt .. "-i "
endif
if &diffopt =~ "iwhite"
let opt = opt . "-b "
let opt = opt .. "-b "
endif
silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
\ " > " . v:fname_out
silent execute "!diff -a --binary " .. opt .. v:fname_in .. " " .. v:fname_new ..
\ " > " .. v:fname_out
redraw!
endfunction
@ -402,7 +403,9 @@ If the 'diffexpr' expression starts with s: or |<SID>|, then it is replaced
with the script ID (|local-function|). Example: >
set diffexpr=s:MyDiffExpr()
set diffexpr=<SID>SomeDiffExpr()
<
Otherwise, the expression is evaluated in the context of the script where the
option was set, thus script-local items are available.
*E810* *E97*
Vim will do a test if the diff output looks alright. If it doesn't, you will
get an error message. Possible causes:
@ -442,8 +445,8 @@ Example (this does the same as 'patchexpr' being empty): >
set patchexpr=MyPatch()
function MyPatch()
:call system("patch -o " . v:fname_out . " " . v:fname_in .
\ " < " . v:fname_diff)
:call system("patch -o " .. v:fname_out .. " " .. v:fname_in ..
\ " < " .. v:fname_diff)
endfunction
Make sure that using the "patch" program doesn't have unwanted side effects.
@ -458,5 +461,8 @@ If the 'patchexpr' expression starts with s: or |<SID>|, then it is replaced
with the script ID (|local-function|). Example: >
set patchexpr=s:MyPatchExpr()
set patchexpr=<SID>SomePatchExpr()
<
Otherwise, the expression is evaluated in the context of the script where the
option was set, thus script-local items are available.
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@ -1,4 +1,4 @@
*editing.txt* For Vim version 8.2. Last change: 2022 Jan 11
*editing.txt* For Vim version 8.2. Last change: 2022 Feb 16
VIM REFERENCE MANUAL by Bram Moolenaar
@ -222,7 +222,7 @@ If you want to keep the changed buffer without saving it, switch on the
Edit {file} always. Discard any changes to the
current buffer.
Also see |++opt| and |+cmd|.
*:edit_#* *:e#*
:e[dit] [++opt] [+cmd] #[count]
Edit the [count]th buffer (as shown by |:files|).
This command does the same as [count] CTRL-^. But ":e
@ -389,7 +389,7 @@ as a wildcard when "[" is in the 'isfname' option. A simple way to avoid this
is to use "path\[[]abc]", this matches the file "path\[abc]".
*starstar-wildcard*
Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.
Expanding "**" is possible on Unix, Win32, macOS and a few other systems.
This allows searching a directory tree. This goes up to 100 directories deep.
Note there are some commands where this works slightly differently, see
|file-searching|.
@ -433,7 +433,7 @@ This also works for most other systems, with the restriction that the
backticks must be around the whole item. It is not possible to have text
directly before the first or just after the last backtick.
*`=*
*`=* *E1083*
You can have the backticks expanded as a Vim expression, instead of as an
external command, by putting an equal sign right after the first backtick,
e.g.: >
@ -444,9 +444,9 @@ does apply like to other wildcards.
Environment variables in the expression are expanded when evaluating the
expression, thus this works: >
:e `=$HOME . '/.vimrc'`
:e `=$HOME .. '/.vimrc'`
This does not work, $HOME is inside a string and used literally: >
:e `='$HOME' . '/.vimrc'`
:e `='$HOME' .. '/.vimrc'`
If the expression returns a string then names are to be separated with line
breaks. When the result is a |List| then each item is used as a name. Line
@ -633,7 +633,7 @@ list of the current window.
Also see |++opt| and |+cmd|.
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
:[count]arga[dd]
:[count]arga[dd] *E1156*
Add the {name}s to the argument list. When {name} is
omitted add the current buffer name to the argument
list.
@ -890,7 +890,7 @@ Note: When the 'write' option is off, you are not able to write any file.
*:w* *:write*
*E502* *E503* *E504* *E505*
*E512* *E514* *E667* *E796* *E949*
*E512* *E514* *E667* *E949*
:w[rite] [++opt] Write the whole buffer to the current file. This is
the normal way to save changes to a file. It fails
when the 'readonly' option is set or when there is
@ -1650,6 +1650,11 @@ If you don't get warned often enough you can use the following command.
if it exists now.
Once a file has been checked the timestamp is reset,
you will not be warned again.
Syntax highlighting, marks, diff status,
'fileencoding', 'fileformat' and 'binary' options
are not changed. See |v:fcs_choice| to reload these
too (for example, if a code formatting tools has
changed the file).
:[N]checkt[ime] {filename}
:[N]checkt[ime] [N]
@ -1690,7 +1695,7 @@ which version of the file you want to keep.
The accuracy of the time check depends on the filesystem. On Unix it is
usually sub-second. With old file sytems and on MS-Windows it is normally one
second. Use has('nanotime') check if sub-second time stamp checks are
second. Use `has('nanotime')` to check if sub-second time stamp checks are
available.
There is one situation where you get the message while there is nothing wrong:
@ -1772,10 +1777,8 @@ There are three different types of searching:
/u/user_x/include
< Note: If your 'path' setting includes a non-existing directory, Vim will
skip the non-existing directory, but continues searching in the parent of
the non-existing directory if upwards searching is used. E.g. when
searching "../include" and that doesn't exist, and upward searching is
used, also searches in "..".
skip the non-existing directory, and also does not search in the parent of
the non-existing directory if upwards searching is used.
3) Combined up/downward search:
If Vim's current path is /u/user_x/work/release and you do >

View File

@ -1,11 +1,11 @@
*eval.txt* For Vim version 8.2. Last change: 2022 Jan 08
*eval.txt* For Vim version 8.2. Last change: 2022 Feb 21
VIM REFERENCE MANUAL by Bram Moolenaar
Expression evaluation *expression* *expr* *E15* *eval*
*E1002*
Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|.
Note: Expression evaluation can be disabled at compile time. If this has been
@ -44,7 +44,8 @@ Profiling is documented at |profiling|.
1. Variables *variables*
1.1 Variable types ~
*E712* *E896* *E897* *E899*
*E712* *E896* *E897* *E899* *E1098*
*E1107* *E1135* *E1138*
There are ten types of variables:
*Number* *Integer*
@ -53,7 +54,7 @@ Number A 32 or 64 bit signed number. |expr-number|
Examples: -123 0x10 0177 0o177 0b1011
Float A floating point number. |floating-point-format| *Float*
{only when compiled with the |+float| feature}
{only when compiled with the |+float| feature} *E1076*
Examples: 123.456 1.15e-6 -1.1e3
String A NUL terminated string of 8-bit unsigned characters (bytes).
@ -180,7 +181,7 @@ You will not get an error if you try to change the type of a variable.
1.2 Function references ~
*Funcref* *E695* *E718*
*Funcref* *E695* *E718* *E1086* *E1192*
A Funcref variable is obtained with the |function()| function, the |funcref()|
function or created with the lambda expression |expr-lambda|. It can be used
in an expression in the place of a function name, before the parenthesis
@ -469,7 +470,7 @@ It is also possible to put remaining items in a List variable: >
:for [i, j; rest] in listlist
: call Doit(i, j)
: if !empty(rest)
: echo "remainder: " . string(rest)
: echo "remainder: " .. string(rest)
: endif
:endfor
@ -497,11 +498,11 @@ Functions that are useful with a List: >
:let list = split("a b c") " create list from items in a string
:let string = join(list, ', ') " create string from list items
:let s = string(list) " String representation of list
:call map(list, '">> " . v:val') " prepend ">> " to each item
:call map(list, '">> " .. v:val') " prepend ">> " to each item
Don't forget that a combination of features can make things simple. For
example, to add up all the numbers in a list: >
:exe 'let sum = ' . join(nrlist, '+')
:exe 'let sum = ' .. join(nrlist, '+')
1.4 Dictionaries ~
@ -567,7 +568,7 @@ turn the Dictionary into a List and pass it to |:for|.
Most often you want to loop over the keys, using the |keys()| function: >
:for key in keys(mydict)
: echo key . ': ' . mydict[key]
: echo key .. ': ' .. mydict[key]
:endfor
The List of keys is unsorted. You may want to sort them first: >
@ -575,13 +576,13 @@ The List of keys is unsorted. You may want to sort them first: >
To loop over the values use the |values()| function: >
:for v in values(mydict)
: echo "value: " . v
: echo "value: " .. v
:endfor
If you want both the key and the value use the |items()| function. It returns
a List in which each item is a List with two items, the key and the value: >
:for [key, value] in items(mydict)
: echo key . ': ' . value
: echo key .. ': ' .. value
:endfor
@ -676,7 +677,7 @@ Functions that can be used with a Dictionary: >
:let small = min(dict) " minimum value in dict
:let xs = count(dict, 'x') " count nr of times 'x' appears in dict
:let s = string(dict) " String representation of dict
:call map(dict, '">> " . v:val') " prepend ">> " to each item
:call map(dict, '">> " .. v:val') " prepend ">> " to each item
1.5 Blobs ~
@ -764,7 +765,7 @@ length minus one is used: >
Blob modification ~
*blob-modification*
*blob-modification* *E1182* *E1184*
To change a specific byte of a blob use |:let| this way: >
:let blob[4] = 0x44
@ -835,7 +836,7 @@ In legacy script it is possible to form a variable name with curly braces, see
==============================================================================
2. Expression syntax *expression-syntax*
*E1143*
Expression syntax summary, from least to most significant:
|expr1| expr2
@ -916,14 +917,17 @@ Example: >
All expressions within one level are parsed from left to right.
Expression nesting is limited to 1000 levels deep (300 when build with MSVC)
to avoid running out of stack and crashing. *E1169*
expr1 *expr1* *trinary* *falsy-operator* *??* *E109*
expr1 *expr1* *ternary* *falsy-operator* *??* *E109*
-----
The trinary operator: expr2 ? expr1 : expr1
The ternary operator: expr2 ? expr1 : expr1
The falsy operator: expr2 ?? expr1
Trinary operator ~
Ternary operator ~
In legacy script the expression before the '?' is evaluated to a number. If
it evaluates to |TRUE|, the result is the value of the expression between the
@ -1014,7 +1018,7 @@ This is valid whether "b" has been defined or not. The second clause will
only be evaluated if "b" has been defined.
expr4 *expr4*
expr4 *expr4* *E1153*
-----
expr5 {cmp} expr5
@ -1030,7 +1034,7 @@ is |true| or |false|.
*expr-==?* *expr-!=?* *expr->?* *expr->=?*
*expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
*expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
*expr-is?* *expr-isnot?*
*expr-is?* *expr-isnot?* *E1072*
use 'ignorecase' match case ignore case ~
equal == ==# ==?
not equal != !=# !=?
@ -1071,7 +1075,7 @@ To compare Funcrefs to see if they refer to the same function, ignoring bound
Dictionary and arguments, use |get()| to get the function name: >
if get(Part1, 'name') == get(Part2, 'name')
" Part1 and Part2 refer to the same function
< *E1037*
Using "is" or "isnot" with a |List|, |Dictionary| or |Blob| checks whether
the expressions are referring to the same |List|, |Dictionary| or |Blob|
instance. A copy of a |List| is different from the original |List|. When
@ -1123,7 +1127,7 @@ can be matched like an ordinary character. Examples:
"foo\nbar" =~ "\\n" evaluates to 0
expr5 and expr6 *expr5* *expr6*
expr5 and expr6 *expr5* *expr6* *E1036* *E1051*
---------------
expr6 + expr6 Number addition, |List| or |Blob| concatenation *expr-+*
expr6 - expr6 Number subtraction *expr--*
@ -1172,6 +1176,7 @@ When dividing a Number by zero the result depends on the value:
>0 / 0 = 0x7fffffff (like positive infinity)
<0 / 0 = -0x7fffffff (like negative infinity)
(before Vim 7.2 it was always 0x7fffffff)
In |Vim9| script dividing a number by zero is an error. *E1154*
When 64-bit Number support is enabled:
0 / 0 = -0x8000000000000000 (like NaN for Float)
@ -1182,7 +1187,7 @@ When the righthand side of '%' is zero, the result is 0.
None of these work for |Funcref|s.
".", ".." and "%" do not work for Float. *E804*
".", ".." and "%" do not work for Float. *E804* *E1035*
expr7 *expr7*
@ -1229,7 +1234,7 @@ in any order. E.g., these are all possible:
Evaluation is always from left to right.
expr9[expr1] item of String or |List| *expr-[]* *E111*
*E909* *subscript*
*E909* *subscript* *E1062*
In legacy Vim script:
If expr9 is a Number or String this results in a String that contains the
expr1'th single byte from expr9. expr9 is used as a String (a number is
@ -1239,7 +1244,7 @@ recognize multibyte encodings, see `byteidx()` for an alternative, or use
byte under the cursor: >
:let c = getline(".")[col(".") - 1]
In |Vim9| script:
In |Vim9| script: *E1147* *E1148*
If expr9 is a String this results in a String that contains the expr1'th
single character (including any composing characters) from expr9. To use byte
indexes use |strpart()|.
@ -1319,7 +1324,7 @@ for a sublist: >
expr9.name entry in a |Dictionary| *expr-entry*
*E1203* *E1229*
If expr9 is a |Dictionary| and it is followed by a dot, then the following
name will be used as a key in the |Dictionary|. This is just like:
expr9[name].
@ -1339,14 +1344,14 @@ Note that the dot is also used for String concatenation. To avoid confusion
always put spaces around the dot for String concatenation.
expr9(expr1, ...) |Funcref| function call
expr9(expr1, ...) |Funcref| function call *E1085*
When expr9 is a |Funcref| type variable, invoke the function it refers to.
expr9->name([args]) method call *method* *->*
expr9->{lambda}([args])
*E260* *E276*
*E260* *E276* *E1265*
For methods that are also available as global functions this is the same as: >
name(expr9 [, args])
There can also be methods specifically for the type of "expr9".
@ -1364,7 +1369,16 @@ Is equivalent to: >
(-1.234)->string()
And NOT: >
-(1.234->string())
<
What comes after "->" can be a name, a simple expression (not containing any
parenthesis), or any expression in parentheses: >
base->name(args)
base->some.name(args)
base->alist[idx](args)
base->(getFuncRef())(args)
Note that in the last call the base is passed to the function resulting from
"(getFuncRef())", inserted before "args".
*E274*
"->name(" must not contain white space. There can be white space before the
"->" and after the "(", thus you can split the lines like this: >
@ -1516,7 +1530,7 @@ option *expr-option* *E112* *E113*
&l:option local option value
Examples: >
echo "tabstop is " . &tabstop
echo "tabstop is " .. &tabstop
if &insertmode
Any option name can be used here. See |options|. When using the local value
@ -1537,7 +1551,7 @@ When using the '=' register you get the expression itself, not what it
evaluates to. Use |eval()| to evaluate it.
nesting *expr-nesting* *E110*
nesting *expr-nesting* *E110*
-------
(expr1) nested expression
@ -1568,7 +1582,7 @@ The first one probably doesn't echo anything, the second echoes the $shell
variable (if your shell supports it).
internal variable *expr-variable*
internal variable *expr-variable* *E1015* *E1089*
-----------------
variable internal variable
See below |internal-variables|.
@ -1656,7 +1670,7 @@ for a lambda expression, you can find what it is with the following command: >
See also: |numbered-function|
==============================================================================
3. Internal variable *internal-variables* *E461*
3. Internal variable *internal-variables* *E461* *E1001*
An internal variable name can be made up of letters, digits and '_'. But it
cannot start with a digit. In legacy script it is also possible to use curly
@ -1806,7 +1820,7 @@ maintain a counter: >
echo "script executed for the first time"
else
let s:counter = s:counter + 1
echo "script executed " . s:counter . " times now"
echo "script executed " .. s:counter .. " times now"
endif
Note that this means that filetype plugins don't get a different set of script
@ -1814,7 +1828,7 @@ variables for each buffer. Use local buffer variables instead |b:var|.
PREDEFINED VIM VARIABLES *vim-variable* *v:var* *v:*
*E963*
*E963* *E1063*
Some variables can be set by the user, but the type cannot be changed.
*v:argv* *argv-variable*
@ -1941,7 +1955,7 @@ v:completed_item
*v:count* *count-variable*
v:count The count given for the last Normal mode command. Can be used
to get the count before a mapping. Read-only. Example: >
:map _x :<C-U>echo "the count is " . v:count<CR>
:map _x :<C-U>echo "the count is " .. v:count<CR>
< Note: The <C-U> is required to remove the line range that you
get when typing ':' after a count.
When there are two counts, as in "3d2w", they are multiplied,
@ -2056,6 +2070,11 @@ v:fcs_choice What should happen after a |FileChangedShell| event was
do with the affected buffer:
reload Reload the buffer (does not work if
the file was deleted).
edit Reload the buffer and detect the
values for options such as
'fileformat', 'fileencoding', 'binary'
(does not work if the file was
deleted).
ask Ask the user what to do, as if there
was no autocommand. Except that when
only the timestamp changed nothing
@ -2163,7 +2182,8 @@ v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and
*v:maxcol* *maxcol-variable*
v:maxcol Maximum line length. Depending on where it is used it can be
screen columns, characters or bytes.
screen columns, characters or bytes. The value currently is
2147483647 on all systems.
*v:mouse_win* *mouse_win-variable*
v:mouse_win Window number for a mouse click obtained with |getchar()|.
@ -2681,7 +2701,7 @@ See |:verbose-cmd| for more information.
implies that the effect of |:nohlsearch| is undone
when the function returns.
*:endf* *:endfunction* *E126* *E193* *W22*
*:endf* *:endfunction* *E126* *E193* *W22* *E1151*
:endf[unction] [argument]
The end of a function definition. Best is to put it
on a line by its own, without [argument].
@ -2700,7 +2720,7 @@ See |:verbose-cmd| for more information.
command, use line breaks instead of |:bar|: >
:exe "func Foo()\necho 'foo'\nendfunc"
<
*:delf* *:delfunction* *E131* *E933*
*:delf* *:delfunction* *E131* *E933* *E1084*
:delf[unction][!] {name}
Delete function {name}.
{name} can also be a |Dictionary| entry that is a
@ -2717,8 +2737,11 @@ See |:verbose-cmd| for more information.
If "[expr]" is not given, the number 0 is returned.
When a function ends without an explicit ":return",
the number 0 is returned.
Note that there is no check for unreachable lines,
thus there is no warning if commands follow ":return".
In a :def function *E1095* is given if unreachable
code follows after the `:return`.
In legacy script there is no check for unreachable
lines, thus there is no warning if commands follow
`:return`.
If the ":return" is used after a |:try| but before the
matching |:finally| (if present), the commands
@ -2737,7 +2760,7 @@ may optionally be following. In the function the extra arguments can be used
as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which
can be 0). "a:000" is set to a |List| that contains these arguments. Note
that "a:1" is the same as "a:000[0]".
*E742*
*E742* *E1090*
The a: scope and the variables in it cannot be changed, they are fixed.
However, if a composite type is used, such as |List| or |Dictionary| , you can
change their contents. Thus you can pass a |List| to a function and have the
@ -2806,9 +2829,9 @@ Example: >
: echohl Title
: echo a:title
: echohl None
: echo a:0 . " items:"
: echo a:0 .. " items:"
: for s in a:000
: echon ' ' . s
: echon ' ' .. s
: endfor
:endfunction
@ -2830,7 +2853,7 @@ This function can then be called with: >
: echo div
:endif
<
*:cal* *:call* *E107* *E117*
*:cal* *:call* *E107*
:[range]cal[l] {name}([arguments])
Call a function. The name of the function and its arguments
are as specified with `:function`. Up to 20 arguments can be
@ -2851,7 +2874,7 @@ This function can then be called with: >
this works:
*function-range-example* >
:function Mynumber(arg)
: echo line(".") . " " . a:arg
: echo line(".") .. " " .. a:arg
:endfunction
:1,5call Mynumber(getline("."))
<
@ -2862,7 +2885,7 @@ This function can then be called with: >
Example of a function that handles the range itself: >
:function Cont() range
: execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ '
: execute (a:firstline + 1) .. "," .. a:lastline .. 's/^/\t\\ '
:endfunction
:4,8call Cont()
<
@ -2874,6 +2897,12 @@ This function can then be called with: >
:4,8call GetDict().method()
< Here GetDict() gets the range but method() does not.
*E117*
When a function cannot be found the error "E117: Unknown function" will be
given. If the function was using an autoload path or an autoload import and
the script is a |Vim9| script, this may also be caused by the function not
being exported.
*E132*
The recursiveness of user functions is restricted with the |'maxfuncdepth'|
option.
@ -2973,6 +3002,10 @@ Also note that if you have two script files, and one calls a function in the
other and vice versa, before the used function is defined, it won't work.
Avoid using the autoload functionality at the toplevel.
In |Vim9| script you will get error *E1263* if you define a function with
a "#" character in the name. You should use a name without "#" and use
`:export`.
Hint: If you distribute a bunch of scripts you can pack them together with the
|vimball| utility. Also read the user manual |distribute-script|.
@ -3036,7 +3069,7 @@ declarations and assignments do not use a command. |vim9-declaration|
from the {expr}. If {var-name} didn't exist yet, it
is created.
:let {var-name}[{idx}] = {expr1} *E689*
:let {var-name}[{idx}] = {expr1} *E689* *E1141*
Set a list item to the result of the expression
{expr1}. {var-name} must refer to a list and {idx}
must be a valid index in that list. For nested list
@ -3044,12 +3077,12 @@ declarations and assignments do not use a command. |vim9-declaration|
This cannot be used to add an item to a |List|.
This cannot be used to set a byte in a String. You
can do that like this: >
:let var = var[0:2] . 'X' . var[4:]
:let var = var[0:2] .. 'X' .. var[4:]
< When {var-name} is a |Blob| then {idx} can be the
length of the blob, in which case one byte is
appended.
*E711* *E719*
*E711* *E719* *E1165* *E1166* *E1183*
:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710*
Set a sequence of items in a |List| to the result of
the expression {expr1}, which must be a list with the
@ -3059,8 +3092,8 @@ declarations and assignments do not use a command. |vim9-declaration|
When the selected range of items is partly past the
end of the list, items will be added.
*:let+=* *:let-=* *:letstar=*
*:let/=* *:let%=* *:let.=* *:let..=* *E734* *E985*
*:let+=* *:let-=* *:letstar=* *:let/=* *:let%=*
*:let.=* *:let..=* *E734* *E985* *E1019*
:let {var} += {expr1} Like ":let {var} = {var} + {expr1}".
:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}".
:let {var} *= {expr1} Like ":let {var} = {var} * {expr1}".
@ -3114,7 +3147,7 @@ declarations and assignments do not use a command. |vim9-declaration|
is just like using the |:set| command: both the local
value and the global value are changed.
Example: >
:let &path = &path . ',/usr/local/include'
:let &path = &path .. ',/usr/local/include'
< This also works for terminal codes in the form t_xx.
But only for alphanumerical names. Example: >
:let &t_k1 = "\<Esc>[234;"
@ -3143,7 +3176,7 @@ declarations and assignments do not use a command. |vim9-declaration|
:let &g:{option-name} -= {expr1}
Like above, but only set the global value of an option
(if there is one). Works like |:setglobal|.
*E1093*
:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688*
{expr1} must evaluate to a |List|. The first item in
the list is assigned to {name1}, the second item to
@ -3184,7 +3217,7 @@ declarations and assignments do not use a command. |vim9-declaration|
|List| item.
*:let=<<* *:let-heredoc*
*E990* *E991* *E172* *E221*
*E990* *E991* *E172* *E221* *E1145*
:let {var-name} =<< [trim] {endmarker}
text...
text...
@ -3263,7 +3296,7 @@ text...
* Funcref
This does not work in Vim9 script. |vim9-declaration|
:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795*
:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* *E1081*
Remove the internal variable {name}. Several variable
names can be given, they are all removed. The name
may also be a |List| or |Dictionary| item.
@ -3289,7 +3322,7 @@ text...
If the system does not support deleting an environment
variable, it is made empty.
*:cons* *:const*
*:cons* *:const* *E1018*
:cons[t] {var-name} = {expr1}
:cons[t] [{name1}, {name2}, ...] = {expr1}
:cons[t] [{name}, ..., ; {lastname}] = {expr1}
@ -3337,7 +3370,7 @@ text...
:lockvar v
:let v = 'asdf' " fails!
:unlet v " works
< *E741* *E940*
< *E741* *E940* *E1118* *E1119* *E1120* *E1121* *E1122*
If you try to change a locked variable you get an
error message: "E741: Value is locked: {name}".
If you try to lock or unlock a built-in variable you
@ -3385,13 +3418,15 @@ text...
See |deepcopy()|.
:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo*
:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* *E1246*
Unlock the internal variable {name}. Does the
opposite of |:lockvar|.
:if {expr1} *:if* *:end* *:endif* *:en* *E171* *E579* *E580*
:en[dif] Execute the commands until the next matching ":else"
or ":endif" if {expr1} evaluates to non-zero.
Although the short forms work, it is recommended to
always use `:endif` to avoid confusion.
From Vim version 4.5 until 5.0, every Ex command in
between the ":if" and ":endif" is ignored. These two
@ -3446,7 +3481,7 @@ text...
:endfo[r] *:endfo* *:endfor*
Repeat the commands between ":for" and ":endfor" for
each item in {object}. {object} can be a |List| or
a |Blob|.
a |Blob|. *E1177*
Variable {var} is set to the value of each item.
In |Vim9| script the loop variable must not have been
@ -3480,7 +3515,7 @@ text...
|Blob| does not affect the iteration.
:for [{var1}, {var2}, ...] in {listlist}
:endfo[r]
:endfo[r] *E1140*
Like ":for" above, but each item in {listlist} must be
a list, of which each item is assigned to {var1},
{var2}, etc. Example: >
@ -3509,7 +3544,8 @@ text...
all nested ":try"s inside the loop. The outermost
":endtry" then jumps to the command after the loop.
:try *:try* *:endt* *:endtry* *E600* *E601* *E602*
:try *:try* *:endt* *:endtry*
*E600* *E601* *E602* *E1032*
:endt[ry] Change the error handling for the commands between
":try" and ":endtry" including everything being
executed across ":source" commands, function calls,
@ -3545,7 +3581,8 @@ text...
try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
<
*:cat* *:catch* *E603* *E604* *E605*
*:cat* *:catch*
*E603* *E604* *E605* *E654* *E1033*
:cat[ch] /{pattern}/ The following commands until the next |:catch|,
|:finally|, or |:endtry| that belongs to the same
|:try| as the ":catch" are executed when an exception
@ -3566,7 +3603,7 @@ text...
Another character can be used instead of / around the
{pattern}, so long as it does not have a special
meaning (e.g., '|' or '"') and doesn't occur inside
{pattern}.
{pattern}. *E1067*
Information about the exception is available in
|v:exception|. Also see |throw-variables|.
NOTE: It is not reliable to ":catch" the TEXT of
@ -3581,7 +3618,7 @@ text...
|:break|, |:finish|, or |:return|, or by an error or
interrupt or exception (see |:throw|).
*:th* *:throw* *E608*
*:th* *:throw* *E608* *E1129*
:th[row] {expr1} The {expr1} is evaluated and thrown as an exception.
If the ":throw" is used after a |:try| but before the
first corresponding |:catch|, commands are skipped
@ -3698,6 +3735,9 @@ text...
the `append()` call appends the List with text to the
buffer. This is similar to `:call` but works with any
expression.
In |Vim9| script an expression without an effect will
result in error *E1207* . This should help noticing
mistakes.
The command can be shortened to `:ev` or `:eva`, but
these are hard to recognize and therefore not to be
@ -3990,7 +4030,7 @@ exception most recently caught as long it is not finished.
:function! Caught()
: if v:exception != ""
: echo 'Caught "' . v:exception . '" in ' . v:throwpoint
: echo 'Caught "' . v:exception .. '" in ' .. v:throwpoint
: else
: echo 'Nothing caught'
: endif
@ -4393,8 +4433,8 @@ a script in order to catch unexpected things.
:catch /^Vim:Interrupt$/
: echo "Script interrupted"
:catch /.*/
: echo "Internal error (" . v:exception . ")"
: echo " - occurred at " . v:throwpoint
: echo "Internal error (" .. v:exception .. ")"
: echo " - occurred at " .. v:throwpoint
:endtry
:" end of script
@ -4590,7 +4630,7 @@ parentheses can be cut out from |v:exception| with the ":substitute" command.
:function! CheckRange(a, func)
: if a:a < 0
: throw "EXCEPT:MATHERR:RANGE(" . a:func . ")"
: throw "EXCEPT:MATHERR:RANGE(" .. a:func .. ")"
: endif
:endfunction
:
@ -4617,7 +4657,7 @@ parentheses can be cut out from |v:exception| with the ":substitute" command.
: try
: execute "write" fnameescape(a:file)
: catch /^Vim(write):/
: throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR"
: throw "EXCEPT:IO(" .. getcwd() .. ", " .. a:file .. "):WRITEERR"
: endtry
:endfunction
:
@ -4636,9 +4676,9 @@ parentheses can be cut out from |v:exception| with the ":substitute" command.
: let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "")
: let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "")
: if file !~ '^/'
: let file = dir . "/" . file
: let file = dir .. "/" .. file
: endif
: echo 'I/O error for "' . file . '"'
: echo 'I/O error for "' .. file .. '"'
:
:catch /^EXCEPT/
: echo "Unspecified error"
@ -4706,7 +4746,7 @@ clauses, however, is executed.
: echo "inner finally"
: endtry
:catch
: echo 'outer catch-all caught "' . v:exception . '"'
: echo 'outer catch-all caught "' .. v:exception .. '"'
: finally
: echo "outer finally"
:endtry
@ -4768,7 +4808,7 @@ Printing in Binary ~
: let n = a:nr
: let r = ""
: while n
: let r = '01'[n % 2] . r
: let r = '01'[n % 2] .. r
: let n = n / 2
: endwhile
: return r
@ -4779,7 +4819,7 @@ Printing in Binary ~
:func String2Bin(str)
: let out = ''
: for ix in range(strlen(a:str))
: let out = out . '-' . Nr2Bin(char2nr(a:str[ix]))
: let out = out .. '-' .. Nr2Bin(char2nr(a:str[ix]))
: endfor
: return out[1:]
:endfunc
@ -4865,6 +4905,9 @@ explicit the |:scriptversion| command can be used. When a Vim script is not
compatible with older versions of Vim this will give an explicit error,
instead of failing in mysterious ways.
When using a legacy function, defined with `:function`, in |Vim9| script then
scriptversion 4 is used.
*scriptversion-1* >
:scriptversion 1
< This is the original Vim script, same as not using a |:scriptversion|

View File

@ -1,4 +1,4 @@
*filetype.txt* For Vim version 8.2. Last change: 2021 Dec 30
*filetype.txt* For Vim version 8.2. Last change: 2022 Jan 21
VIM REFERENCE MANUAL by Bram Moolenaar
@ -133,15 +133,17 @@ shell script: "#!/bin/csh".
argument was used.
*filetype-overrule*
When the same extension is used for two filetypes, Vim tries to guess what
kind of file it is. This doesn't always work. A number of global variables
can be used to overrule the filetype used for certain extensions:
When the same extension is used for multiple filetypes, Vim tries to guess
what kind of file it is. This doesn't always work. A number of global
variables can be used to overrule the filetype used for certain extensions:
file name variable ~
*.asa g:filetype_asa |ft-aspvbs-syntax| |ft-aspperl-syntax|
*.asm g:asmsyntax |ft-asm-syntax|
*.asp g:filetype_asp |ft-aspvbs-syntax| |ft-aspperl-syntax|
*.fs g:filetype_fs |ft-forth-syntax|
*.bas g:filetype_bas |ft-basic-syntax|
*.frm g:filetype_frm |ft-form-syntax|
*.fs g:filetype_fs |ft-forth-syntax|
*.i g:filetype_i |ft-progress-syntax|
*.inc g:filetype_inc
*.m g:filetype_m |ft-mathematica-syntax|

View File

@ -1,4 +1,4 @@
*fold.txt* For Vim version 8.2. Last change: 2021 Jul 13
*fold.txt* For Vim version 8.2. Last change: 2022 Jan 22
VIM REFERENCE MANUAL by Bram Moolenaar
@ -507,11 +507,14 @@ Note the use of backslashes to avoid some characters to be interpreted by the
:function MyFoldText()
: let line = getline(v:foldstart)
: let sub = substitute(line, '/\*\|\*/\|{{{\d\=', '', 'g')
: return v:folddashes . sub
: return v:folddashes .. sub
:endfunction
Evaluating 'foldtext' is done in the |sandbox|. The current window is set to
the window that displays the line. Errors are ignored.
the window that displays the line. The context is set to the script where the
option was last set.
Errors are ignored. For debugging set the 'debug' option to "throw".
The default value is |foldtext()|. This returns a reasonable text for most
types of folding. If you don't like it, you can specify your own 'foldtext'

View File

@ -47,20 +47,20 @@ Numbers, subscripts and superscripts are available with 's' and 'S':
But some don't come defined by default. Those are digraph definitions you can
add in your ~/.vimrc file. >
exec 'digraph \\ '.char2nr('')
exec 'digraph \< '.char2nr('≼')
exec 'digraph \> '.char2nr('≽')
exec 'digraph (L '.char2nr('⊈')
exec 'digraph )L '.char2nr('⊉')
exec 'digraph (/ '.char2nr('⊄')
exec 'digraph )/ '.char2nr('⊅')
exec 'digraph )/ '.char2nr('⊅')
exec 'digraph U+ '.char2nr('⊎')
exec 'digraph 0- '.char2nr('⊖')
exec 'digraph \\ ' .. char2nr('')
exec 'digraph \< ' .. char2nr('≼')
exec 'digraph \> ' .. char2nr('≽')
exec 'digraph (L ' .. char2nr('⊈')
exec 'digraph )L ' .. char2nr('⊉')
exec 'digraph (/ ' .. char2nr('⊄')
exec 'digraph )/ ' .. char2nr('⊅')
exec 'digraph )/ ' .. char2nr('⊅')
exec 'digraph U+ ' .. char2nr('⊎')
exec 'digraph 0- ' .. char2nr('⊖')
" Euler's constant
exec 'digraph ne '.char2nr('𝑒')
exec 'digraph ne ' .. char2nr('𝑒')
" Raku's atomic operations marker
exec 'digraph @@ '.char2nr('⚛')
exec 'digraph @@ ' .. char2nr('⚛')
Alternatively, you can write Insert mode abbreviations that convert ASCII-
based operators into their single-character Unicode equivalent. >

View File

@ -26,7 +26,7 @@ behavior of the plugin.
g:rustc_path~
Set this option to the path to rustc for use in the |:RustRun| and
|:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
let g:rustc_path = $HOME."/bin/rustc"
let g:rustc_path = $HOME .. "/bin/rustc"
<
*g:rustc_makeprg_no_percent*
@ -87,7 +87,7 @@ g:rust_bang_comment_leader~
g:ftplugin_rust_source_path~
Set this option to a path that should be prepended to 'path' for Rust
source files: >
let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
let g:ftplugin_rust_source_path = $HOME .. '/dev/rust'
<
*g:rustfmt_command*

View File

@ -109,8 +109,8 @@ must be configurable. The filetype plugin attempts to define many of the
standard objects, plus many additional ones. In order to make this as
flexible as possible, you can override the list of objects from within your
|vimrc| with the following: >
let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' .
\ ',schema,service,publication,database,datatype,domain' .
let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' ..
\ ',schema,service,publication,database,datatype,domain' ..
\ ',index,subscription,synchronization,view,variable'
The following |Normal| mode and |Visual| mode maps have been created which use
@ -131,10 +131,10 @@ Repeatedly pressing ]} will cycle through each of these create statements: >
create index i1 on t1 (c1);
The default setting for g:ftplugin_sql_objects is: >
let g:ftplugin_sql_objects = 'function,procedure,event,' .
\ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
\ 'table,trigger' .
\ ',schema,service,publication,database,datatype,domain' .
let g:ftplugin_sql_objects = 'function,procedure,event,' ..
\ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' ..
\ 'table,trigger' ..
\ ',schema,service,publication,database,datatype,domain' ..
\ ',index,subscription,synchronization,view,variable'
The above will also handle these cases: >

View File

@ -155,8 +155,8 @@ If you are running the X Window System, you can get information about the
window Vim is running in with these commands: >
:!xwininfo -id $WINDOWID
:!xprop -id $WINDOWID
:execute '!xwininfo -id ' . v:windowid
:execute '!xprop -id ' . v:windowid
:execute '!xwininfo -id ' .. v:windowid
:execute '!xprop -id ' .. v:windowid
<
*gui-IME* *iBus*
Input methods for international characters in X that rely on the XIM

View File

@ -1,4 +1,4 @@
*help.txt* For Vim version 8.2. Last change: 2021 Dec 27
*help.txt* For Vim version 8.2. Last change: 2022 Feb 26
VIM - main help file
k
@ -197,6 +197,7 @@ Versions ~
|version6.txt| Differences between Vim version 5.7 and 6.x
|version7.txt| Differences between Vim version 6.4 and 7.x
|version8.txt| Differences between Vim version 7.4 and 8.x
|version9.txt| Differences between Vim version 8.2 and 9.0
*sys-file-list*
Remarks about specific systems ~
|os_390.txt| OS/390 Unix

View File

@ -1,4 +1,4 @@
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 08
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 28
VIM REFERENCE MANUAL by Sven Verdoolaege
@ -103,7 +103,7 @@ Here are some things you can try: >
:perldo $_ = reverse($_);1
:perl VIM::Msg("hello")
:perl $line = $curbuf->Get(42)
<
< *E299*
Executing Perl commands in the |sandbox| is limited. ":perldo" will not be
possible at all. ":perl" will be evaluated in the Safe environment, if
possible.

View File

@ -1,4 +1,4 @@
*if_pyth.txt* For Vim version 8.2. Last change: 2021 Nov 12
*if_pyth.txt* For Vim version 8.2. Last change: 2022 Feb 22
VIM REFERENCE MANUAL by Paul Moore
@ -25,6 +25,10 @@ The Python 3 interface is available only when Vim was compiled with the
|+python3| feature.
Both can be available at the same time, but read |python-2-and-3|.
NOTE: Python 2 is old and no longer being developed. Using Python 3 is highly
recommended. Python 2 support will be dropped when it does not work properly
anymore.
==============================================================================
1. Commands *python-commands*
@ -65,7 +69,7 @@ There is no need to import sys, it's done by default.
*python-environment*
Environment variables set in Vim are not always available in Python. This
depends on how Vim and Python were build. Also see
depends on how Vim and Python were built. Also see
https://docs.python.org/3/library/os.html#os.environ
Note: Python is very sensitive to the indenting. Make sure the "class" line
@ -834,6 +838,19 @@ To work around such problems there are these options:
Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
:py vim.command("qall!")
<
*E1266*
This error can occur when python 3 cannot load the required modules. This
means that your python 3 is not correctly installed or there are some mistakes
in your settings. Please check the following items:
1. Make sure that python 3 is correctly installed. Also check the version of
python.
2. Check the 'pythonthreedll' option.
3. Check the 'pythonthreehome' option.
4. Check the PATH environment variable if you don't set 'pythonthreedll'.
On MS-Windows, you can use where.exe to check which dll will be loaded.
E.g. >
where.exe python310.dll
5. Check the PYTHONPATH and PYTHONHOME environment variables.
*has-python*
You can test what Python version is available with: >
@ -910,7 +927,7 @@ The `:pyxdo` command works similar to `:pydo`.
*has-pythonx*
You can test if pyx* commands are available with: >
if has('pythonx')
echo 'pyx* commands are available. (Python ' . &pyx . ')'
echo 'pyx* commands are available. (Python ' .. &pyx .. ')'
endif
When compiled with only one of |+python| or |+python3|, the has() returns 1.

View File

@ -1,4 +1,4 @@
*indent.txt* For Vim version 8.2. Last change: 2019 Dec 07
*indent.txt* For Vim version 8.2. Last change: 2022 Jan 31
VIM REFERENCE MANUAL by Bram Moolenaar
@ -778,6 +778,15 @@ You can set the indent for the first line after <script> and <style>
"auto" auto indent (same indent as the blocktag)
"inc" auto indent + one indent step
You can set the indent for attributes after an open <tag line: >
:let g:html_indent_attribute = 1
<
VALUE MEANING ~
1 auto indent, one indent step more than <tag
2 auto indent, two indent steps (default)
> 2 auto indent, more indent steps
Many tags increase the indent for what follows per default (see "Add Indent
Tags" in the script). You can add further tags with: >

View File

@ -1,4 +1,4 @@
*index.txt* For Vim version 8.2. Last change: 2021 Aug 31
*index.txt* For Vim version 8.2. Last change: 2022 Feb 09
VIM REFERENCE MANUAL by Bram Moolenaar
@ -937,7 +937,9 @@ tag command note action in Visual mode ~
before the highlighted area
|v_J| J 2 join the highlighted lines
|v_K| K run 'keywordprg' on the highlighted area
|v_O| O Move horizontally to other corner of area.
|v_O| O move horizontally to other corner of area
|v_P| P replace highlighted area with register
contents; unnamed register is unchanged
Q does not start Ex mode
|v_R| R 2 delete the highlighted lines and start
insert
@ -1000,6 +1002,8 @@ tag command note action in Visual mode ~
|v_i{| i{ same as iB
|v_i}| i} same as iB
|v_o| o move cursor to other corner of area
|v_p| p replace highlighted area with register
contents; deleted text in unnamed register
|v_r| r 2 replace highlighted area with a character
|v_s| s 2 delete highlighted area and start insert
|v_u| u 2 make highlighted area lowercase
@ -1148,7 +1152,7 @@ tag command action ~
|:&| :& repeat last ":substitute"
|:star| :* execute contents of a register
|:<| :< shift lines one 'shiftwidth' left
|:=| := print the cursor line number
|:=| := print the last line number
|:>| :> shift lines one 'shiftwidth' right
|:@| :@ execute contents of a register
|:@@| :@@ repeat the previous ":@"

View File

@ -879,9 +879,9 @@ Groß): >
endif
let res = []
let h = ''
for l in systemlist('aiksaurus '.shellescape(a:base))
for l in systemlist('aiksaurus ' .. shellescape(a:base))
if l[:3] == '=== '
let h = '('.substitute(l[4:], ' =*$', ')', '')
let h = '(' .. substitute(l[4:], ' =*$', ')', '')
elseif l ==# 'Alphabetically similar known words are: '
let h = "\U0001f52e"
elseif l[0] =~ '\a' || (h ==# "\U0001f52e" && l[0] ==# "\t")
@ -1266,7 +1266,7 @@ An example that completes the names of the months: >
" find months matching with "a:base"
let res = []
for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
if m =~ '^' . a:base
if m =~ '^' .. a:base
call add(res, m)
endif
endfor
@ -1288,7 +1288,7 @@ The same, but now pretending searching for matches is slow: >
else
" find months matching with "a:base"
for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
if m =~ '^' . a:base
if m =~ '^' .. a:base
call complete_add(m)
endif
sleep 300m " simulate searching for next match

View File

@ -1,4 +1,4 @@
*map.txt* For Vim version 8.2. Last change: 2022 Jan 15
*map.txt* For Vim version 8.2. Last change: 2022 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@ -314,7 +314,7 @@ Here is an example that inserts a list number that increases: >
func ListItem()
let g:counter += 1
return g:counter . '. '
return g:counter .. '. '
endfunc
func ListReset()
@ -1411,7 +1411,7 @@ scripts.
*:command-verbose*
When 'verbose' is non-zero, listing a command will also display where it was
last defined. Example: >
last defined and any completion argument. Example: >
:verbose command TOhtml
< Name Args Range Complete Definition ~
@ -1530,6 +1530,8 @@ completion can be enabled:
-complete=custom,{func} custom completion, defined via {func}
-complete=customlist,{func} custom completion, defined via {func}
If you specify completion while there is nothing to complete (-nargs=0, the
default) then you get error *E1208* .
Note: That some completion methods might expand environment variables.
@ -1695,12 +1697,12 @@ The valid escape sequences are
Examples: >
command! -nargs=+ -complete=file MyEdit
\ for f in expand(<q-args>, 0, 1) |
\ exe '<mods> split ' . f |
\ exe '<mods> split ' .. f |
\ endfor
function! SpecialEdit(files, mods)
for f in expand(a:files, 0, 1)
exe a:mods . ' split ' . f
exe a:mods .. ' split ' .. f
endfor
endfunction
command! -nargs=+ -complete=file Sedit
@ -1776,7 +1778,7 @@ This will invoke: >
: let i = 0
: while i < argc()
: if filereadable(argv(i))
: execute "e " . argv(i)
: execute "e " .. argv(i)
: execute a:command
: endif
: let i = i + 1

View File

@ -1,4 +1,4 @@
*mbyte.txt* For Vim version 8.2. Last change: 2022 Jan 08
*mbyte.txt* For Vim version 8.2. Last change: 2022 Jan 20
VIM REFERENCE MANUAL by Bram Moolenaar et al.

View File

@ -1,4 +1,4 @@
*message.txt* For Vim version 8.2. Last change: 2022 Jan 08
*message.txt* For Vim version 8.2. Last change: 2022 Jan 26
VIM REFERENCE MANUAL by Bram Moolenaar
@ -46,13 +46,13 @@ maintains the messages or the translations. You can use this to contact the
maintainer when you spot a mistake.
If you want to find help on a specific (error) message, use the ID at the
start of the message. For example, to get help on the message: >
start of the message. For example, to get help on the message:
E72: Close error on swap file
E72: Close error on swap file ~
or (translated): >
or (translated):
E72: Errore durante chiusura swap file
E72: Errore durante chiusura swap file ~
Use: >
@ -62,6 +62,8 @@ If you are lazy, it also works without the shift key: >
:help e72
The number in this ID has no meaning.
==============================================================================
2. Error messages *error-messages* *errors*
@ -76,117 +78,116 @@ See `:messages` above.
LIST OF MESSAGES
*E222* *E228* *E232* *E293* *E298* *E304* *E317*
*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
*E323* *E341* *E473* *E570* *E685* *E292* >
Add to read buffer
makemap: Illegal mode
Cannot create BalloonEval with both message and callback
Hangul automata ERROR
block was not locked
Didn't get block nr {N}?
ml_upd_block0(): Didn't get block 0??
pointer block id wrong {N}
Updated too many blocks?
get_varp ERROR
u_undo: line numbers wrong
undo list corrupt
undo line missing
ml_get: cannot find line {N}
cannot find line {N}
line number out of range: {N} past the end
line count wrong in block {N}
Internal error
Internal error: {function}
fatal error in cs_manage_matches
Invalid count for del_bytes(): {N}
*E323* *E341* *E473* *E570* *E685* *E292*
Add to read buffer ~
makemap: Illegal mode ~
Cannot create BalloonEval with both message and callback ~
block was not locked ~
Didn't get block nr {N}? ~
ml_upd_block0(): Didn't get block 0?? ~
pointer block id wrong {N} ~
Updated too many blocks? ~
get_varp ERROR ~
u_undo: line numbers wrong ~
undo list corrupt ~
undo line missing ~
ml_get: cannot find line {N} in buffer {nr} {name} ~
line number out of range: {N} past the end ~
line count wrong in block {N} ~
Internal error: lalloc(0, ) ~
Internal error: {function} ~
Internal error in regexp ~
fatal error in cs_manage_matches ~
Invalid count for del_bytes(): {N} ~
This is an internal error. If you can reproduce it, please send in a bug
report. |bugs|
>
ATTENTION
Found a swap file by the name ...
ATTENTION ~
Found a swap file by the name ... ~
See |ATTENTION|.
*E92* >
Buffer {N} not found
*E92*
Buffer {N} not found ~
The buffer you requested does not exist. This can also happen when you have
wiped out a buffer which contains a mark or is referenced in another way.
|:bwipeout|
*E95* >
Buffer with this name already exists
*E95*
Buffer with this name already exists ~
You cannot have two buffers with exactly the same name. This includes the
path leading to the file.
*E72* >
Close error on swap file
*E72*
Close error on swap file ~
The |swap-file|, that is used to keep a copy of the edited text, could not be
closed properly. Mostly harmless.
*E169* >
Command too recursive
*E169*
Command too recursive ~
This happens when an Ex command executes an Ex command that executes an Ex
command, etc. The limit is 200 or the value of 'maxfuncdepth', whatever is
larger. When it's more there probably is an endless loop. Probably a
|:execute| or |:source| command is involved.
*E254* >
Cannot allocate color {name}
*E254*
Cannot allocate color {name} ~
The color name {name} is unknown. See |gui-colors| for a list of colors that
are available on most systems.
*E1244* >
Bad color string: {str}
*E1244*
Bad color string: {str} ~
The provided color did not conform to the pattern #rrggbb
*E458* >
Cannot allocate colormap entry, some colors may be incorrect
*E458*
Cannot allocate colormap entry, some colors may be incorrect ~
This means that there are not enough colors available for Vim. It will still
run, but some of the colors will not appear in the specified color. Try
stopping other applications that use many colors, or start them after starting
gvim.
Browsers are known to consume a lot of colors. You can avoid this with
netscape by telling it to use its own colormap: >
netscape -install
Or tell it to limit to a certain number of colors (64 should work well): >
netscape -ncols 64
This can also be done with a line in your Xdefaults file: >
Netscape*installColormap: Yes
or >
Netscape*maxImageColors: 64
<
*E79* >
Cannot expand wildcards
netscape by telling it to use its own colormap:
netscape -install ~
Or tell it to limit to a certain number of colors (64 should work well):
netscape -ncols 64 ~
This can also be done with a line in your Xdefaults file:
Netscape*installColormap: Yes ~
or
Netscape*maxImageColors: 64 ~
*E79*
Cannot expand wildcards ~
A filename contains a strange combination of characters, which causes Vim to
attempt expanding wildcards but this fails. This does NOT mean that no
matching file names could be found, but that the pattern was illegal.
*E459* >
Cannot go back to previous directory
*E459*
Cannot go back to previous directory ~
While expanding a file name, Vim failed to go back to the previously used
directory. All file names being used may be invalid now! You need to have
execute permission on the current directory.
*E190* *E212* >
Cannot open "{filename}" for writing
Can't open file for writing
*E190* *E212*
Cannot open "{filename}" for writing ~
Can't open file for writing ~
For some reason the file you are writing to cannot be created or overwritten.
The reason could be that you do not have permission to write in the directory
or the file name is not valid.
*E166* >
Can't open linked file for writing
*E166*
Can't open linked file for writing ~
You are trying to write to a file which can't be overwritten, and the file is
a link (either a hard link or a symbolic link). Writing might still be
@ -197,20 +198,20 @@ place. If you really want to write the file under this name, you have to
manually delete the link or the file, or change the permissions so that Vim
can overwrite.
*E46* >
Cannot change read-only variable "{name}"
*E46*
Cannot change read-only variable "{name}" ~
You are trying to assign a value to an argument of a function |a:var| or a Vim
internal variable |v:var| which is read-only.
*E90* >
Cannot unload last buffer
*E90*
Cannot unload last buffer ~
Vim always requires one buffer to be loaded, otherwise there would be nothing
to display in the window.
*E40* >
Can't open errorfile <filename>
*E40*
Can't open errorfile <filename> ~
When using the ":make" or ":grep" commands: The file used to save the error
messages or grep output cannot be opened. This can have several causes:
@ -222,8 +223,8 @@ messages or grep output cannot be opened. This can have several causes:
- The 'grepprg' or 'makeprg' could not be executed. This cannot always be
detected (especially on MS-Windows). Check your $PATH.
>
Can't open file C:\TEMP\VIoD243.TMP
Can't open file C:\TEMP\VIoD243.TMP ~
On MS-Windows, this message appears when the output of an external command was
to be read, but the command didn't run successfully. This can be caused by
@ -231,21 +232,21 @@ many things. Check the 'shell', 'shellquote', 'shellxquote', 'shellslash' and
related options. It might also be that the external command was not found,
there is no different error message for that.
*E12* >
Command not allowed from exrc/vimrc in current dir or tag search
*E12*
Command not allowed from exrc/vimrc in current dir or tag search ~
Some commands are not allowed for security reasons. These commands mostly
come from a .exrc or .vimrc file in the current directory, or from a tags
file. Also see 'secure'.
*E74* >
Command too complex
*E74*
Command too complex ~
A mapping resulted in a very long command string. Could be caused by a
mapping that indirectly calls itself.
>
CONVERSION ERROR
CONVERSION ERROR ~
When writing a file and the text "CONVERSION ERROR" appears, this means that
some bits were lost when converting text from the internally used UTF-8 to the
@ -257,51 +258,51 @@ If there is a backup file, when 'writebackup' or 'backup' is set, it will not
be deleted, so you can move it back into place if you want to discard the
changes.
*E302* >
Could not rename swap file
*E302*
Could not rename swap file ~
When the file name changes, Vim tries to rename the |swap-file| as well.
This failed and the old swap file is now still used. Mostly harmless.
*E43* *E44* >
Damaged match string
Corrupted regexp program
*E43* *E44*
Damaged match string ~
Corrupted regexp program ~
Something inside Vim went wrong and resulted in a corrupted regexp. If you
know how to reproduce this problem, please report it. |bugs|
*E208* *E209* *E210* >
Error writing to "{filename}"
Error closing "{filename}"
Error reading "{filename}"
*E208* *E209* *E210*
Error writing to "{filename}" ~
Error closing "{filename}" ~
Error reading "{filename}" ~
This occurs when Vim is trying to rename a file, but a simple change of file
name doesn't work. Then the file will be copied, but somehow this failed.
The result may be that both the original file and the destination file exist
and the destination file may be incomplete.
>
Vim: Error reading input, exiting...
Vim: Error reading input, exiting... ~
This occurs when Vim cannot read typed characters while input is required.
Vim got stuck, the only thing it can do is exit. This can happen when both
stdin and stderr are redirected and executing a script that doesn't exit Vim.
*E47* >
Error while reading errorfile
*E47*
Error while reading errorfile ~
Reading the error file was not possible. This is NOT caused by an error
message that was not recognized.
*E80* >
Error while writing
*E80*
Error while writing ~
Writing a file was not completed successfully. The file is probably
incomplete.
*E13* *E189* >
File exists (add ! to override)
"{filename}" exists (add ! to override)
*E13* *E189*
File exists (add ! to override) ~
"{filename}" exists (add ! to override) ~
You are protected from accidentally overwriting a file. When you want to
write anyway, use the same command, but add a "!" just after the command.
@ -310,8 +311,8 @@ Example: >
changes to: >
:w! /tmp/test
<
*E768* >
Swap file exists: {filename} (:silent! overrides)
*E768*
Swap file exists: {filename} (:silent! overrides) ~
You are protected from overwriting a file that is being edited by Vim. This
happens when you use ":w! filename" and a swapfile is found.
@ -323,115 +324,115 @@ happens when you use ":w! filename" and a swapfile is found.
< The special command is needed, since you already added the ! for overwriting
an existing file.
*E139* >
File is loaded in another buffer
*E139*
File is loaded in another buffer ~
You are trying to write a file under a name which is also used in another
buffer. This would result in two versions of the same file.
*E142* >
File not written: Writing is disabled by 'write' option
*E142*
File not written: Writing is disabled by 'write' option ~
The 'write' option is off. This makes all commands that try to write a file
generate this message. This could be caused by a |-m| commandline argument.
You can switch the 'write' option on with ":set write".
*E25* >
GUI cannot be used: Not enabled at compile time
*E25*
GUI cannot be used: Not enabled at compile time ~
You are running a version of Vim that doesn't include the GUI code. Therefore
"gvim" and ":gui" don't work.
*E49* >
Invalid scroll size
*E49*
Invalid scroll size ~
This is caused by setting an invalid value for the 'scroll', 'scrolljump' or
'scrolloff' options.
*E17* >
"{filename}" is a directory
*E17*
"{filename}" is a directory ~
You tried to write a file with the name of a directory. This is not possible.
You probably need to append a file name.
*E19* >
Mark has invalid line number
*E19*
Mark has invalid line number ~
You are using a mark that has a line number that doesn't exist. This can
happen when you have a mark in another file, and some other program has
deleted lines from it.
*E219* *E220* >
Missing {.
Missing }.
*E219* *E220*
Missing {. ~
Missing }. ~
Using a {} construct in a file name, but there is a { without a matching } or
the other way around. It should be used like this: {foo,bar}. This matches
"foo" and "bar".
*E315* >
ml_get: invalid lnum: {number}
*E315*
ml_get: invalid lnum: {number} ~
This is an internal Vim error. Please try to find out how it can be
reproduced, and submit a bug report |bugreport.vim|.
*E173* >
{number} more files to edit
*E173*
{number} more files to edit ~
You are trying to exit, while the last item in the argument list has not been
edited. This protects you from accidentally exiting when you still have more
files to work on. See |argument-list|. If you do want to exit, just do it
again and it will work.
*E23* *E194* >
No alternate file
No alternate file name to substitute for '#'
*E23* *E194*
No alternate file ~
No alternate file name to substitute for '#' ~
The alternate file is not defined yet. See |alternate-file|.
*E32* >
No file name
*E32*
No file name ~
The current buffer has no name. To write it, use ":w fname". Or give the
buffer a name with ":file fname".
*E141* >
No file name for buffer {number}
*E141*
No file name for buffer {number} ~
One of the buffers that was changed does not have a file name. Therefore it
cannot be written. You need to give the buffer a file name: >
:buffer {number}
:file {filename}
<
*E33* >
No previous substitute regular expression
*E33*
No previous substitute regular expression ~
When using the '~' character in a pattern, it is replaced with the previously
used pattern in a ":substitute" command. This fails when no such command has
been used yet. See |/~|. This also happens when using ":s/pat/%/", where the
"%" stands for the previous substitute string.
*E35* >
No previous regular expression
*E35*
No previous regular expression ~
When using an empty search pattern, the previous search pattern is used. But
that is not possible if there was no previous search.
*E24* >
No such abbreviation
*E24*
No such abbreviation ~
You have used an ":unabbreviate" command with an argument which is not an
existing abbreviation. All variations of this command give the same message:
":cunabbrev", ":iunabbrev", etc. Check for trailing white space.
>
/dev/dsp: No such file or directory
/dev/dsp: No such file or directory ~
Only given for GTK GUI with Gnome support. Gnome tries to use the audio
device and it isn't present. You can ignore this error.
*E31* >
No such mapping
*E31*
No such mapping ~
You have used an ":unmap" command with an argument which is not an existing
mapping. All variations of this command give the same message: ":cunmap",
@ -440,9 +441,9 @@ mapping. All variations of this command give the same message: ":cunmap",
- If the mapping is buffer-local you need to use ":unmap <buffer>".
|:map-<buffer>|
*E37* *E89* >
No write since last change (add ! to override)
No write since last change for buffer {N} (add ! to override)
*E37* *E89*
No write since last change (add ! to override) ~
No write since last change for buffer {N} (add ! to override) ~
You are trying to |abandon| a file that has changes. Vim protects you from
losing your work. You can either write the changed file with ":w", or, if you
@ -452,8 +453,8 @@ adding a '!' character just after the command you used. Example: >
changes to: >
:e! other_file
<
*E162* >
No write since last change for buffer "{name}"
*E162*
No write since last change for buffer "{name}" ~
This appears when you try to exit Vim while some buffers are changed. You
will either have to write the changed buffer (with |:w|), or use a command to
@ -461,23 +462,23 @@ abandon the buffer forcefully, e.g., with ":qa!". Careful, make sure you
don't throw away changes you really want to keep. You might have forgotten
about a buffer, especially when 'hidden' is set.
>
[No write since last change]
[No write since last change] ~
This appears when executing a shell command while at least one buffer was
changed. To avoid the message reset the 'warn' option.
*E38* >
Null argument
*E38*
Null argument ~
Something inside Vim went wrong and resulted in a NULL pointer. If you know
how to reproduce this problem, please report it. |bugs|
*E41* *E82* *E83* *E342* >
Out of memory!
Out of memory! (allocating {number} bytes)
Cannot allocate any buffer, exiting...
Cannot allocate buffer, using other one...
*E41* *E82* *E83* *E342*
Out of memory! ~
Out of memory! (allocating {number} bytes) ~
Cannot allocate any buffer, exiting... ~
Cannot allocate buffer, using other one... ~
Oh, oh. You must have been doing something complicated, or some other program
is consuming your memory. Be careful! Vim is not completely prepared for an
@ -495,16 +496,16 @@ in memory, you can reduce that with these options:
helps for a change that affects all lines.
- 'undoreload' Set to zero to disable.
*E339* >
Pattern too long
*E339*
Pattern too long ~
This happens on systems with 16 bit ints: The compiled regexp pattern is
longer than about 65000 characters. Try using a shorter pattern.
It also happens when the offset of a rule doesn't fit in the space available.
Try simplifying the pattern.
*E45* >
'readonly' option is set (add ! to override)
*E45*
'readonly' option is set (add ! to override) ~
You are trying to write a file that was marked as read-only. To write the
file anyway, either reset the 'readonly' option, or add a '!' character just
@ -513,18 +514,18 @@ after the command you used. Example: >
changes to: >
:w!
<
*E294* *E295* *E301* >
Read error in swap file
Seek error in swap file read
Oops, lost the swap file!!!
*E294* *E295* *E301*
Read error in swap file ~
Seek error in swap file read ~
Oops, lost the swap file!!! ~
Vim tried to read text from the |swap-file|, but something went wrong. The
text in the related buffer may now be corrupted! Check carefully before you
write a buffer. You may want to write it in another file and check for
differences.
*E192* >
Recursive use of :normal too deep
*E192*
Recursive use of :normal too deep ~
You are using a ":normal" command, whose argument again uses a ":normal"
command in a recursive way. This is restricted to 'maxmapdepth' levels. This
@ -532,16 +533,16 @@ example illustrates how to get this message: >
:map gq :normal gq<CR>
If you type "gq", it will execute this mapping, which will call "gq" again.
*E22* >
Scripts nested too deep
*E22*
Scripts nested too deep ~
Scripts can be read with the "-s" command-line argument and with the
`:source!` command. The script can then again read another script. This can
continue for about 14 levels. When more nesting is done, Vim assumes that
there is a recursive loop and stops with this error message.
*E319* >
Sorry, the command is not available in this version
*E319*
Sorry, the command is not available in this version ~
You have used a command that is not present in the version of Vim you are
using. When compiling Vim, many different features can be enabled or
@ -549,8 +550,8 @@ disabled. This depends on how big Vim has chosen to be and the operating
system. See |+feature-list| for when which feature is available. The
|:version| command shows which feature Vim was compiled with.
*E300* >
Swap file already exists (symlink attack?)
*E300*
Swap file already exists (symlink attack?) ~
This message appears when Vim is trying to open a swap file and finds it
already exists or finds a symbolic link in its place. This shouldn't happen,
@ -559,8 +560,8 @@ opened the same file at exactly the same moment (very unlikely) or someone is
attempting a symlink attack (could happen when editing a file in /tmp or when
'directory' starts with "/tmp", which is a bad choice).
*E432* >
Tags file not sorted: {file name}
*E432*
Tags file not sorted: {file name} ~
Vim (and Vi) expect tags files to be sorted in ASCII order. Binary searching
can then be used, which is a lot faster than a linear search. If your tags
@ -569,21 +570,21 @@ This message is only given when Vim detects a problem when searching for a
tag. Sometimes this message is not given, even though the tags file is not
properly sorted.
*E424* >
Too many different highlighting attributes in use
*E424*
Too many different highlighting attributes in use ~
Vim can only handle about 223 different kinds of highlighting. If you run
into this limit, you have used too many |:highlight| commands with different
arguments. A ":highlight link" is not counted.
*E77* >
Too many file names
*E77*
Too many file names ~
When expanding file names, more than one match was found. Only one match is
allowed for the command that was used.
*E303* >
Unable to open swap file for "{filename}", recovery impossible
*E303*
Unable to open swap file for "{filename}", recovery impossible ~
Vim was not able to create a swap file. You can still edit the file, but if
Vim unexpectedly exits the changes will be lost. And Vim may consume a lot of
@ -591,25 +592,25 @@ memory when editing a big file. You may want to change the 'directory' option
to avoid this error. This error is not given when 'directory' is empty. See
|swap-file|.
*E140* >
Use ! to write partial buffer
*E140*
Use ! to write partial buffer ~
When using a range to write part of a buffer, it is unusual to overwrite the
original file. It is probably a mistake (e.g., when Visual mode was active
when using ":w"), therefore Vim requires using a ! after the command, e.g.:
":3,10w!".
>
Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type
VirtualBinding
Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type ~
VirtualBinding ~
Messages like this appear when starting up. This is not a Vim problem, your
X11 configuration is wrong. You can find a hint on how to solve this here:
http://groups.yahoo.com/group/solarisonintel/message/12179.
[this URL is no longer valid]
*W10* >
Warning: Changing a readonly file
*W10*
Warning: Changing a readonly file ~
The file is read-only and you are making a change to it anyway. You can use
the |FileChangedRO| autocommand event to avoid this message (the autocommand
@ -617,15 +618,15 @@ must reset the 'readonly' option). See 'modifiable' to completely disallow
making changes to a file.
This message is only given for the first change after 'readonly' has been set.
*W13* >
Warning: File "{filename}" has been created after editing started
*W13*
Warning: File "{filename}" has been created after editing started ~
You are editing a file in Vim when it didn't exist, but it does exist now.
You will have to decide if you want to keep the version in Vim or the newly
created file. This message is not given when 'buftype' is not empty.
*W11* >
Warning: File "{filename}" has changed since editing started
*W11*
Warning: File "{filename}" has changed since editing started ~
The file which you have started editing has got another timestamp and the
contents changed (more precisely: When reading the file again with the current
@ -648,15 +649,15 @@ starts. It can be fixed in one of these ways:
If you get W11 all the time, you may need to disable "Acronis Active
Protection" or register Vim as a trusted service/application.
*W12* >
Warning: File "{filename}" has changed and the buffer was changed in Vim as well
*W12*
Warning: File "{filename}" has changed and the buffer was changed in Vim as well ~
Like the above, and the buffer for the file was changed in this Vim as well.
You will have to decide if you want to keep the version in this Vim or the one
on disk. This message is not given when 'buftype' is not empty.
*W16* >
Warning: Mode of file "{filename}" has changed since editing started
*W16*
Warning: Mode of file "{filename}" has changed since editing started ~
When the timestamp for a buffer was changed and the contents are still the
same but the mode (permissions) have changed. This usually occurs when
@ -664,37 +665,37 @@ checking out a file from a version control system, which causes the read-only
bit to be reset. It should be safe to reload the file. Set 'autoread' to
automatically reload the file.
*E211* >
File "{filename}" no longer available
*E211*
File "{filename}" no longer available ~
The file which you have started editing has disappeared, or is no longer
accessible. Make sure you write the buffer somewhere to avoid losing
changes. This message is not given when 'buftype' is not empty.
*W14* >
Warning: List of file names overflow
*W14*
Warning: List of file names overflow ~
You must be using an awful lot of buffers. It's now possible that two buffers
have the same number, which causes various problems. You might want to exit
Vim and restart it.
*E931* >
Buffer cannot be registered
*E931*
Buffer cannot be registered ~
Out of memory or a duplicate buffer number. May happen after W14. Looking up
a buffer will not always work, better restart Vim.
*E296* *E297* >
Seek error in swap file write
Write error in swap file
*E296* *E297*
Seek error in swap file write ~
Write error in swap file ~
This mostly happens when the disk is full. Vim could not write text into the
|swap-file|. It's not directly harmful, but when Vim unexpectedly exits some
text may be lost without recovery being possible. Vim might run out of memory
when this problem persists.
*connection-refused* >
Xlib: connection to "<machine-name:0.0" refused by server
*connection-refused*
Xlib: connection to "<machine-name:0.0" refused by server ~
This happens when Vim tries to connect to the X server, but the X server does
not allow a connection. The connection to the X server is needed to be able
@ -702,55 +703,56 @@ to restore the title and for the xterm clipboard support. Unfortunately this
error message cannot be avoided, except by disabling the |+xterm_clipboard|
and |+X11| features.
*E10* >
\\ should be followed by /, ? or &
*E10*
\\ should be followed by /, ? or & ~
A command line started with a backslash or the range of a command contained a
backslash in a wrong place. This is often caused by command-line continuation
being disabled. Remove the 'C' flag from the 'cpoptions' option to enable it.
Or use ":set nocp".
*E471* >
Argument required
*E471*
Argument required ~
This happens when an Ex command with mandatory argument(s) was executed, but
no argument has been specified.
*E474* *E475* *E983* >
Invalid argument
Invalid argument: {arg}
Duplicate argument: {arg}
*E474* *E475* *E983*
Invalid argument ~
Invalid argument: {arg} ~
Duplicate argument: {arg} ~
An Ex command or function has been executed, but an invalid argument has been
specified.
*E488* >
Trailing characters
*E488*
Trailing characters ~
Trailing characters: {text} ~
An argument has been added to an Ex command that does not permit one.
Or the argument has invalid characters and has not been recognized.
*E477* *E478* >
No ! allowed
Don't panic!
*E477* *E478*
No ! allowed ~
Don't panic! ~
You have added a "!" after an Ex command that doesn't permit one.
*E481* >
No range allowed
*E481*
No range allowed ~
A range was specified for an Ex command that doesn't permit one. See
|cmdline-ranges|.
*E482* *E483* >
Can't create file {filename}
Can't get temp file name
*E482* *E483*
Can't create file {filename} ~
Can't get temp file name ~
Vim cannot create a temporary file.
*E484* *E485* >
Can't open file {filename}
Can't read file {filename}
*E484* *E485*
Can't open file {filename} ~
Can't read file {filename} ~
Vim cannot read a temporary file. Especially on Windows, this can be caused
by wrong escaping of special characters for cmd.exe; the approach was
@ -758,8 +760,8 @@ changed with patch 7.3.443. Try using |shellescape()| for all shell arguments
given to |system()|, or explicitly add escaping with ^. Also see
'shellxquote' and 'shellxescape'.
*E464* >
Ambiguous use of user-defined command
*E464*
Ambiguous use of user-defined command ~
There are two user-defined commands with a common name prefix, and you used
Command-line completion to execute one of them. |user-cmd-ambiguous|
@ -768,23 +770,22 @@ Example: >
:command MyCommand2 echo "two"
:MyCommand
<
*E492* >
Not an editor command
*E492*
Not an editor command ~
You tried to execute a command that is neither an Ex command nor
a user-defined command.
*E943* >
Command table needs to be updated, run 'make cmdidxs'
*E943*
Command table needs to be updated, run 'make cmdidxs' ~
This can only happen when changing the source code, when adding a command in
src/ex_cmds.h. The lookup table then needs to be updated, by running: >
make cmdidxs
<
*E928* *E889* *E839* >
E928: String required
E889: Number required
E839: Bool required
*E928* *E889*
E928: String required ~
E889: Number required ~
These happen when a value or expression is used that does not have the
expected type.
@ -797,7 +798,7 @@ This is an (incomplete) overview of various messages that Vim gives:
*hit-enter* *press-enter* *hit-return*
*press-return* *hit-enter-prompt*
Press ENTER or type command to continue
Press ENTER or type command to continue ~
This message is given when there is something on the screen for you to read,
and the screen is about to be redrawn:
@ -841,9 +842,9 @@ Also see 'mouse'. The hit-enter message is highlighted with the |hl-Question|
group.
*more-prompt* *pager* >
-- More --
-- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit
*more-prompt* *pager*
-- More -- ~
-- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit ~
This message is given when the screen is filled with messages. It is only
given when the 'more' option is on. It is highlighted with the |hl-MoreMsg|

View File

@ -1019,7 +1019,7 @@ These commands are not marks themselves, but jump to a mark:
:let lnum = line(".")
:keepjumps normal gg
:call SetLastChange()
:keepjumps exe "normal " . lnum . "G"
:keepjumps exe "normal " .. lnum .. "G"
<
Note that ":keepjumps" must be used for every command.
When invoking a function the commands in that function

View File

@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2022 Jan 02
*options.txt* For Vim version 8.2. Last change: 2022 Feb 18
VIM REFERENCE MANUAL by Bram Moolenaar
@ -170,7 +170,7 @@ When a key code is not set, it's like it does not exist. Trying to get its
value will result in an error: >
:set t_kb=
:set t_kb
E846: Key code not set: t_kb
< E846: Key code not set: t_kb ~
The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
@ -383,12 +383,22 @@ lambda it will be converted to the name, e.g. "<lambda>123". Examples:
set opfunc=function('MyOpFunc')
set opfunc=funcref('MyOpFunc')
set opfunc={a\ ->\ MyOpFunc(a)}
" set using a funcref variable
Set to a script-local function: >
set opfunc=s:MyLocalFunc
set opfunc=<SID>MyLocalFunc
In |Vim9| script the "s:" and "<SID>" can be omitted if the function exists in
the script: >
set opfunc=MyLocalFunc
Set using a funcref variable: >
let Fn = function('MyTagFunc')
let &tagfunc = Fn
" set using a lambda expression
Set using a lambda expression: >
let &tagfunc = {t -> MyTagFunc(t)}
" set using a variable with lambda expression
Set using a variable with lambda expression: >
let L = {a, b, c -> MyTagFunc(a, b , c)}
let &tagfunc = L
@ -800,6 +810,7 @@ A jump table for the options with a short description can be found at |Q_op|.
need proper setting-up, so whenever the shell's pwd changes an OSC 7
escape sequence will be emitted. For example, on Linux, you can source
/etc/profile.d/vte.sh in your shell profile if you use bash or zsh.
When the parsing of the OSC sequence fails you get *E1179* .
*'arabic'* *'arab'* *'noarabic'* *'noarab'*
'arabic' 'arab' boolean (default off)
@ -1131,7 +1142,7 @@ A jump table for the options with a short description can be found at |Q_op|.
If you like to keep a lot of backups, you could use a BufWritePre
autocommand to change 'backupext' just before writing the file to
include a timestamp. >
:au BufWritePre * let &bex = '-' . strftime("%Y%b%d%X") . '~'
:au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~'
< Use 'backupdir' to put the backup in a different directory.
*'backupskip'* *'bsk'*
@ -1156,7 +1167,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Note that environment variables are not expanded. If you want to use
$HOME you must expand it explicitly, e.g.: >
:let &backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
:let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*'
< Note that the default also makes sure that "crontab -e" works (when a
backup would be made by renaming the original file crontab won't see
@ -1207,10 +1218,10 @@ A jump table for the options with a short description can be found at |Q_op|.
The evaluation of the expression must not have side effects!
Example: >
function MyBalloonExpr()
return 'Cursor is at line ' . v:beval_lnum .
\', column ' . v:beval_col .
\ ' of file ' . bufname(v:beval_bufnr) .
\ ' on word "' . v:beval_text . '"'
return 'Cursor is at line ' .. v:beval_lnum ..
\ ', column ' .. v:beval_col ..
\ ' of file ' .. bufname(v:beval_bufnr) ..
\ ' on word "' .. v:beval_text .. '"'
endfunction
set bexpr=MyBalloonExpr()
set ballooneval
@ -1229,7 +1240,9 @@ A jump table for the options with a short description can be found at |Q_op|.
the script ID (|local-function|). Example: >
set bexpr=s:MyBalloonExpr()
set bexpr=<SID>SomeBalloonExpr()
<
< Otherwise, the expression is evaluated in the context of the script
where the option was set, thus script-local items are available.
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|.
This option cannot be set in a modeline when 'modelineexpr' is off.
@ -1524,7 +1537,7 @@ A jump table for the options with a short description can be found at |Q_op|.
If the default value taken from $CDPATH is not what you want, include
a modified version of the following command in your vimrc file to
override it: >
:let &cdpath = ',' . substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
:let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
< This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
(parts of 'cdpath' can be passed to the shell to expand file names).
@ -1556,8 +1569,8 @@ A jump table for the options with a short description can be found at |Q_op|.
preferred, because it is much faster.
'charconvert' is not used when reading stdin |--|, because there is no
file to convert from. You will have to save the text in a file first.
The expression must return zero or an empty string for success,
non-zero for failure.
The expression must return zero, false or an empty string for success,
non-zero or true for failure.
The possible encoding names encountered are in 'encoding'.
Additionally, names given in 'fileencodings' and 'fileencoding' are
used.
@ -1569,8 +1582,8 @@ A jump table for the options with a short description can be found at |Q_op|.
set charconvert=CharConvert()
fun CharConvert()
system("recode "
\ . v:charconvert_from . ".." . v:charconvert_to
\ . " <" . v:fname_in . " >" v:fname_out)
\ .. v:charconvert_from .. ".." .. v:charconvert_to
\ .. " <" .. v:fname_in .. " >" .. v:fname_out)
return v:shell_error
endfun
< The related Vim variables are:
@ -1581,9 +1594,18 @@ A jump table for the options with a short description can be found at |Q_op|.
Note that v:fname_in and v:fname_out will never be the same.
Note that v:charconvert_from and v:charconvert_to may be different
from 'encoding'. Vim internally uses UTF-8 instead of UCS-2 or UCS-4.
Encryption is not done by Vim when using 'charconvert'. If you want
to encrypt the file after conversion, 'charconvert' should take care
of this.
If the 'charconvert' expression starts with s: or |<SID>|, then it is
replaced with the script ID (|local-function|). Example: >
set charconvert=s:MyConvert()
set charconvert=<SID>SomeConvert()
< Otherwise the expression is evaluated in the context of the script
where the option was set, thus script-local items are available.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
@ -2465,7 +2487,7 @@ A jump table for the options with a short description can be found at |Q_op|.
you write the file the encrypted bytes will be
different. The whole undo file is encrypted, not just
the pieces of text.
*E1193* *E1194* *E1195* *E1196*
*E1193* *E1194* *E1195* *E1196* *E1230*
*E1197* *E1198* *E1199* *E1200* *E1201*
xchacha20 XChaCha20 Cipher with Poly1305 Message Authentication
Code. Medium strong till strong encryption.
@ -3439,7 +3461,9 @@ A jump table for the options with a short description can be found at |Q_op|.
{not available when compiled without the |+folding|
or |+eval| features}
The expression used for when 'foldmethod' is "expr". It is evaluated
for each line to obtain its fold level. See |fold-expr|.
for each line to obtain its fold level. The context is set to the
script where 'foldexpr' was set, script-local items can be accessed.
See |fold-expr| for the usage.
The expression will be evaluated in the |sandbox| if set from a
modeline, see |sandbox-option|.
@ -3573,7 +3597,9 @@ A jump table for the options with a short description can be found at |Q_op|.
{not available when compiled without the |+folding|
feature}
An expression which is used to specify the text displayed for a closed
fold. See |fold-foldtext|.
fold. The context is set to the script where 'foldexpr' was set,
script-local items can be accessed. See |fold-foldtext| for the
usage.
The expression will be evaluated in the |sandbox| if set from a
modeline, see |sandbox-option|.
@ -3616,7 +3642,9 @@ A jump table for the options with a short description can be found at |Q_op|.
the script ID (|local-function|). Example: >
set formatexpr=s:MyFormatExpr()
set formatexpr=<SID>SomeFormatExpr()
<
< Otherwise, the expression is evaluated in the context of the script
where the option was set, thus script-local items are available.
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|. That stops the option from working,
since changing the buffer text is not allowed.
@ -4010,7 +4038,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'guitablabel' 'gtl' string (default empty)
global
{only available when compiled with GUI enabled}
When nonempty describes the text to use in a label of the GUI tab
When non-empty describes the text to use in a label of the GUI tab
pages line. When empty and when the result is empty Vim will use a
default label. See |setting-guitablabel| for more info.
@ -4028,7 +4056,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'guitabtooltip' 'gtt' string (default empty)
global
{only available when compiled with GUI enabled}
When nonempty describes the text to use in a tooltip for the GUI tab
When non-empty describes the text to use in a tooltip for the GUI tab
pages line. When empty Vim will use a default tooltip.
This option is otherwise just like 'guitablabel' above.
You can include a line break. Simplest method is to use |:let|: >
@ -4463,7 +4491,9 @@ A jump table for the options with a short description can be found at |Q_op|.
the script ID (|local-function|). Example: >
set includeexpr=s:MyIncludeExpr(v:fname)
set includeexpr=<SID>SomeIncludeExpr(v:fname)
<
< Otherwise, the expression is evaluated in the context of the script
where the option was set, thus script-local items are available.
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|.
This option cannot be set in a modeline when 'modelineexpr' is off.
@ -4537,11 +4567,14 @@ A jump table for the options with a short description can be found at |Q_op|.
The expression is evaluated with |v:lnum| set to the line number for
which the indent is to be computed. The cursor is also in this line
when the expression is evaluated (but it may be moved around).
If the expression starts with s: or |<SID>|, then it is replaced with
the script ID (|local-function|). Example: >
set indentexpr=s:MyIndentExpr()
set indentexpr=<SID>SomeIndentExpr()
<
< Otherwise, the expression is evaluated in the context of the script
where the option was set, thus script-local items are available.
The expression must return the number of spaces worth of indent. It
can return "-1" to keep the current indent (this means 'autoindent' is
used for the indent).
@ -4854,7 +4887,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|+multi_lang| features}
Language to use for menu translation. Tells which file is loaded
from the "lang" directory in 'runtimepath': >
"lang/menu_" . &langmenu . ".vim"
"lang/menu_" .. &langmenu .. ".vim"
< (without the spaces). For example, to always use the Dutch menus, no
matter what $LANG is set to: >
:set langmenu=nl_NL.ISO_8859-1
@ -5685,7 +5718,7 @@ A jump table for the options with a short description can be found at |Q_op|.
*'opendevice'* *'odev'* *'noopendevice'* *'noodev'*
'opendevice' 'odev' boolean (default off)
global
{only for MS-Windows}
{only for MS-Windows} *E796*
Enable reading and writing from devices. This may get Vim stuck on a
device that can be opened but doesn't actually do the I/O. Therefore
it is off by default.
@ -5868,7 +5901,7 @@ A jump table for the options with a short description can be found at |Q_op|.
< To use an environment variable, you probably need to replace the
separator. Here is an example to append $INCL, in which directory
names are separated with a semi-colon: >
:let &path = &path . "," . substitute($INCL, ';', ',', 'g')
:let &path = &path .. "," .. substitute($INCL, ';', ',', 'g')
< Replace the ';' with a ':' or whatever separator is used. Note that
this doesn't work when $INCL contains a comma or white space.
@ -6701,6 +6734,9 @@ A jump table for the options with a short description can be found at |Q_op|.
See |option-backslash| about including spaces and backslashes.
Environment variables are expanded |:set_env|.
In |restricted-mode| shell commands will not be possible. This mode
is used if the value of $SHELL ends in "false" or "nologin".
If the name of the shell contains a space, you need to enclose it in
quotes and escape the space. Example with quotes: >
:set shell=\"c:\program\ files\unix\sh.exe\"\ -f
@ -7350,6 +7386,12 @@ A jump table for the options with a short description can be found at |Q_op|.
suggestions is never more than the value of 'lines'
minus two.
timeout:{millisec} Limit the time searching for suggestions to
{millisec} milli seconds. Applies to the following
methods. When omitted the limit is 5000. When
negative there is no limit. {only works when built
with the +reltime feature}
file:{filename} Read file {filename}, which must have two columns,
separated by a slash. The first column contains the
bad word, the second column the suggested good word.
@ -7417,7 +7459,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global or local to window |global-local|
{not available when compiled without the |+statusline|
feature}
When nonempty, this option determines the content of the status line.
When non-empty, this option determines the content of the status line.
Also see |status-line|.
The option consists of printf style '%' items interspersed with
@ -7725,7 +7767,7 @@ A jump table for the options with a short description can be found at |Q_op|.
*'tabline'* *'tal'*
'tabline' 'tal' string (default empty)
global
When nonempty, this option determines the content of the tab pages
When non-empty, this option determines the content of the tab pages
line at the top of the Vim window. When empty Vim will use a default
tab pages line. See |setting-tabline| for more info.
@ -7758,10 +7800,11 @@ A jump table for the options with a short description can be found at |Q_op|.
'tabstop' 'ts' number (default 8)
local to buffer
Number of spaces that a <Tab> in the file counts for. Also see
|:retab| command, and 'softtabstop' option.
the |:retab| command, and the 'softtabstop' option.
Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).
appear wrong in many places, e.g., when printing it.
The value must be more than 0 and less than 10000.
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
@ -8275,7 +8318,7 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set in a modeline when 'modelineexpr' is off.
Example: >
:auto BufEnter * let &titlestring = hostname() . "/" . expand("%:p")
:auto BufEnter * let &titlestring = hostname() .. "/" .. expand("%:p")
:set title titlestring=%<%F%=%l/%L-%P titlelen=70
< The value of 'titlelen' is used to align items in the middle or right
of the available space.
@ -8941,7 +8984,8 @@ A jump table for the options with a short description can be found at |Q_op|.
mode. On pressing 'wildchar' (usually <Tab>) to invoke completion,
the possible matches are shown just above the command line, with the
first match highlighted (overwriting the status line, if there is
one). Keys that show the previous/next match, such as <Tab> or
one). This is the behavior without "pum" in 'wildoptions.
Keys that show the previous/next match, such as <Tab> or
CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
When 'wildmode' is used, "wildmenu" mode is used where "full" is
specified. "longest" and "list" do not start "wildmenu" mode.
@ -8949,10 +8993,12 @@ A jump table for the options with a short description can be found at |Q_op|.
If there are more matches than can fit in the line, a ">" is shown on
the right and/or a "<" is shown on the left. The status line scrolls
as needed.
When 'wildoptions' contains "pum", then the completion matches are
shown in a popup menu.
The "wildmenu" mode is abandoned when a key is hit that is not used
for selecting a completion.
While the "wildmenu" is active the following keys have special
meanings:
While the "wildmenu" is active, not using the popup menu, the
following keys have special meanings:
<Left> <Right> - select previous/next match (like CTRL-P/CTRL-N)
<Down> - in filename/menu name completion: move into a
@ -8962,6 +9008,21 @@ A jump table for the options with a short description can be found at |Q_op|.
<Up> - in filename/menu name completion: move up into
parent directory or parent menu.
When using the popup menu for command line completion, the following
keys have special meanings:
<Down> - select next match (like CTRL-N)
<Left> - in filename/menu name completion: move up into
parent directory or parent menu.
<Right> - in filename/menu name completion: move into a
subdirectory or submenu.
<Up> - select previous match (like CTRL-P)
CTRL-E - end completion, go back to what was there before
selecting a match.
CTRL-N - go to the next entry
CTRL-P - go to the previous entry
CTRL-Y - accept the currently selected match and stop
completion.
This makes the menus accessible from the console |console-menus|.
If you prefer the <Left> and <Right> keys to move the cursor instead
@ -9024,14 +9085,23 @@ A jump table for the options with a short description can be found at |Q_op|.
global
{not available when compiled without the |+wildignore|
feature}
A list of words that change how command line completion is done.
Currently only one word is allowed:
A list of words that change how |cmdline-completion| is done.
The following values are supported:
fuzzy Use fuzzy matching to find completion matches. When
this value is specified, wildcard expansion will not
be used for completion. The matches will be sorted by
the "best match" rather than alphabetically sorted.
This will find more matches than the wildcard
expansion. Currently fuzzy matching based completion
is not supported for file and directory names and
instead wildcard expansion is used.
pum Display the completion matches using the popupmenu
in the same style as the |ins-completion-menu|.
tagfile When using CTRL-D to list matching tags, the kind of
tag and the file of the tag is listed. Only one match
is displayed per line. Often used tag kinds are:
d #define
f function
Also see |cmdline-completion|.
*'winaltkeys'* *'wak'*
'winaltkeys' 'wak' string (default "menu")

View File

@ -603,13 +603,13 @@ program to the new diff on VMS. Add this to your .vimrc file: >
function MyDiff()
let opt = ""
if &diffopt =~ "icase"
let opt = opt . "-i "
let opt = opt .. "-i "
endif
if &diffopt =~ "iwhite"
let opt = opt . "-b "
let opt = opt .. "-b "
endif
silent execute "!mc GNU:diff.exe -a " . opt . v:fname_in . " " . v:fname_new .
\ " > " . v:fname_out
silent execute "!mc GNU:diff.exe -a " .. opt .. v:fname_in .. " " .. v:fname_new ..
\ " > " .. v:fname_out
endfunction
endif

View File

@ -1,4 +1,4 @@
*os_win32.txt* For Vim version 8.2. Last change: 2021 Apr 05
*os_win32.txt* For Vim version 8.2. Last change: 2022 Feb 14
VIM REFERENCE MANUAL by George Reilly
@ -294,7 +294,7 @@ A. When using :! to run an external command, you can run it with "start". For
/b no console window will be opened
You can use only one of these flags at a time. A second one will be
treated as the start of the command.
*windows-asynchronously*
Q. How do I avoid getting a window for programs that I run asynchronously?
A. You have two possible solutions depending on what you want:
1) You may use the /min flag in order to run program in a minimized state
@ -308,17 +308,17 @@ A. You have two possible solutions depending on what you want:
Example for a console application, run Exuberant ctags: >
:!start /min ctags -R .
< When it has finished you should see file named "tags" in your current
< When it has finished you should see file named "tags" in your current
directory. You should notice the window title blinking on your taskbar.
This is more noticeable for commands that take longer.
Now delete the "tags" file and run this command: >
:!start /b ctags -R .
< You should have the same "tags" file, but this time there will be no
< You should have the same "tags" file, but this time there will be no
blinking on the taskbar.
Example for a GUI application: >
:!start /min notepad
:!start /b notepad
< The first command runs notepad minimized and the second one runs it
< The first command runs notepad minimized and the second one runs it
normally.
*windows-icon*

View File

@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.2. Last change: 2022 Jan 08
*pattern.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@ -925,7 +925,7 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
becomes invalid. Vim doesn't automatically update the matches.
Similar to moving the cursor for "\%#" |/\%#|.
*/\%l* */\%>l* */\%<l* *E951*
*/\%l* */\%>l* */\%<l* *E951* *E1204*
\%23l Matches in a specific line.
\%<23l Matches above a specific line (lower line number).
\%>23l Matches below a specific line (higher line number).
@ -963,7 +963,7 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
the cursor moves the display isn't updated for this change. An update
is done when using the |CTRL-L| command (the whole screen is updated).
Example, to highlight the column where the cursor currently is: >
:exe '/\%' . col(".") . 'c'
:exe '/\%' .. col(".") .. 'c'
< Alternatively use: >
/\%.c
< When 'hlsearch' is set and you move the cursor around and make changes

View File

@ -968,7 +968,7 @@ itself:
fun! NetReadFixup(method, line1, line2)
if method == 3 " ftp (no <.netrc>)
let fourblanklines= line2 - 3
silent fourblanklines.",".line2."g/^\s*/d"
silent fourblanklines .. "," .. line2 .. "g/^\s*/d"
endif
endfunction
endif
@ -1975,7 +1975,7 @@ To use this function, simply assign its output to |g:netrw_list_hide| option. >
Example: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file')
Function can take additional files with git-ignore patterns.
Example: g:netrw_list_hide= netrw_gitignore#Hide() . '.*\.swp$'
Example: let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$'
Combining 'netrw_gitignore#Hide' with custom patterns.
<
@ -2825,7 +2825,7 @@ your browsing preferences. (see also: |netrw-settings|)
Examples:
let g:netrw_list_hide= '.*\.swp$'
let g:netrw_list_hide= netrw_gitignore#Hide().'.*\.swp$'
let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$'
default: ""
*g:netrw_localcopycmd* ="cp" Linux/Unix/MacOS/Cygwin

View File

@ -1,4 +1,4 @@
*print.txt* For Vim version 8.2. Last change: 2021 Oct 04
*print.txt* For Vim version 8.2. Last change: 2022 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@ -139,28 +139,28 @@ If there is no error, return zero or an empty string.
The default for non MS-Windows or VMS systems is to simply use "lpr" to print
the file: >
system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice)
. ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error
system('lpr' .. (&printdevice == '' ? '' : ' -P' .. &printdevice)
.. ' ' .. v:fname_in) .. delete(v:fname_in) + v:shell_error
On MS-Windows machines the default is to copy the file to the currently
specified printdevice: >
system('copy' . ' ' . v:fname_in . (&printdevice == ''
? ' LPT1:' : (' \"' . &printdevice . '\"')))
. delete(v:fname_in)
system('copy' .. ' ' .. v:fname_in .. (&printdevice == ''
? ' LPT1:' : (' \"' .. &printdevice .. '\"')))
.. delete(v:fname_in)
On VMS machines the default is to send the file to either the default or
currently specified printdevice: >
system('print' . (&printdevice == '' ? '' : ' /queue=' .
&printdevice) . ' ' . v:fname_in) . delete(v:fname_in)
system('print' .. (&printdevice == '' ? '' : ' /queue=' ..
&printdevice) .. ' ' .. v:fname_in) .. delete(v:fname_in)
If you change this option, using a function is an easy way to avoid having to
escape all the spaces. Example: >
:set printexpr=PrintFile(v:fname_in)
:function PrintFile(fname)
: call system("ghostview " . a:fname)
: call system("ghostview " .. a:fname)
: call delete(a:fname)
: return v:shell_error
:endfunc
@ -178,7 +178,9 @@ If the expression starts with s: or |<SID>|, then it is replaced with the
script ID (|local-function|). Example: >
set printexpr=s:MyPrintFile()
set printexpr=<SID>SomePrintFile()
<
Otherwise, the expression is evaluated in the context of the script where the
option was set, thus script-local items are available.
This option cannot be set from a |modeline| or in the |sandbox|, for security
reasons.

View File

@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 8.2. Last change: 2022 Jan 04
*quickfix.txt* For Vim version 8.2. Last change: 2022 Feb 22
VIM REFERENCE MANUAL by Bram Moolenaar
@ -353,7 +353,7 @@ processing a quickfix or location list command, it will be aborted.
cursor position will not be changed. See |:cexpr| for
more information.
Example: >
:g/mypattern/caddexpr expand("%") . ":" . line(".") . ":" . getline(".")
:g/mypattern/caddexpr expand("%") .. ":" .. line(".") .. ":" .. getline(".")
<
*:lad* *:addd* *:laddexpr*
:lad[dexpr] {expr} Same as ":caddexpr", except the location list for the
@ -654,6 +654,24 @@ quickfix window. If there already is a window for that file, it is used
instead. If the buffer in the used window has changed, and the error is in
another file, jumping to the error will fail. You will first have to make
sure the window contains a buffer which can be abandoned.
The following steps are used to find a window to open the file selected from
the quickfix window:
1. If 'switchbuf' contains "usetab", then find a window in any tabpage
(starting with the first tabpage) that has the selected file and jump to
it.
2. Otherwise find a window displaying the selected file in the current tab
page (starting with the window before the quickfix window) and use it.
3. Otherwise find a window displaying a normal buffer ('buftype' is empty)
starting with the window before the quickfix window. If a window is found,
open the file in that window.
4. If a usable window is not found and 'switchbuf' contains "uselast", then
open the file in the last used window.
5. Otherwise open the file in the window before the quickfix window. If there
is no previous window, then open the file in the next window.
6. If a usable window is not found in the above steps, then create a new
horizontally split window above the quickfix window and open the file.
*CTRL-W_<Enter>* *CTRL-W_<CR>*
You can use CTRL-W <Enter> to open a new window and jump to the error there.
@ -663,7 +681,7 @@ FileType event (also see |qf.vim|). Then the BufReadPost event is triggered,
using "quickfix" for the buffer name. This can be used to perform some action
on the listed errors. Example: >
au BufReadPost quickfix setlocal modifiable
\ | silent exe 'g/^/s//\=line(".")." "/'
\ | silent exe 'g/^/s//\=line(".") .. " "/'
\ | setlocal nomodifiable
This prepends the line number to each line. Note the use of "\=" in the
substitute string of the ":s" command, which is used to evaluate an
@ -1385,12 +1403,17 @@ Basic items
%f file name (finds a string)
%o module name (finds a string)
%l line number (finds a number)
%e end line number (finds a number)
%c column number (finds a number representing character
column of the error, byte index, a <tab> is 1
character column)
%v virtual column number (finds a number representing
screen column of the error (1 <tab> == 8 screen
columns))
%k end column number (finds a number representing
the character column of the error, byte index, or a
number representing screen end column of the error if
it's used with %v)
%t error type (finds a single character):
e - error message
w - warning message

View File

@ -1,4 +1,4 @@
*remote.txt* For Vim version 8.2. Last change: 2021 Dec 27
*remote.txt* For Vim version 8.2. Last change: 2022 Feb 17
VIM REFERENCE MANUAL by Bram Moolenaar
@ -120,6 +120,10 @@ when sending command to it.
The --serverlist argument will cause Vim to print a list of registered command
servers on the standard output (stdout) and exit.
*{server}*
The {server} argument is used by several functions. When this is an empty
string then on Unix the default server name is used, which is "GVIM". On
MS-Windows an empty string does not work.
Win32 Note: Making the Vim server go to the foreground doesn't always work,
because MS-Windows doesn't allow it. The client will move the server to the

View File

@ -1,4 +1,4 @@
*repeat.txt* For Vim version 8.2. Last change: 2022 Jan 09
*repeat.txt* For Vim version 8.2. Last change: 2022 Jan 21
VIM REFERENCE MANUAL by Bram Moolenaar
@ -354,7 +354,7 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
<
:scriptv[ersion] {version} *:scriptv* *:scriptversion*
*E999* *E984*
*E999* *E984* *E1040*
Specify the version of Vim for the lines that follow
in the same file. Only applies at the toplevel of
sourced scripts, not inside functions.
@ -367,8 +367,8 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
:vim9s[cript] [noclear] *:vim9s* *:vim9script*
Marks a script file as containing |Vim9-script|
commands. Also see |vim9-namespace|.
Must be the first command in the file.
commands. Also see |vim9-namespace|. *E1038*
Must be the first command in the file. *E1039*
For [noclear] see |vim9-reload|.
Without the |+eval| feature this changes the syntax
for some commands.

View File

@ -101,7 +101,7 @@ precedence, otherwise the 'cursorline' highlighting.
Here is an example that places a sign "piet", displayed with the text ">>", in
line 23 of the current file: >
:sign define piet text=>> texthl=Search
:exe ":sign place 2 line=23 name=piet file=" . expand("%:p")
:exe ":sign place 2 line=23 name=piet file=" .. expand("%:p")
And here is the command to delete it again: >
:sign unplace 2

View File

@ -131,8 +131,8 @@ zuG Undo |zW| and |zG|, remove the word from the internal
rare as this is a fairly uncommon command and all
intuitive commands for this are already taken. If you
want you can add mappings with e.g.: >
nnoremap z? :exe ':spellrare ' . expand('<cWORD>')<CR>
nnoremap z/ :exe ':spellrare! ' . expand('<cWORD>')<CR>
nnoremap z? :exe ':spellrare ' .. expand('<cWORD>')<CR>
nnoremap z/ :exe ':spellrare! ' .. expand('<cWORD>')<CR>
< |:spellundo|, |zuw|, or |zuW| can be used to undo this.
:spellr[rare]! {word} Add {word} as a rare word to the internal word

View File

@ -1,4 +1,4 @@
*starting.txt* For Vim version 8.2. Last change: 2022 Jan 03
*starting.txt* For Vim version 8.2. Last change: 2022 Feb 01
VIM REFERENCE MANUAL by Bram Moolenaar
@ -256,6 +256,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
Interfaces, such as Python, Ruby and Lua, are also disabled,
since they could be used to execute shell commands. Perl uses
the Safe module.
For Unix restricted mode is used when the last part of $SHELL
is "nologin" or "false".
Note that the user may still find a loophole to execute a
shell command, it has only been made difficult.
@ -268,8 +270,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
started if possible.
*-e*
-e Start Vim in Ex mode |Q|. Only makes a difference when the
executable is not called "ex".
-e Start Vim in Ex mode, see |Ex-mode|. Only makes a difference
when the executable is not called "ex".
*-E*
-E Start Vim in improved Ex mode |gQ|. Only makes a difference
@ -1376,7 +1378,7 @@ resulting file, when executed with a ":source" command:
After restoring the Session, the full filename of your current Session is
available in the internal variable "v:this_session" |this_session-variable|.
An example mapping: >
:nmap <F2> :wa<Bar>exe "mksession! " . v:this_session<CR>:so ~/sessions/
:nmap <F2> :wa<Bar>exe "mksession! " .. v:this_session<CR>:so ~/sessions/
This saves the current Session, and starts off the command to load another.
A session includes all tab pages, unless "tabpages" was removed from

View File

@ -1,4 +1,4 @@
*syntax.txt* For Vim version 8.2. Last change: 2021 Nov 20
*syntax.txt* For Vim version 8.2. Last change: 2022 Feb 06
VIM REFERENCE MANUAL by Bram Moolenaar
@ -215,7 +215,8 @@ A syntax group name doesn't specify any color or attributes itself.
The name for a highlight or syntax group must consist of ASCII letters, digits
and the underscore. As a regexp: "[a-zA-Z0-9_]*". However, Vim does not give
an error when using other characters.
an error when using other characters. The maxium length of a group name is
about 200 bytes. *E1249*
To be able to allow each user to pick their favorite set of colors, there must
be preferred names for highlight groups that are common for many languages.
@ -652,7 +653,7 @@ evaluate to get a unique string to append to each ID used in a given document,
so that the full IDs will be unique even when combined with other content in a
larger HTML document. Example, to append _ and the buffer number to each ID: >
:let g:html_id_expr = '"_".bufnr("%")'
:let g:html_id_expr = '"_" .. bufnr("%")'
<
To append a string "_mystring" to the end of each ID: >
@ -956,12 +957,16 @@ the options 'foldminlines' and 'foldnestmax' in |.vimrc| or use |:setlocal| in
BASIC *basic.vim* *vb.vim* *ft-basic-syntax* *ft-vb-syntax*
Both Visual Basic and "normal" basic use the extension ".bas". To detect
Both Visual Basic and "normal" BASIC use the extension ".bas". To detect
which one should be used, Vim checks for the string "VB_Name" in the first
five lines of the file. If it is not found, filetype will be "basic",
otherwise "vb". Files with the ".frm" extension will always be seen as Visual
Basic.
If the automatic detection doesn't work for you or you only edit, for
example, FreeBASIC files, use this in your startup vimrc: >
:let filetype_bas = "freebasic"
C *c.vim* *ft-c-syntax*
@ -1532,6 +1537,14 @@ The enhanced mode also takes advantage of additional color features for a dark
gvim display. Here, statements are colored LightYellow instead of Yellow, and
conditionals are LightBlue for better distinction.
Both Visual Basic and FORM use the extension ".frm". To detect which one
should be used, Vim checks for the string "VB_Name" in the first five lines of
the file. If it is found, filetype will be "vb", otherwise "form".
If the automatic detection doesn't work for you or you only edit, for
example, FORM files, use this in your startup vimrc: >
:let filetype_frm = "form"
FORTH *forth.vim* *ft-forth-syntax*
@ -3594,8 +3607,8 @@ Do you want to draw with the mouse? Try the following: >
:function! GetPixel()
: let c = getline(".")[col(".") - 1]
: echo c
: exe "noremap <LeftMouse> <LeftMouse>r".c
: exe "noremap <LeftDrag> <LeftMouse>r".c
: exe "noremap <LeftMouse> <LeftMouse>r" .. c
: exe "noremap <LeftDrag> <LeftMouse>r" .. c
:endfunction
:noremap <RightMouse> <LeftMouse>:call GetPixel()<CR>
:set guicursor=n:hor20 " to see the color beneath the cursor
@ -3700,12 +3713,13 @@ DEFINING CASE *:syn-case* *E390*
items until the next ":syntax case" command are affected.
:sy[ntax] case
Show either "syntax case match" or "syntax case ignore" (translated).
Show either "syntax case match" or "syntax case ignore".
DEFINING FOLDLEVEL *:syn-foldlevel*
:sy[ntax] foldlevel [start | minimum]
:sy[ntax] foldlevel start
:sy[ntax] foldlevel minimum
This defines how the foldlevel of a line is computed when using
foldmethod=syntax (see |fold-syntax| and |:syn-fold|):
@ -3718,13 +3732,16 @@ DEFINING FOLDLEVEL *:syn-foldlevel*
may close and open horizontally within a line.
:sy[ntax] foldlevel
Show either "syntax foldlevel start" or "syntax foldlevel minimum".
Show the current foldlevel method, either "syntax foldlevel start" or
"syntax foldlevel minimum".
{not meaningful when Vim was compiled without |+folding| feature}
SPELL CHECKING *:syn-spell*
:sy[ntax] spell [toplevel | notoplevel | default]
:sy[ntax] spell toplevel
:sy[ntax] spell notoplevel
:sy[ntax] spell default
This defines where spell checking is to be done for text that is not
in a syntax item:
@ -3739,8 +3756,8 @@ SPELL CHECKING *:syn-spell*
To activate spell checking the 'spell' option must be set.
:sy[ntax] spell
Show either "syntax spell toplevel", "syntax spell notoplevel" or
"syntax spell default" (translated).
Show the current syntax spell checking method, either "syntax spell
toplevel", "syntax spell notoplevel" or "syntax spell default".
SYNTAX ISKEYWORD SETTING *:syn-iskeyword*
@ -4339,7 +4356,7 @@ IMPLICIT CONCEAL *:syn-conceal-implicit*
given explicitly.
:sy[ntax] conceal
Show either "syntax conceal on" or "syntax conceal off" (translated).
Show either "syntax conceal on" or "syntax conceal off".
==============================================================================
8. Syntax patterns *:syn-pattern* *E401* *E402*
@ -5550,9 +5567,9 @@ types.vim: *.[ch]
And put these lines in your .vimrc: >
" load the types.vim highlighting file, if it exists
autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') . '/types.vim'
autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') .. '/types.vim'
autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
autocmd BufRead,BufNewFile *.[ch] exe 'so ' . fname
autocmd BufRead,BufNewFile *.[ch] exe 'so ' .. fname
autocmd BufRead,BufNewFile *.[ch] endif
==============================================================================

View File

@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 8.2. Last change: 2020 Oct 14
*tabpage.txt* For Vim version 8.2. Last change: 2022 Feb 02
VIM REFERENCE MANUAL by Bram Moolenaar
@ -143,7 +143,9 @@ something else.
:tabclose 3 " close the third tab page
:tabclose $ " close the last tab page
:tabclose # " close the last accessed tab page
<
When a tab is closed the next tab page will become the current one.
*:tabo* *:tabonly*
:tabo[nly][!] Close all other tab pages.
When the 'hidden' option is set, all buffers in closed windows
@ -379,24 +381,24 @@ pages and define labels for them. Then get the label for each tab page. >
for i in range(tabpagenr('$'))
" select the highlighting
if i + 1 == tabpagenr()
let s .= '%#TabLineSel#'
let s ..= '%#TabLineSel#'
else
let s .= '%#TabLine#'
let s ..= '%#TabLine#'
endif
" set the tab page number (for mouse clicks)
let s .= '%' . (i + 1) . 'T'
let s ..= '%' .. (i + 1) .. 'T'
" the label is made by MyTabLabel()
let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
let s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} '
endfor
" after the last tab fill with TabLineFill and reset tab page nr
let s .= '%#TabLineFill#%T'
let s ..= '%#TabLineFill#%T'
" right-align the label to close the current tab page
if tabpagenr('$') > 1
let s .= '%=%#TabLine#%999Xclose'
let s ..= '%=%#TabLine#%999Xclose'
endif
return s
@ -459,14 +461,14 @@ windows in the tab page and a '+' if there is a modified buffer: >
" Append the number of windows in the tab page if more than one
let wincount = tabpagewinnr(v:lnum, '$')
if wincount > 1
let label .= wincount
let label ..= wincount
endif
if label != ''
let label .= ' '
let label ..= ' '
endif
" Append the buffer name
return label . bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
return label .. bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
endfunction
set guitablabel=%{GuiTabLabel()}

View File

@ -1355,6 +1355,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
+mouse various.txt /*+mouse*
+mouse_dec various.txt /*+mouse_dec*
+mouse_gpm various.txt /*+mouse_gpm*
+mouse_gpm/dyn various.txt /*+mouse_gpm\/dyn*
+mouse_jsbterm various.txt /*+mouse_jsbterm*
+mouse_netterm various.txt /*+mouse_netterm*
+mouse_pterm various.txt /*+mouse_pterm*
@ -2415,6 +2416,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:dsp tagsrch.txt /*:dsp*
:dsplit tagsrch.txt /*:dsplit*
:e editing.txt /*:e*
:e# editing.txt /*:e#*
:ea undo.txt /*:ea*
:earlier undo.txt /*:earlier*
:ec eval.txt /*:ec*
@ -2432,6 +2434,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:edit editing.txt /*:edit*
:edit! editing.txt /*:edit!*
:edit!_f editing.txt /*:edit!_f*
:edit_# editing.txt /*:edit_#*
:edit_f editing.txt /*:edit_f*
:el eval.txt /*:el*
:else eval.txt /*:else*
@ -2569,6 +2572,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:imenu gui.txt /*:imenu*
:imp vim9.txt /*:imp*
:import vim9.txt /*:import*
:import-as vim9.txt /*:import-as*
:import-cycle vim9.txt /*:import-cycle*
:in insert.txt /*:in*
:index index.txt /*:index*
@ -3947,44 +3951,213 @@ Dictionary-function eval.txt /*Dictionary-function*
DiffUpdated autocmd.txt /*DiffUpdated*
Digraphs digraph.txt /*Digraphs*
DirChanged autocmd.txt /*DirChanged*
DirChangedPre autocmd.txt /*DirChangedPre*
E motion.txt /*E*
E10 message.txt /*E10*
E100 diff.txt /*E100*
E1001 eval.txt /*E1001*
E1002 eval.txt /*E1002*
E1003 vim9.txt /*E1003*
E1004 vim9.txt /*E1004*
E1005 vim9.txt /*E1005*
E1006 vim9.txt /*E1006*
E1007 vim9.txt /*E1007*
E1008 vim9.txt /*E1008*
E1009 vim9.txt /*E1009*
E101 diff.txt /*E101*
E1010 vim9.txt /*E1010*
E1011 vim9.txt /*E1011*
E1012 vim9.txt /*E1012*
E1013 vim9.txt /*E1013*
E1014 vim9.txt /*E1014*
E1015 eval.txt /*E1015*
E1016 vim9.txt /*E1016*
E1017 vim9.txt /*E1017*
E1018 eval.txt /*E1018*
E1019 eval.txt /*E1019*
E102 diff.txt /*E102*
E1020 vim9.txt /*E1020*
E1021 vim9.txt /*E1021*
E1022 vim9.txt /*E1022*
E1023 vim9.txt /*E1023*
E1024 vim9.txt /*E1024*
E1025 vim9.txt /*E1025*
E1026 vim9.txt /*E1026*
E1027 vim9.txt /*E1027*
E1028 vim9.txt /*E1028*
E1029 vim9.txt /*E1029*
E103 diff.txt /*E103*
E1030 vim9.txt /*E1030*
E1031 vim9.txt /*E1031*
E1032 eval.txt /*E1032*
E1033 eval.txt /*E1033*
E1034 vim9.txt /*E1034*
E1035 eval.txt /*E1035*
E1036 eval.txt /*E1036*
E1037 eval.txt /*E1037*
E1038 repeat.txt /*E1038*
E1039 repeat.txt /*E1039*
E104 digraph.txt /*E104*
E1040 repeat.txt /*E1040*
E1041 vim9.txt /*E1041*
E1042 vim9.txt /*E1042*
E1043 vim9.txt /*E1043*
E1044 vim9.txt /*E1044*
E1047 vim9.txt /*E1047*
E1048 vim9.txt /*E1048*
E1049 vim9.txt /*E1049*
E105 mbyte.txt /*E105*
E1050 vim9.txt /*E1050*
E1051 eval.txt /*E1051*
E1052 vim9.txt /*E1052*
E1053 vim9.txt /*E1053*
E1054 vim9.txt /*E1054*
E1055 vim9.txt /*E1055*
E1056 vim9.txt /*E1056*
E1057 vim9.txt /*E1057*
E1058 vim9.txt /*E1058*
E1059 vim9.txt /*E1059*
E1060 vim9.txt /*E1060*
E1061 vim9.txt /*E1061*
E1062 eval.txt /*E1062*
E1063 eval.txt /*E1063*
E1064 autocmd.txt /*E1064*
E1066 vim9.txt /*E1066*
E1067 eval.txt /*E1067*
E1068 vim9.txt /*E1068*
E1069 vim9.txt /*E1069*
E107 eval.txt /*E107*
E1071 vim9.txt /*E1071*
E1072 eval.txt /*E1072*
E1073 vim9.txt /*E1073*
E1074 vim9.txt /*E1074*
E1075 vim9.txt /*E1075*
E1076 eval.txt /*E1076*
E1077 vim9.txt /*E1077*
E108 eval.txt /*E108*
E1080 vim9.txt /*E1080*
E1081 eval.txt /*E1081*
E1083 editing.txt /*E1083*
E1084 eval.txt /*E1084*
E1085 eval.txt /*E1085*
E1086 eval.txt /*E1086*
E1087 vim9.txt /*E1087*
E1089 eval.txt /*E1089*
E109 eval.txt /*E109*
E1090 eval.txt /*E1090*
E1091 vim9.txt /*E1091*
E1092 various.txt /*E1092*
E1093 eval.txt /*E1093*
E1094 vim9.txt /*E1094*
E1095 eval.txt /*E1095*
E1096 vim9.txt /*E1096*
E1097 vim9.txt /*E1097*
E1098 eval.txt /*E1098*
E1099 vim9.txt /*E1099*
E11 cmdline.txt /*E11*
E110 eval.txt /*E110*
E1100 vim9.txt /*E1100*
E1101 vim9.txt /*E1101*
E1102 vim9.txt /*E1102*
E1103 vim9.txt /*E1103*
E1104 vim9.txt /*E1104*
E1105 vim9.txt /*E1105*
E1106 vim9.txt /*E1106*
E1107 eval.txt /*E1107*
E1108 vim9.txt /*E1108*
E1109 builtin.txt /*E1109*
E111 eval.txt /*E111*
E1110 builtin.txt /*E1110*
E1111 builtin.txt /*E1111*
E1112 builtin.txt /*E1112*
E1113 builtin.txt /*E1113*
E1114 builtin.txt /*E1114*
E1115 testing.txt /*E1115*
E1116 testing.txt /*E1116*
E1117 vim9.txt /*E1117*
E1118 eval.txt /*E1118*
E1119 eval.txt /*E1119*
E112 eval.txt /*E112*
E1120 eval.txt /*E1120*
E1121 eval.txt /*E1121*
E1122 eval.txt /*E1122*
E1123 vim9.txt /*E1123*
E1124 vim9.txt /*E1124*
E1125 vim9.txt /*E1125*
E1126 vim9.txt /*E1126*
E1127 vim9.txt /*E1127*
E1128 vim9.txt /*E1128*
E1129 eval.txt /*E1129*
E113 eval.txt /*E113*
E1130 vim9.txt /*E1130*
E1131 vim9.txt /*E1131*
E1132 builtin.txt /*E1132*
E1133 vim9.txt /*E1133*
E1134 vim9.txt /*E1134*
E1135 eval.txt /*E1135*
E1136 map.txt /*E1136*
E1137 map.txt /*E1137*
E1138 eval.txt /*E1138*
E1139 vim9.txt /*E1139*
E114 eval.txt /*E114*
E1140 eval.txt /*E1140*
E1141 eval.txt /*E1141*
E1142 testing.txt /*E1142*
E1143 eval.txt /*E1143*
E1144 vim9.txt /*E1144*
E1145 eval.txt /*E1145*
E1146 vim9.txt /*E1146*
E1147 eval.txt /*E1147*
E1148 eval.txt /*E1148*
E1149 vim9.txt /*E1149*
E115 eval.txt /*E115*
E1150 vim9.txt /*E1150*
E1151 eval.txt /*E1151*
E1152 vim9.txt /*E1152*
E1153 eval.txt /*E1153*
E1154 eval.txt /*E1154*
E1155 autocmd.txt /*E1155*
E1156 editing.txt /*E1156*
E1157 vim9.txt /*E1157*
E1158 vim9.txt /*E1158*
E1159 windows.txt /*E1159*
E116 eval.txt /*E116*
E1160 vim9.txt /*E1160*
E1161 builtin.txt /*E1161*
E1162 builtin.txt /*E1162*
E1163 vim9.txt /*E1163*
E1164 vim9.txt /*E1164*
E1165 eval.txt /*E1165*
E1166 eval.txt /*E1166*
E1167 vim9.txt /*E1167*
E1168 vim9.txt /*E1168*
E1169 eval.txt /*E1169*
E117 eval.txt /*E117*
E1170 vim9.txt /*E1170*
E1171 vim9.txt /*E1171*
E1172 vim9.txt /*E1172*
E1173 vim9.txt /*E1173*
E1174 vim9.txt /*E1174*
E1175 vim9.txt /*E1175*
E1176 vim9.txt /*E1176*
E1177 eval.txt /*E1177*
E1178 vim9.txt /*E1178*
E1179 options.txt /*E1179*
E118 eval.txt /*E118*
E1180 vim9.txt /*E1180*
E1181 vim9.txt /*E1181*
E1182 eval.txt /*E1182*
E1183 eval.txt /*E1183*
E1184 eval.txt /*E1184*
E1185 various.txt /*E1185*
E1186 vim9.txt /*E1186*
E1187 starting.txt /*E1187*
E1188 cmdline.txt /*E1188*
E1189 vim9.txt /*E1189*
E119 eval.txt /*E119*
E1190 vim9.txt /*E1190*
E1191 vim9.txt /*E1191*
E1192 eval.txt /*E1192*
E1193 options.txt /*E1193*
E1194 options.txt /*E1194*
E1195 options.txt /*E1195*
@ -3996,23 +4169,77 @@ E12 message.txt /*E12*
E120 eval.txt /*E120*
E1200 options.txt /*E1200*
E1201 options.txt /*E1201*
E1205 builtin.txt /*E1205*
E1202 vim9.txt /*E1202*
E1203 eval.txt /*E1203*
E1204 pattern.txt /*E1204*
E1205 vim9.txt /*E1205*
E1206 vim9.txt /*E1206*
E1207 eval.txt /*E1207*
E1208 map.txt /*E1208*
E1209 builtin.txt /*E1209*
E121 eval.txt /*E121*
E1210 vim9.txt /*E1210*
E1211 vim9.txt /*E1211*
E1212 vim9.txt /*E1212*
E1213 vim9.txt /*E1213*
E1214 builtin.txt /*E1214*
E1215 builtin.txt /*E1215*
E1216 builtin.txt /*E1216*
E1217 vim9.txt /*E1217*
E1218 vim9.txt /*E1218*
E1219 vim9.txt /*E1219*
E122 eval.txt /*E122*
E1220 vim9.txt /*E1220*
E1221 vim9.txt /*E1221*
E1222 vim9.txt /*E1222*
E1223 vim9.txt /*E1223*
E1224 vim9.txt /*E1224*
E1225 vim9.txt /*E1225*
E1226 vim9.txt /*E1226*
E1227 vim9.txt /*E1227*
E1228 vim9.txt /*E1228*
E1229 eval.txt /*E1229*
E123 eval.txt /*E123*
E1230 options.txt /*E1230*
E1231 map.txt /*E1231*
E1232 builtin.txt /*E1232*
E1233 builtin.txt /*E1233*
E1234 vim9.txt /*E1234*
E1235 vim9.txt /*E1235*
E1236 vim9.txt /*E1236*
E1237 map.txt /*E1237*
E1238 vim9.txt /*E1238*
E1239 builtin.txt /*E1239*
E124 eval.txt /*E124*
E1240 change.txt /*E1240*
E1241 change.txt /*E1241*
E1242 change.txt /*E1242*
E1243 options.txt /*E1243*
E1244 message.txt /*E1244*
E1245 cmdline.txt /*E1245*
E1246 eval.txt /*E1246*
E1247 cmdline.txt /*E1247*
E1248 vim9.txt /*E1248*
E1249 syntax.txt /*E1249*
E125 eval.txt /*E125*
E1250 vim9.txt /*E1250*
E1251 vim9.txt /*E1251*
E1252 vim9.txt /*E1252*
E1253 vim9.txt /*E1253*
E1254 vim9.txt /*E1254*
E1255 map.txt /*E1255*
E1256 vim9.txt /*E1256*
E1257 vim9.txt /*E1257*
E1258 vim9.txt /*E1258*
E1259 vim9.txt /*E1259*
E126 eval.txt /*E126*
E1260 vim9.txt /*E1260*
E1261 vim9.txt /*E1261*
E1262 vim9.txt /*E1262*
E1263 eval.txt /*E1263*
E1264 vim9.txt /*E1264*
E1265 eval.txt /*E1265*
E1266 if_pyth.txt /*E1266*
E127 eval.txt /*E127*
E128 eval.txt /*E128*
E129 eval.txt /*E129*
@ -4195,6 +4422,7 @@ E295 message.txt /*E295*
E296 message.txt /*E296*
E297 message.txt /*E297*
E298 message.txt /*E298*
E299 if_perl.txt /*E299*
E30 change.txt /*E30*
E300 message.txt /*E300*
E301 message.txt /*E301*
@ -4576,6 +4804,7 @@ E65 pattern.txt /*E65*
E650 netbeans.txt /*E650*
E651 netbeans.txt /*E651*
E652 netbeans.txt /*E652*
E654 eval.txt /*E654*
E655 builtin.txt /*E655*
E656 netbeans.txt /*E656*
E657 netbeans.txt /*E657*
@ -4729,7 +4958,7 @@ E792 gui.txt /*E792*
E793 diff.txt /*E793*
E794 eval.txt /*E794*
E795 eval.txt /*E795*
E796 editing.txt /*E796*
E796 options.txt /*E796*
E797 spell.txt /*E797*
E798 builtin.txt /*E798*
E799 builtin.txt /*E799*
@ -4776,7 +5005,6 @@ E835 options.txt /*E835*
E836 if_pyth.txt /*E836*
E837 if_pyth.txt /*E837*
E838 netbeans.txt /*E838*
E839 message.txt /*E839*
E84 windows.txt /*E84*
E840 insert.txt /*E840*
E841 map.txt /*E841*
@ -4795,6 +5023,8 @@ E852 gui_x11.txt /*E852*
E853 eval.txt /*E853*
E854 options.txt /*E854*
E855 autocmd.txt /*E855*
E856 testing.txt /*E856*
E857 builtin.txt /*E857*
E858 builtin.txt /*E858*
E859 builtin.txt /*E859*
E86 windows.txt /*E86*
@ -5632,6 +5862,7 @@ bug-fixes-5 version5.txt /*bug-fixes-5*
bug-fixes-6 version6.txt /*bug-fixes-6*
bug-fixes-7 version7.txt /*bug-fixes-7*
bug-fixes-8 version8.txt /*bug-fixes-8*
bug-fixes-9 version9.txt /*bug-fixes-9*
bug-reports intro.txt /*bug-reports*
bugreport.vim intro.txt /*bugreport.vim*
bugs intro.txt /*bugs*
@ -5942,6 +6173,7 @@ compile-changes-5 version5.txt /*compile-changes-5*
compile-changes-6 version6.txt /*compile-changes-6*
compile-changes-7 version7.txt /*compile-changes-7*
compile-changes-8 version8.txt /*compile-changes-8*
compile-changes-9 version9.txt /*compile-changes-9*
compiler-compaqada ft_ada.txt /*compiler-compaqada*
compiler-decada ft_ada.txt /*compiler-decada*
compiler-gcc quickfix.txt /*compiler-gcc*
@ -5996,6 +6228,7 @@ conversion-server mbyte.txt /*conversion-server*
convert-to-HTML syntax.txt /*convert-to-HTML*
convert-to-XHTML syntax.txt /*convert-to-XHTML*
convert-to-XML syntax.txt /*convert-to-XML*
convert_legacy_function_to_vim9 vim9.txt /*convert_legacy_function_to_vim9*
copy() builtin.txt /*copy()*
copy-diffs diff.txt /*copy-diffs*
copy-move change.txt /*copy-move*
@ -7590,6 +7823,7 @@ improvements-5 version5.txt /*improvements-5*
improvements-6 version6.txt /*improvements-6*
improvements-7 version7.txt /*improvements-7*
improvements-8 version8.txt /*improvements-8*
improvements-9 version9.txt /*improvements-9*
in_bot channel.txt /*in_bot*
in_buf channel.txt /*in_buf*
in_io-buffer channel.txt /*in_io-buffer*
@ -7605,6 +7839,7 @@ incompatible-5 version5.txt /*incompatible-5*
incompatible-6 version6.txt /*incompatible-6*
incompatible-7 version7.txt /*incompatible-7*
incompatible-8 version8.txt /*incompatible-8*
incompatible-9 version9.txt /*incompatible-9*
indent() builtin.txt /*indent()*
indent-expression indent.txt /*indent-expression*
indent.txt indent.txt /*indent.txt*
@ -8313,6 +8548,7 @@ new-5 version5.txt /*new-5*
new-6 version6.txt /*new-6*
new-7 version7.txt /*new-7*
new-8 version8.txt /*new-8*
new-9 version9.txt /*new-9*
new-GTK-GUI version5.txt /*new-GTK-GUI*
new-MzScheme version7.txt /*new-MzScheme*
new-Select-mode version5.txt /*new-Select-mode*
@ -8346,6 +8582,7 @@ new-indent-flex version6.txt /*new-indent-flex*
new-items-6 version6.txt /*new-items-6*
new-items-7 version7.txt /*new-items-7*
new-items-8 version8.txt /*new-items-8*
new-items-9 version9.txt /*new-items-9*
new-line-continuation version5.txt /*new-line-continuation*
new-location-list version7.txt /*new-location-list*
new-lua version7.txt /*new-lua*
@ -8395,6 +8632,7 @@ new-utf-8 version6.txt /*new-utf-8*
new-vertsplit version6.txt /*new-vertsplit*
new-vim-script version7.txt /*new-vim-script*
new-vim-script-8 version8.txt /*new-vim-script-8*
new-vim-script-9 version9.txt /*new-vim-script-9*
new-vim-server version6.txt /*new-vim-server*
new-vimgrep version7.txt /*new-vimgrep*
new-vimscript-8.2 version8.txt /*new-vimscript-8.2*
@ -8513,7 +8751,8 @@ pascal.vim syntax.txt /*pascal.vim*
patches-8 version8.txt /*patches-8*
patches-8.1 version8.txt /*patches-8.1*
patches-8.2 version8.txt /*patches-8.2*
patches-after-8.2 version8.txt /*patches-after-8.2*
patches-9 version9.txt /*patches-9*
patches-after-8.2 version9.txt /*patches-after-8.2*
pathshorten() builtin.txt /*pathshorten()*
pattern pattern.txt /*pattern*
pattern-atoms pattern.txt /*pattern-atoms*
@ -9781,6 +10020,7 @@ terminal.txt terminal.txt /*terminal.txt*
terminalprops() builtin.txt /*terminalprops()*
terminfo term.txt /*terminfo*
termresponse-variable eval.txt /*termresponse-variable*
ternary eval.txt /*ternary*
test-functions usr_41.txt /*test-functions*
test-functions-details testing.txt /*test-functions-details*
test_alloc_fail() testing.txt /*test_alloc_fail()*
@ -9789,8 +10029,7 @@ test_feedinput() testing.txt /*test_feedinput()*
test_garbagecollect_now() testing.txt /*test_garbagecollect_now()*
test_garbagecollect_soon() testing.txt /*test_garbagecollect_soon()*
test_getvalue() testing.txt /*test_getvalue()*
test_gui_drop_files() testing.txt /*test_gui_drop_files()*
test_gui_mouse_event() testing.txt /*test_gui_mouse_event()*
test_gui_event() testing.txt /*test_gui_event()*
test_ignore_error() testing.txt /*test_ignore_error()*
test_null_blob() testing.txt /*test_null_blob()*
test_null_channel() testing.txt /*test_null_channel()*
@ -9803,7 +10042,6 @@ test_null_string() testing.txt /*test_null_string()*
test_option_not_set() testing.txt /*test_option_not_set()*
test_override() testing.txt /*test_override()*
test_refcount() testing.txt /*test_refcount()*
test_scrollbar() testing.txt /*test_scrollbar()*
test_setmouse() testing.txt /*test_setmouse()*
test_settime() testing.txt /*test_settime()*
test_srand_seed() testing.txt /*test_srand_seed()*
@ -9874,7 +10112,6 @@ tooltips gui.txt /*tooltips*
toupper() builtin.txt /*toupper()*
tr() builtin.txt /*tr()*
trim() builtin.txt /*trim()*
trinary eval.txt /*trinary*
trojan-horse starting.txt /*trojan-horse*
true vim9.txt /*true*
true-variable eval.txt /*true-variable*
@ -10097,6 +10334,7 @@ v_CTRL-C visual.txt /*v_CTRL-C*
v_CTRL-G visual.txt /*v_CTRL-G*
v_CTRL-H change.txt /*v_CTRL-H*
v_CTRL-O visual.txt /*v_CTRL-O*
v_CTRL-R visual.txt /*v_CTRL-R*
v_CTRL-V visual.txt /*v_CTRL-V*
v_CTRL-X change.txt /*v_CTRL-X*
v_CTRL-Z starting.txt /*v_CTRL-Z*
@ -10228,6 +10466,7 @@ version-7.4 version7.txt /*version-7.4*
version-8.0 version8.txt /*version-8.0*
version-8.1 version8.txt /*version-8.1*
version-8.2 version8.txt /*version-8.2*
version-9.0 version9.txt /*version-9.0*
version-variable eval.txt /*version-variable*
version4.txt version4.txt /*version4.txt*
version5.txt version5.txt /*version5.txt*
@ -10242,6 +10481,8 @@ version8.0 version8.txt /*version8.0*
version8.1 version8.txt /*version8.1*
version8.2 version8.txt /*version8.2*
version8.txt version8.txt /*version8.txt*
version9.0 version9.txt /*version9.0*
version9.txt version9.txt /*version9.txt*
versionlong-variable eval.txt /*versionlong-variable*
vi intro.txt /*vi*
vi-differences vi_diff.txt /*vi-differences*
@ -10257,6 +10498,8 @@ vim-7.4 version7.txt /*vim-7.4*
vim-8 version8.txt /*vim-8*
vim-8.1 version8.txt /*vim-8.1*
vim-8.2 version8.txt /*vim-8.2*
vim-9 version9.txt /*vim-9*
vim-9.0 version9.txt /*vim-9.0*
vim-additions vi_diff.txt /*vim-additions*
vim-announce intro.txt /*vim-announce*
vim-arguments starting.txt /*vim-arguments*
@ -10303,6 +10546,7 @@ vim9-namespace vim9.txt /*vim9-namespace*
vim9-no-dict-function vim9.txt /*vim9-no-dict-function*
vim9-rationale vim9.txt /*vim9-rationale*
vim9-reload vim9.txt /*vim9-reload*
vim9-s-namespace vim9.txt /*vim9-s-namespace*
vim9-scopes vim9.txt /*vim9-scopes*
vim9-script-intro usr_46.txt /*vim9-script-intro*
vim9-types vim9.txt /*vim9-types*
@ -10460,6 +10704,7 @@ windowid windows.txt /*windowid*
windowid-variable eval.txt /*windowid-variable*
windows windows.txt /*windows*
windows-3.1 os_win32.txt /*windows-3.1*
windows-asynchronously os_win32.txt /*windows-asynchronously*
windows-icon os_win32.txt /*windows-icon*
windows-intro windows.txt /*windows-intro*
windows-starting windows.txt /*windows-starting*
@ -10633,6 +10878,7 @@ zz scroll.txt /*zz*
{offset} pattern.txt /*{offset}*
{register} change.txt /*{register}*
{rhs} map.txt /*{rhs}*
{server} remote.txt /*{server}*
{subject} helphelp.txt /*{subject}*
{} intro.txt /*{}*
} motion.txt /*}*

View File

@ -724,7 +724,7 @@ matches the pattern "^# *define" it is not considered to be a comment.
If you want to list matches, and then select one to jump to, you could use a
mapping to do that for you. Here is an example: >
:map <F4> [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>
:map <F4> [I:let nr = input("Which one: ")<Bar>exe "normal " .. nr .. "[\t"<CR>
<
*[i*
[i Display the first line that contains the keyword

View File

@ -984,7 +984,7 @@ an #if/#else/#endif block, the selection becomes linewise.
For MS-Windows and xterm the time for double clicking can be set with the
'mousetime' option. For the other systems this time is defined outside of Vim.
An example, for using a double click to jump to the tag under the cursor: >
:map <2-LeftMouse> :exe "tag ". expand("<cword>")<CR>
:map <2-LeftMouse> :exe "tag " .. expand("<cword>")<CR>
Dragging the mouse with a double click (button-down, button-up, button-down
and then drag) will result in whole words to be selected. This continues

View File

@ -1,4 +1,4 @@
*terminal.txt* For Vim version 8.2. Last change: 2021 Dec 21
*terminal.txt* For Vim version 8.2. Last change: 2022 Jan 21
VIM REFERENCE MANUAL by Bram Moolenaar
@ -979,8 +979,8 @@ Currently supported commands:
< Calls a function defined like this: >
function Tapi_Impression(bufnum, arglist)
if len(a:arglist) == 2
echomsg "impression " . a:arglist[0]
echomsg "count " . a:arglist[1]
echomsg "impression " .. a:arglist[0]
echomsg "count " .. a:arglist[1]
endif
endfunc
< Output from `:echo` may be erased by a redraw, use `:echomsg`
@ -1178,7 +1178,7 @@ gdb window A terminal window in which "gdb vim" is executed. Here you
program window A terminal window for the executed program. When "run" is
used in gdb the program I/O will happen in this window, so
that it does not interfere with controlling gdb. The buffer
name is "gdb program".
name is "debugged program".
The current window is used to show the source code. When gdb pauses the
source file location will be displayed, if possible. A sign is used to

View File

@ -1,4 +1,4 @@
*testing.txt* For Vim version 8.2. Last change: 2022 Jan 13
*testing.txt* For Vim version 8.2. Last change: 2022 Feb 10
VIM REFERENCE MANUAL by Bram Moolenaar
@ -65,8 +65,9 @@ test_garbagecollect_now() *test_garbagecollect_now()*
Like garbagecollect(), but executed right away. This must
only be called directly to avoid any structure to exist
internally, and |v:testing| must have been set before calling
any function. This will not work when called from a :def
function, because variables on the stack will be freed.
any function. *E1142*
This will not work when called from a :def function, because
variables on the stack will be freed.
test_garbagecollect_soon() *test_garbagecollect_soon()*
@ -82,46 +83,113 @@ test_getvalue({name}) *test_getvalue()*
Can also be used as a |method|: >
GetName()->test_getvalue()
<
*test_gui_drop_files()*
test_gui_drop_files({list}, {row}, {col}, {mods})
Drop one or more files in {list} in the window at {row}, {col}.
This function only works when the GUI is running and the
|drop_file| feature is present.
*test_gui_event()*
test_gui_event({event}, {args})
Generate a GUI {event} with arguments {args} for testing Vim
functionality. This function works only when the GUI is
running.
The supported values for {mods} are:
0x4 Shift
0x8 Alt
0x10 Ctrl
The files are added to the |argument-list| and the first file
in {list} is edited in the window. See |drag-n-drop| for more
information.
{event} is a String and the supported values are:
"dropfiles" drop one or more files in a window.
"findrepl" search and replace text
"mouse" mouse button click event.
"scrollbar" move or drag the scrollbar
"tabline" select a tab page by mouse click.
"tabmenu" select a tabline menu entry.
*test_gui_mouse_event()*
test_gui_mouse_event({button}, {row}, {col}, {multiclick}, {modifiers})
Inject a mouse button click event. This function only works
when the GUI is running.
The supported values for {button} are:
0 right mouse button
1 middle mouse button
2 left mouse button
3 mouse button release
4 scroll wheel down
5 scroll wheel up
6 scroll wheel left
7 scroll wheel right
{row} and {col} specify the location of the mouse click. The
first row of the Vim window is 1 and the last row is 'lines'.
The maximum value of {col} is 'columns'.
To inject a multiclick event, set {multiclick} to 1.
The supported values for {modifiers} are:
4 shift is pressed
8 alt is pressed
16 ctrl is pressed
After injecting the mouse event you probably should call
{args} is a Dict and contains the arguments for the event.
"dropfiles":
Drop one or more files in a specified window. The supported
items in {args} are:
files: List of file names
row: window row number
col: window column number
modifiers: key modifiers. The supported values are:
0x4 Shift
0x8 Alt
0x10 Ctrl
The files are added to the |argument-list| and the first
file in {files} is edited in the window. See |drag-n-drop|
for more information. This event works only when the
|drop_file| feature is present.
"findrepl":
{only available when the GUI has a find/replace dialog}
Perform a search and replace of text. The supported items
in {args} are:
find_text: string to find.
repl_text: replacement string
flags: flags controlling the find/replace. Supported
values are:
1 search next string (find dialog)
2 search next string (replace dialog)
3 replace string once
4 replace all matches
8 match whole words only
16 match case
forward: set to 1 for forward search.
"mouse":
Inject a mouse button click event. The supported items in
{args} are:
button: mouse button. The supported values are:
0 right mouse button
1 middle mouse button
2 left mouse button
3 mouse button release
4 scroll wheel down
5 scroll wheel up
6 scroll wheel left
7 scroll wheel right
row: mouse click row number. The first row of the
Vim window is 1 and the last row is 'lines'.
col: mouse click column number. The maximum value
of {col} is 'columns'.
multiclick: set to 1 to inject a multiclick mouse event.
modifiers: key modifiers. The supported values are:
4 shift is pressed
8 alt is pressed
16 ctrl is pressed
"scrollbar":
Set or drag the left, right or horizontal scrollbar. Only
works when the scrollbar actually exists. The supported
items in {args} are:
which: scrollbar. The supported values are:
left Left scrollbar of the current window
right Right scrollbar of the current window
hor Horizontal scrollbar
value: amount to scroll. For the vertical scrollbars
the value can be 1 to the line-count of the
buffer. For the horizontal scrollbar the
value can be between 1 and the maximum line
length, assuming 'wrap' is not set.
dragging: 1 to drag the scrollbar and 0 to click in the
scrollbar.
"tabline":
Inject a mouse click event on the tabline to select a
tabpage. The supported items in {args} are:
tabnr: tab page number
"tabmenu":
Inject an event to select a tabline menu entry. The
supported items in {args} are:
tabnr: tab page number
item: tab page menu item number. 1 for the first
menu item, 2 for the second item and so on.
After injecting the GUI events you probably should call
|feedkeys()| to have them processed, e.g.: >
call feedkeys("y", 'Lx!')
<
Returns TRUE if the event is successfully added, FALSE if
there is a failure.
Can also be used as a |method|: >
GetEvent()->test_gui_event({args})
<
test_ignore_error({expr}) *test_ignore_error()*
Ignore any error containing {expr}. A normal message is given
instead.
@ -235,27 +303,6 @@ test_refcount({expr}) *test_refcount()*
GetVarname()->test_refcount()
test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()*
Pretend using scrollbar {which} to move it to position
{value}. {which} can be:
left Left scrollbar of the current window
right Right scrollbar of the current window
hor Horizontal scrollbar
For the vertical scrollbars {value} can be 1 to the
line-count of the buffer. For the horizontal scrollbar the
{value} can be between 1 and the maximum line length, assuming
'wrap' is not set.
When {dragging} is non-zero it's like dragging the scrollbar,
otherwise it's like clicking in the scrollbar.
Only works when the {which} scrollbar actually exists,
obviously only when using the GUI.
Can also be used as a |method|: >
GetValue()->test_scrollbar('right', 0)
test_setmouse({row}, {col}) *test_setmouse()*
Set the mouse position to be used for the next mouse action.
{row} and {col} are one based.
@ -352,7 +399,7 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
Run {cmd} and add an error message to |v:errors| if it does
NOT produce an error or when {error} is not found in the
error message. Also see |assert-return|.
*E856*
When {error} is a string it must be found literally in the
first reported error. Most often this will be the error code,
including the colon, e.g. "E123:". >
@ -372,12 +419,12 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
<
If {msg} is empty then it is not used. Do this to get the
default message when passing the {lnum} argument.
*E1115*
When {lnum} is present and not negative, and the {error}
argument is present and matches, then this is compared with
the line number at which the error was reported. That can be
the line number in a function or in a script.
*E1116*
When {context} is present it is used as a pattern and matched
against the context (script name or function name) where
{lnum} is located in.

View File

@ -101,14 +101,14 @@ What you need:
create it with the shell command "mkid file1 file2 ..".
Put this in your .vimrc: >
map _u :call ID_search()<Bar>execute "/\\<" . g:word . "\\>"<CR>
map _n :n<Bar>execute "/\\<" . g:word . "\\>"<CR>
map _u :call ID_search()<Bar>execute "/\\<" .. g:word .. "\\>"<CR>
map _n :n<Bar>execute "/\\<" .. g:word .. "\\>"<CR>
function! ID_search()
let g:word = expand("<cword>")
let x = system("lid --key=none ". g:word)
let x = system("lid --key=none " .. g:word)
let x = substitute(x, "\n", " ", "g")
execute "next " . x
execute "next " .. x
endfun
To use it, place the cursor on a word, type "_u" and vim will load the file
@ -356,13 +356,13 @@ This mapping will format any bullet list. It requires that there is an empty
line above and below each list entry. The expression commands are used to
be able to give comments to the parts of the mapping. >
:let m = ":map _f :set ai<CR>" " need 'autoindent' set
:let m = m . "{O<Esc>" " add empty line above item
:let m = m . "}{)^W" " move to text after bullet
:let m = m . "i <CR> <Esc>" " add space for indent
:let m = m . "gq}" " format text after the bullet
:let m = m . "{dd" " remove the empty line
:let m = m . "5lDJ" " put text after bullet
:let m = ":map _f :set ai<CR>" " need 'autoindent' set
:let m ..= "{O<Esc>" " add empty line above item
:let m ..= "}{)^W" " move to text after bullet
:let m ..= "i <CR> <Esc>" " add space for indent
:let m ..= "gq}" " format text after the bullet
:let m ..= "{dd" " remove the empty line
:let m ..= "5lDJ" " put text after bullet
:execute m |" define the mapping
(<> notation |<>|. Note that this is all typed literally. ^W is "^" "W", not
@ -514,15 +514,15 @@ A slightly more advanced version is used in the |matchparen| plugin.
let c = '\['
let c2 = '\]'
endif
let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' ..
\ '=~? "string\\|comment"'
execute 'if' s_skip '| let s_skip = 0 | endif'
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip)
if m_lnum > 0 && m_lnum >= line('w0') && m_lnum <= line('w$')
exe 'match Search /\(\%' . c_lnum . 'l\%' . c_col .
\ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
exe 'match Search /\(\%' .. c_lnum .. 'l\%' .. c_col ..
\ 'c\)\|\(\%' .. m_lnum .. 'l\%' .. m_col .. 'c\)/'
let s:paren_hl_on = 1
endif
endfunction

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 15
*todo.txt* For Vim version 8.2. Last change: 2022 Feb 16
VIM REFERENCE MANUAL by Bram Moolenaar
@ -38,20 +38,14 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
TODO in eval_method() for using partial.
TODO in compile_load_scriptvar()
Try using a variable or function that is not exported
"return Msg()" does not give an error if there is no return value. #9497
eval_map_expr() in getchar.c saves stuff because "mp" can change, this does
not happen in map.c for an abbreviation. Test that this fails, fix it.
Once Vim9 is stable:
- Add all the error numbers in a good place in documentation.
done until E653
- Use Vim9 for runtime files.
- Check code coverage, add more tests if needed.
vim9execute.c
vim9expr.c
vim9instr.c
vim9script.c
vim9type.c
Further Vim9 improvements, possibly after launch:
- Check performance with callgrind and kcachegrind.
@ -67,8 +61,10 @@ Further Vim9 improvements, possibly after launch:
evaluation.
Use the location where the option was set for deciding whether it's to be
evaluated in Vim9 script context.
- implement :type, "import type"
- implement :enum, "import enum".
- Implement "import lazy" - like autoload but with a relative or absolute
path. #9595
- implement :type
- implement :enum
- implement :class and :interface: See |vim9-classes|
- For range: make table of first ASCII character with flag to quickly check if
it can be a Vim9 command. E.g. "+" can, but "." can't.
@ -83,6 +79,7 @@ Further Vim9 improvements, possibly after launch:
Update list of features to vote on:
- multiple cursors
- built-in LSP support
- start first line halfway
Popup windows:
- Preview popup not properly updated when it overlaps with completion menu.
@ -207,6 +204,9 @@ Terminal emulator window:
When using 'cryptmethod' xchaha20 the undo file is not encrypted.
Need to handle extra bytes.
In Select mode the deleted text always goes into the unnamed register.
Use CTRL-R to specify the register to use. (#9531)
Some prompts are not translated: #9495
Test_communicate_ipv6(): is flaky on many systems
@ -237,6 +237,8 @@ Memory leak in test_alot with pyeval() (allocating partial)
Memory leak in test_alot with expand()
Memory leaks in test_channel? (or is it because of fork())
PR to support %e and %k in 'errorformat'. #9624
Idea: when typing ":e /some/dir/" and "dir" does not exist, highlight in red.
":set &shellpipe" and ":set &shellredir" should use the logic from
@ -245,6 +247,8 @@ this.
MS-Windows: did path modifier :p:8 stop working? #8600
Add support for "underdouble", "underdot" and "underdash". #9553
test_arglist func Test_all_not_allowed_from_cmdwin() hangs on MS-Windows.
Mapping with partial match not executed properly in GTK. (Ingo Karkat, #7082)
@ -413,9 +417,6 @@ When editing a file with ":edit" the output of :swapname is relative, while
editing it with "vim file" it is absolute. (#355)
Which one should it be?
:map output does not clear the reset of the command line.
(#5623, also see #5962)
Problem with auto-formatting - inserting space and putting cursor before added
character. (#6154)
@ -4835,9 +4836,6 @@ Autocommands:
CursorHoldC - CursorHold while command-line editing
WinMoved - when windows have been moved around, e.g, ":wincmd J"
SearchPost - After doing a search command (e.g. to do "M")
PreDirChanged/PostDirChanged
- Before/after ":cd" has been used (for changing the
window title)
ShutDown - when the system is about to shut down
InsertCharPost - user typed a character in Insert mode, after inserting
the char.

View File

@ -1,4 +1,4 @@
*uganda.txt* For Vim version 8.2. Last change: 2020 Jan 08
*uganda.txt* For Vim version 8.2. Last change: 2022 Feb 05
VIM REFERENCE MANUAL by Bram Moolenaar
@ -11,9 +11,9 @@ Vim is Charityware. You can use and copy it as much as you like, but you are
encouraged to make a donation for needy children in Uganda. Please see |kcc|
below or visit the ICCF web site, available at these URLs:
http://iccf-holland.org/
http://www.vim.org/iccf/
http://www.iccf.nl/
https://iccf-holland.org/
https://www.vim.org/iccf/
https://www.iccf.nl/
You can also sponsor the development of Vim. Vim sponsors can vote for
features. See |sponsor|. The money goes to Uganda anyway.
@ -169,10 +169,11 @@ households are stimulated to build a proper latrine. I helped setting up a
production site for cement slabs. These are used to build a good latrine.
They are sold below cost price.
There is a small clinic at the project, which provides children and their
family with medical help. When needed, transport to a hospital is offered.
Immunization programs are carried out and help is provided when an epidemic is
breaking out (measles and cholera have been a problem).
There is a clinic at the project, which provides children and their family
medical help. Since 2020 a maternity ward was added and 24/7 service is
available. When needed, transport to a hospital is offered. Immunization
programs are carried out and help is provided when an epidemic is breaking out
(measles and cholera have been a problem).
*donate*
Summer 1994 to summer 1995 I spent a whole year at the centre, working as a
volunteer. I have helped to expand the centre and worked in the area of water
@ -214,44 +215,29 @@ Check the ICCF web site for the latest information! See |iccf| for the URL.
USA: The methods mentioned below can be used.
Sending a check to the Nehemiah Group Outreach Society (NGOS)
is no longer possible, unfortunately. We are looking for
another way to get you an IRS tax receipt.
For sponsoring a child contact KCF in Canada (see below). US
checks can be sent to them to lower banking costs.
If you must send a check send it to our Canadian partner:
https://www.kuwasha.net/
Canada: Contact Kibaale Children's Fund (KCF) in Surrey, Canada. They
take care of the Canadian sponsors for the children in
Kibaale. KCF forwards 100% of the money to the project in
Uganda. You can send them a one time donation directly.
Canada: Contact Kuwasha in Surrey, Canada. They take care of the
Canadian sponsors for the children in Kibaale. Kuwasha
forwards 100% of the money to the project in Uganda. You can
send them a one time donation directly.
Please send me a note so that I know what has been donated
because of Vim. Ask KCF for information about sponsorship.
Kibaale Children's Fund c/o Pacific Academy
10238-168 Street
Surrey, B.C. V4N 1Z4
Canada
Phone: 604-581-5353
If you make a donation to Kibaale Children's Fund (KCF) you
will receive a tax receipt which can be submitted with your
tax return.
because of Vim. Look on their site for information about
sponsorship: https://www.kuwasha.net/
If you make a donation to Kuwasha you will receive a tax
receipt which can be submitted with your tax return.
Holland: Transfer to the account of "Stichting ICCF Holland" in Lisse.
This will allow for tax deduction if you live in Holland.
Postbank, nr. 4548774
IBAN: NL95 INGB 0004 5487 74
Holland: Transfer to the account of "Stichting ICCF Holland" in
Amersfoort. This will allow for tax deduction if you live in
Holland. ING bank, IBAN: NL95 INGB 0004 5487 74
Germany: It is possible to make donations that allow for a tax return.
Check the ICCF web site for the latest information:
http://iccf-holland.org/germany.html
https://iccf-holland.org/germany.html
World: Use a postal money order. That should be possible from any
country, mostly from the post office. Use this name (which is
in my passport): "Abraham Moolenaar". Use Euro for the
currency if possible.
Europe: Use a bank transfer if possible. Your bank should have a form
that you can use for this. See "Others" below for the swift
code and IBAN number.
Europe: Use a bank transfer if possible. See "Others" below for the
swift code and IBAN number.
Any other method should work. Ask for information about
sponsorship.
@ -261,28 +247,12 @@ Credit Card: You can use PayPal to send money with a Credit card. This is
https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
The e-mail address for sending the money to is:
Bram@iccf-holland.org
For amounts above 400 Euro ($500) sending a check is
preferred.
Others: Transfer to one of these accounts if possible:
Postbank, account 4548774
Swift code: INGB NL 2A
IBAN: NL95 INGB 0004 5487 74
under the name "stichting ICCF Holland", Lisse
If that doesn't work:
Rabobank Lisse, account 3765.05.117
Swift code: RABO NL 2U
under the name "Bram Moolenaar", Lisse
Otherwise, send a check in euro or US dollars to the address
below. Minimal amount: $70 (my bank does not accept smaller
amounts for foreign check, sorry)
Others: Transfer to this account if possible:
ING bank: IBAN: NL95 INGB 0004 5487 74
Swift code: INGBNL2A
under the name "stichting ICCF Holland", Amersfoort
Checks are not accepted.
Address to send checks to:
Bram Moolenaar
Finsterruetihof 1
8134 Adliswil
Switzerland
This address is expected to be valid for a long time.
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@ -286,12 +286,12 @@ history file. E.g.: >
au BufReadPost * call ReadUndo()
au BufWritePost * call WriteUndo()
func ReadUndo()
if filereadable(expand('%:h'). '/UNDO/' . expand('%:t'))
if filereadable(expand('%:h') .. '/UNDO/' .. expand('%:t'))
rundo %:h/UNDO/%:t
endif
endfunc
func WriteUndo()
let dirname = expand('%:h') . '/UNDO'
let dirname = expand('%:h') .. '/UNDO'
if !isdirectory(dirname)
call mkdir(dirname)
endif

View File

@ -270,7 +270,7 @@ line break. Revert with ":iunmap <C-U>".
Enable using the mouse if available. See 'mouse'.
>
vnoremap _g y:exe "grep /" . escape(@", '\\/') . "/ *.c *.h"<CR>
vnoremap _g y:exe "grep /" .. escape(@", '\\/') .. "/ *.c *.h"<CR>
This mapping yanks the visually selected text and searches for it in C files.
You can see that a mapping can be used to do quite complicated things. Still,

View File

@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 8.2. Last change: 2022 Jan 01
*usr_41.txt* For Vim version 8.2. Last change: 2022 Feb 11
VIM USER MANUAL - by Bram Moolenaar
@ -162,7 +162,7 @@ and avoid errors. Such as thinking that the "-0o36" above makes the number
negative, while it is actually seen as a subtraction.
To actually have the minus sign be used for negation, you can put the second
expression in parenthesis: >
expression in parentheses: >
echo -0x7f (-0o36)
@ -1116,8 +1116,7 @@ Testing: *test-functions*
test_garbagecollect_now() free memory right now
test_garbagecollect_soon() set a flag to free memory soon
test_getvalue() get value of an internal variable
test_gui_drop_files() drop file(s) in a window
test_gui_mouse_event() add a GUI mouse event to the input buffer
test_gui_event() generate a GUI event for testing
test_ignore_error() ignore a specific error message
test_null_blob() return a null Blob
test_null_channel() return a null Channel
@ -1131,7 +1130,6 @@ Testing: *test-functions*
test_setmouse() set the mouse position
test_feedinput() add key sequence to input buffer
test_option_not_set() reset flag indicating option was set
test_scrollbar() simulate scrollbar movement in the GUI
test_refcount() return an expression's reference count
test_srand_seed() set the seed value for srand()
test_unknown() return a value with unknown type
@ -2502,7 +2500,7 @@ When the user does ":setfiletype xyz" the effect of the previous filetype
should be undone. Set the b:undo_ftplugin variable to the commands that will
undo the settings in your filetype plugin. Example: >
b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
\ .. "| unlet b:match_ignorecase b:match_words b:match_skip"
Using ":setlocal" with "<" after the option name resets the option to its
@ -2514,6 +2512,8 @@ continuation, as mentioned above |use-cpo-save|.
For undoing the effect of an indent script, the b:undo_indent variable should
be set accordingly.
Both these variables use legacy script syntax, not |Vim9| syntax.
FILE NAME

View File

@ -1,4 +1,4 @@
*various.txt* For Vim version 8.2. Last change: 2022 Jan 15
*various.txt* For Vim version 8.2. Last change: 2022 Feb 03
VIM REFERENCE MANUAL by Bram Moolenaar
@ -267,7 +267,7 @@ g8 Print the hex values of the bytes used in the
name does not contain a single quote: >
:!ls '%'
< This should always work, but it's more typing: >
:exe "!ls " . shellescape(expand("%"))
:exe "!ls " .. shellescape(expand("%"))
< To get a literal "%" or "#" prepend it with a
backslash. For example, to list all files starting
with "%": >
@ -410,6 +410,7 @@ T *+mouse* Mouse handling |mouse-using|
N *+mouseshape* |'mouseshape'|
B *+mouse_dec* Unix only: Dec terminal mouse handling |dec-mouse|
N *+mouse_gpm* Unix only: Linux console mouse handling |gpm-mouse|
m *+mouse_gpm/dyn* Same as |+mouse_gpm| with optional library dependency |/dyn|
N *+mouse_jsbterm* JSB mouse handling |jsbterm-mouse|
B *+mouse_netterm* Unix only: netterm mouse handling |netterm-mouse|
N *+mouse_pterm* QNX only: pterm mouse handling |qnx-terminal|
@ -424,7 +425,7 @@ m *+mzscheme* Mzscheme interface |mzscheme|
m *+mzscheme/dyn* Mzscheme interface |mzscheme-dynamic| |/dyn|
m *+netbeans_intg* |netbeans|
T *+num64* 64-bit Number support |Number|
Always enabled since 8.2.0271, use v:numbersize to
Always enabled since 8.2.0271, use v:numbersize to
check the actual size of a Number.
m *+ole* Win32 GUI only: |ole-interface|
N *+packages* Loading |packages|
@ -549,7 +550,7 @@ N *+X11* Unix only: can restore window title |X11|
backward compatibility, the ">" after the register
name can be omitted.
:redi[r] @">> Append messages to the unnamed register.
*E1092*
:redi[r] => {var} Redirect messages to a variable.
In legacy script: If the variable doesn't exist, then
it is created. If the variable exists, then it is
@ -566,7 +567,7 @@ N *+X11* Unix only: can restore window title |X11|
:redi[r] =>> {var} Append messages to an existing variable. Only string
variables can be used.
*E1185*
:redi[r] END End redirecting messages.
*:filt* *:filter*
@ -649,7 +650,7 @@ N *+X11* Unix only: can restore window title |X11|
used. In this example |:silent| is used to avoid the
message about reading the file and |:unsilent| to be
able to list the first line of each file. >
:silent argdo unsilent echo expand('%') . ": " . getline(1)
:silent argdo unsilent echo expand('%') .. ": " .. getline(1)
<
*:verb* *:verbose*

File diff suppressed because it is too large Load Diff

26799
runtime/doc/version9.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
.TH VIM 1 "2006 Apr 11"
.TH VIM 1 "2021 Jun 13"
.SH 名前
vim \- Vi IMproved, プログラマのテキストエディタ
.SH 書式

View File

@ -1,4 +1,4 @@
.TH VIM 1 "2006 Apr 11"
.TH VIM 1 "2021 Jun 13"
.SH NAME
vim \- Vi IMproved, a programmer's text editor
.SH SYNOPSIS

View File

@ -432,4 +432,4 @@ BUGS
2006 Apr 11 VIM(1)
2021 Jun 13 VIM(1)

View File

@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 18
*vim9.txt* For Vim version 8.2. Last change: 2022 Feb 23
VIM REFERENCE MANUAL by Bram Moolenaar
@ -56,14 +56,14 @@ Vim9 script and legacy Vim script can be mixed. There is no requirement to
rewrite old scripts, they keep working as before. You may want to use a few
`:def` functions for code that needs to be fast.
:vim9[cmd] {cmd} *:vim9* *:vim9cmd*
Execute {cmd} using Vim9 script syntax and semantics.
Useful when typing a command and in a legacy script or
function.
:vim9[cmd] {cmd} *:vim9* *:vim9cmd* *E1164*
Evaluate and execute {cmd} using Vim9 script syntax and
semantics. Useful when typing a command and in a legacy
script or function.
:leg[acy] {cmd} *:leg* *:legacy*
Execute {cmd} using legacy script syntax and semantics. Only
useful in a Vim9 script or a :def function.
:leg[acy] {cmd} *:leg* *:legacy* *E1189* *E1234*
Evaluate and execute {cmd} using legacy script syntax and
semantics. Only useful in a Vim9 script or a :def function.
Note that {cmd} cannot use local variables, since it is parsed
with legacy expression syntax.
@ -72,7 +72,7 @@ rewrite old scripts, they keep working as before. You may want to use a few
2. Differences from legacy Vim script *vim9-differences*
Overview ~
*E1146*
Brief summary of the differences you will most often encounter when using Vim9
script and `:def` functions; details are below:
- Comments start with #, not ": >
@ -82,7 +82,7 @@ script and `:def` functions; details are below:
.. yourName
.. ", how are you?"
- White space is required in many places to improve readability.
- Assign values without `:let`, declare variables with `:var`: >
- Assign values without `:let` *E1126* , declare variables with `:var`: >
var count = 0
count += 3
- Constants can be declared with `:final` and `:const`: >
@ -128,7 +128,7 @@ To improve readability there must be a space between a command and the #
that starts a comment: >
var name = value # comment
var name = value# error!
< *E1170*
Do not start a comment with #{, it looks like the legacy dictionary literal
and produces an error where this might be confusing. #{{ or #{{{ are OK,
these can be used to start a fold.
@ -139,7 +139,7 @@ arguments).
Vim9 functions ~
*E1099*
A function defined with `:def` is compiled. Execution is many times faster,
often 10 to 100 times.
@ -153,7 +153,7 @@ Compilation is done when any of these is encountered:
- `:disassemble` is used for the function.
- a function that is compiled calls the function or uses it as a function
reference (so that the argument and return types can be checked)
*E1091*
*E1091* *E1191*
If compilation fails it is not tried again on the next call, instead this
error is given: "E1091: Function is not compiled: {name}".
Compilation will fail when encountering a user command that has not been
@ -183,14 +183,14 @@ You can call a legacy dict function though: >
var d = {func: Legacy, value: 'text'}
d.func()
enddef
< *E1096* *E1174* *E1175*
The argument types and return type need to be specified. The "any" type can
be used, type checking will then be done at runtime, like with legacy
functions.
*E1106*
Arguments are accessed by name, without "a:", just like any other language.
There is no "a:" dictionary or "a:000" list.
*vim9-variable-arguments*
*vim9-variable-arguments* *E1055* *E1160* *E1180*
Variable arguments are defined as the last argument, with a name and have a
list type, similar to TypeScript. For example, a list of numbers: >
def MyFunc(...itemlist: list<number>)
@ -206,7 +206,7 @@ should use its default value. Example: >
enddef
MyFunc(v:none, 'LAST') # first argument uses default value 'one'
<
*vim9-ignored-argument*
*vim9-ignored-argument* *E1181*
The argument "_" (an underscore) can be used to ignore the argument. This is
most useful in callbacks where you don't need it, but do need to give an
argument to match the call. E.g. when using map() two arguments are passed,
@ -219,34 +219,47 @@ be given.
Functions and variables are script-local by default ~
*vim9-scopes*
When using `:function` or `:def` to specify a new function at the script level
in a Vim9 script, the function is local to the script, as if "s:" was
prefixed. Using the "s:" prefix is optional. To define a global function or
variable the "g:" prefix must be used. For functions in an autoload script
the "name#" prefix is sufficient. >
in a Vim9 script, the function is local to the script. Like prefixing "s:" in
legacy script. To define a global function or variable the "g:" prefix must
be used. For functions in a script that is to be imported and in an autoload
script "export" needs to be used. >
def ThisFunction() # script-local
def s:ThisFunction() # script-local
def g:ThatFunction() # global
def scriptname#function() # autoload
export def Function() # for import and import autoload
< *E1058* *E1075*
When using `:function` or `:def` to specify a nested function inside a `:def`
function and no namespace was given, this nested function is local to the code
block it is defined in. In a `:def` function it is not possible to define a
script-local function. It is possible to define a global function by using
the "g:" prefix.
block it is defined in. It cannot be used in `function()` with a string
argument, pass the function reference itself: >
def Outer()
def Inner()
echo 'inner'
enddef
var Fok = function(Inner) # OK
var Fbad = function('Inner') # does not work
It is not possible to define a script-local function. It is possible to
define a global function by using the "g:" prefix.
When referring to a function and no "s:" or "g:" prefix is used, Vim will
search for the function:
- in the function scope, in block scopes
- in the script scope, possibly imported
- in the list of global functions
However, it is recommended to always use "g:" to refer to a global function
for clarity.
Since a script-local function reference can be used without "s:" the name must
start with an upper case letter even when using the "s:" prefix. In legacy
script "s:funcref" could be used, because it could not be referred to with
"funcref". In Vim9 script it can, therefore "s:Funcref" must be used to avoid
that the name interferes with builtin functions.
*vim9-s-namespace*
The use of the "s:" prefix is not supported at the Vim9 script level. All
functions and variables without a prefix are script-local.
In :def functions the use of "s:" depends on the script: Script-local
variables and functions in a legacy script do use "s:", while in a Vim9 script
they do not use "s:". This matches what you see in the rest of the file.
In legacy functions the use of "s:" for script items is required, as before.
In all cases the function must be defined before used. That is when it is
called, when `:defcompile` causes it to be compiled, or when code that calls
@ -255,7 +268,7 @@ it is being compiled (to figure out the return type).
The result is that functions and variables without a namespace can usually be
found in the script, either defined there or imported. Global functions and
variables could be defined anywhere (good luck finding out where!).
*E1102*
Global functions can still be defined and deleted at nearly any time. In
Vim9 script script-local functions are defined once when the script is sourced
and cannot be deleted or replaced.
@ -267,7 +280,7 @@ You can use an autoload function if needed, or call a legacy function and have
Reloading a Vim9 script clears functions and variables by default ~
*vim9-reload*
*vim9-reload* *E1149* *E1150*
When loading a legacy Vim script a second time nothing is removed, the
commands will replace existing variables and functions and create new ones.
@ -280,16 +293,20 @@ If you do want to keep items, use: >
vim9script noclear
You want to use this in scripts that use a `finish` command to bail out at
some point when loaded again. E.g. when a buffer local option is set: >
some point when loaded again. E.g. when a buffer local option is set to a
function, the function does not need to be defined more than once: >
vim9script noclear
setlocal completefunc=SomeFunc
if exists('*g:SomeFunc') | finish | endif
def g:SomeFunc()
if exists('*SomeFunc')
finish
endif
def SomeFunc()
....
Variable declarations with :var, :final and :const ~
*vim9-declaration* *:var*
*vim9-declaration* *:var*
*E1017* *E1020* *E1054* *E1087* *E1108* *E1124*
Local variables need to be declared with `:var`. Local constants need to be
declared with `:final` or `:const`. We refer to both as "variables" in this
section.
@ -320,7 +337,7 @@ The declaration must be done earlier: >
inner = 0
endif
echo inner
< *E1025* *E1128*
To intentionally hide a variable from code that follows, a block can be
used: >
{
@ -347,23 +364,24 @@ And with autocommands: >
}
Although using a :def function probably works better.
*E1022* *E1103* *E1130* *E1131* *E1133*
*E1134* *E1235*
Declaring a variable with a type but without an initializer will initialize to
false (for bool), empty (for string, list, dict, etc.) or zero (for number,
any, etc.). This matters especially when using the "any" type, the value will
default to the number zero.
*E1016* *E1052* *E1066*
In Vim9 script `:let` cannot be used. An existing variable is assigned to
without any command. The same for global, window, tab, buffer and Vim
variables, because they are not really declared. Those can also be deleted
with `:unlet`.
*E1178*
`:lockvar` does not work on local variables. Use `:const` and `:final`
instead.
The `exists()` and `exists_compiled()` functions do not work on local variables
or arguments.
*E1006* *E1041* *E1167* *E1168* *E1213*
Variables, functions and function arguments cannot shadow previously defined
or imported variables and functions in the same script file.
Variables may shadow Ex commands, rename the variable if needed.
@ -374,13 +392,12 @@ Global variables must be prefixed with "g:", also at the script level. >
g:global = 'value'
var Funcref = g:ThatFunction
Global functions must be prefixed with "g:" when defining them, but can be
called without "g:". >
Global functions must be prefixed with "g:": >
vim9script
def g:GlobalFunc(): string
return 'text'
enddef
echo GlobalFunc()
echo g:GlobalFunc()
The "g:" prefix is not needed for auto-load functions.
*vim9-function-defined-later*
@ -417,7 +434,7 @@ similar to how a function argument can be ignored: >
[a, _, c] = theList
To ignore any remaining items: >
[a, b; _] = longList
< *E1163* *E1080*
Declaring more than one variable at a time, using the unpack notation, is
possible. Each variable can have a type or infer it from the value: >
var [v1: number, v2] = GetValues()
@ -431,7 +448,7 @@ How constants work varies between languages. Some consider a variable that
can't be assigned another value a constant. JavaScript is an example. Others
also make the value immutable, thus when a constant uses a list, the list
cannot be changed. In Vim9 we can use both.
*E1021*
`:const` is used for making both the variable and the value a constant. Use
this for composite structures that you want to make sure will not be modified.
Example: >
@ -439,7 +456,7 @@ Example: >
myList = [3, 4] # Error!
myList[0] = 9 # Error!
myList->add(3) # Error!
< *:final*
< *:final* *E1125*
`:final` is used for making only the variable a constant, the value can be
changed. This is well known from Java. Example: >
final myList = [1, 2]
@ -459,7 +476,7 @@ The constant only applies to the value itself, not what it refers to. >
Omitting :call and :eval ~
*E1190*
Functions can be called without `:call`: >
writefile(lines, 'file')
Using `:call` is still possible, but this is discouraged.
@ -519,7 +536,8 @@ because of the use of argument types.
To avoid these problems Vim9 script uses a different syntax for a lambda,
which is similar to JavaScript: >
var Lambda = (arg) => expression
var Lambda = (arg): type => expression
< *E1157*
No line break is allowed in the arguments of a lambda up to and including the
"=>" (so that Vim can tell the difference between an expression in parentheses
and lambda arguments). This is OK: >
@ -535,7 +553,7 @@ But you can use a backslash to concatenate the lines before parsing: >
filter(list, (k,
\ v)
\ => v > 0)
< *vim9-lambda-arguments*
< *vim9-lambda-arguments* *E1172*
In legacy script a lambda could be called with any number of extra arguments,
there was no way to warn for not using them. In Vim9 script the number of
arguments must match. If you do want to accept any arguments, or any further
@ -544,7 +562,7 @@ arguments, use "..._", which makes the function accept
var Callback = (..._) => 'anything'
echo Callback(1, 2, 3) # displays "anything"
< *inline-function*
< *inline-function* *E1171*
Additionally, a lambda can contain statements in {}: >
var Lambda = (arg) => {
g:was_called = 'yes'
@ -564,7 +582,7 @@ characters, e.g.: >
})
No command can follow the "{", only a comment can be used there.
*command-block*
*command-block* *E1026*
The block can also be used for defining a user command. Inside the block Vim9
syntax will be used.
@ -599,7 +617,7 @@ Also when confused with the start of a command block: >
Automatic line continuation ~
*vim9-line-continuation*
*vim9-line-continuation* *E1097*
In many cases it is obvious that an expression continues on the next line. In
those cases there is no need to prefix the line with a backslash (see
|line-continuation|). For example, when a list spans multiple lines: >
@ -684,6 +702,11 @@ This will assign "start" and print a line: >
var result = start
:+ print
After the range an Ex command must follow. Without the colon you can call a
function without `:call`, but after a range you do need it: >
MyFunc()
:% call MyFunc()
Note that the colon is not required for the |+cmd| argument: >
edit +6 fname
@ -702,6 +725,7 @@ second line is seen as a separate command: >
Now "exit_cb: Func})" is actually a valid command: save any changes to the
file "_cb: Func})" and exit. To avoid this kind of mistake in Vim9 script
there must be white space between most command names and the argument.
*E1144*
However, the argument of a command that is a command won't be recognized. For
example, after "windo echo expr" a line break inside "expr" will not be seen.
@ -732,7 +756,7 @@ Notes:
White space ~
*E1004* *E1068* *E1069* *E1074* *E1127* *E1202*
Vim9 script enforces proper use of white space. This is no longer allowed: >
var name=234 # Error!
var name= 234 # Error!
@ -766,7 +790,7 @@ White space is not allowed:
Func(
arg # OK
)
< *E1205*
White space is not allowed in a `:set` command between the option name and a
following "&", "!", "<", "=", "+=", "-=" or "^=".
@ -776,8 +800,13 @@ No curly braces expansion ~
|curly-braces-names| cannot be used.
Command modifiers are not ignored ~
*E1176*
Using a command modifier for a command that does not use it gives an error.
Dictionary literals ~
*vim9-literal-dict*
*vim9-literal-dict* *E1014*
Traditionally Vim has supported dictionary literals with a {} syntax: >
let dict = {'key': value}
@ -797,7 +826,7 @@ use another character, use a single or double quoted string: >
var dict = {'key with space': value}
var dict = {"key\twith\ttabs": value}
var dict = {'': value} # empty key
< *E1139*
In case the key needs to be an expression, square brackets can be used, just
like in JavaScript: >
var dict = {["key" .. nr]: value}
@ -810,7 +839,7 @@ error. A number can be given with and without the []: >
No :xit, :t, :k, :append, :change or :insert ~
*E1100*
These commands are too easily confused with local variable names.
Instead of `:x` or `:xit` you can use `:exit`.
Instead of `:t` you can use `:copy`.
@ -820,6 +849,7 @@ Instead of `:k` you can use `:mark`.
Comparators ~
The 'ignorecase' option is not used for comparators that use strings.
Thus "=~" works like "=~#".
Abort after error ~
@ -834,7 +864,7 @@ error. Example: >
For loop ~
*E1254*
The loop variable must not be declared yet: >
var i = 1
for i in [1, 2, 3] # Error!
@ -867,7 +897,7 @@ first if needed.
Conditions and expressions ~
*vim9-boolean*
*vim9-boolean*
Conditions and expressions are mostly working like they do in other languages.
Some values are different from legacy Vim script:
value legacy Vim script Vim9 script ~
@ -921,7 +951,7 @@ always converted to string: >
Simple types are Number, Float, Special and Bool. For other types |string()|
should be used.
*false* *true* *null*
*false* *true* *null* *E1034*
In Vim9 script one can use "true" for v:true, "false" for v:false and "null"
for v:null. When converting a boolean to a string "false" and "true" are
used, not "v:false" and "v:true" like in legacy script. "v:none" is not
@ -1064,15 +1094,19 @@ Using ++var or --var in an expression is not supported yet.
3. New style functions *fast-functions*
*:def*
*:def* *E1028*
:def[!] {name}([arguments])[: {return-type}]
Define a new function by the name {name}. The body of
the function follows in the next lines, until the
matching `:enddef`.
When {return-type} is omitted or is "void" the
function is not expected to return anything.
matching `:enddef`. *E1073*
*E1011*
The {name} must be less than 100 bytes long.
*E1003* *E1027* *E1056* *E1059*
The type of value used with `:return` must match
{return-type}. When {return-type} is omitted or is
"void" the function is not expected to return
anything.
*E1077* *E1123*
{arguments} is a sequence of zero or more argument
declarations. There are three forms:
{name}: {type}
@ -1090,13 +1124,13 @@ Using ++var or --var in an expression is not supported yet.
It is possible to nest `:def` inside another `:def` or
`:function` up to about 50 levels deep.
*E1117*
[!] is used as with `:function`. Note that
script-local functions cannot be deleted or redefined
later in Vim9 script. They can only be removed by
reloading the same script.
*:enddef*
*:enddef* *E1057* *E1152* *E1173*
:enddef End of a function defined with `:def`. It should be on
a line by its own.
@ -1116,7 +1150,7 @@ prefix if they do not exist at the time of compiling.
*:disa* *:disassemble*
:disa[ssemble] {func} Show the instructions generated for {func}.
This is for debugging and testing.
This is for debugging and testing. *E1061*
Note that for command line completion of {func} you
can prepend "s:" to find script-local functions.
@ -1175,10 +1209,72 @@ for each closure call a function to define it: >
echo range(5)->map((i, _) => flist[i]())
# Result: [0, 1, 2, 3, 4]
In some situations, especially when calling a Vim9 closure from legacy
context, the evaluation will fail. *E1248*
Converting a function from legacy to Vim9 ~
*convert_legacy_function_to_vim9*
These are the most changes that need to be made to convert a legacy function
to a Vim9 function:
- Change `func` or `function` to `def`.
- Change `endfunc` or `endfunction` to `enddef`.
- Add types to the function arguments.
- If the function returns something, add the return type.
- Change comments to start with # instead of ".
For example, a legacy function: >
func MyFunc(text)
" function body
endfunc
< Becomes: >
def MyFunc(text: string): number
# function body
enddef
- Remove "a:" used for arguments. E.g.: >
return len(a:text)
< Becomes: >
return len(text)
- Change `let` used to declare a variable to `var`.
- Remove `let` used to assign a value to a variable. This is for local
variables already declared and b: w: g: and t: variables.
For example, legacy function: >
let lnum = 1
let lnum += 3
let b:result = 42
< Becomes: >
var lnum = 1
lnum += 3
b:result = 42
- Insert white space in expressions where needed.
- Change "." used for concatenation to "..".
For example, legacy function: >
echo line(1).line(2)
< Becomes: >
echo line(1) .. line(2)
- line continuation does not always require a backslash: >
echo ['one',
\ 'two',
\ 'three'
\ ]
< Becomes: >
echo ['one',
'two',
'three'
]
==============================================================================
4. Types *vim9-types*
*E1008* *E1009* *E1010* *E1012*
*E1013* *E1029* *E1030*
The following builtin types are supported:
bool
number
@ -1193,17 +1289,19 @@ The following builtin types are supported:
func: {type}
func({type}, ...)
func({type}, ...): {type}
void
Not supported yet:
tuple<a: {type}, b: {type}, ...>
These types can be used in declarations, but no simple value will actually
have the "void" type.
have the "void" type. Trying to use a void (e.g. a function without a
return value) results in error *E1031* *E1186* .
There is no array type, use list<{type}> instead. For a list constant an
efficient implementation is used that avoids allocating lot of small pieces of
memory.
*E1005* *E1007*
A partial and function can be declared in more or less specific ways:
func any kind of function reference, no type
checking for arguments or return value
@ -1275,7 +1373,7 @@ expected to always be the same. For example, when declaring a list: >
At compile time Vim doesn't know the type of "g:two" and the expression type
becomes list<any>. An instruction is generated to check the list type before
doing the assignment, which is a bit inefficient.
*type-casting*
*type-casting* *E1104*
To avoid this, use a type cast: >
var l: list<number> = [1, <number>g:two]
The compiled code will then only check that "g:two" is a number and give an
@ -1320,6 +1418,24 @@ Results in:
For script-local variables in Vim9 script the type is checked, also when the
variable was declared in a legacy function.
When a type has been declared this is attached to a List or Dictionary. When
later some expression attempts to change the type an error will be given: >
var ll: list<number> = [1, 2, 3]
ll->extend(['x']) # Error, 'x' is not a number
If the type is not declared then it is allowed to change: >
[1, 2, 3]->extend(['x']) # result: [1, 2, 3, 'x']
For a variable declaration an inferred type matters: >
var ll = [1, 2, 3]
ll->extend(['x']) # Error, 'x' is not a number
That is because the declaration looks like a list of numbers, thus is
equivalent to: >
var ll: list<number> = [1, 2, 3]
If you do want a more permissive list you need to declare the type: >
var ll: list<any = [1, 2, 3]
ll->extend(['x']) # OK
Stricter type checking ~
*type-checking*
@ -1327,32 +1443,67 @@ In legacy Vim script, where a number was expected, a string would be
automatically converted to a number. This was convenient for an actual number
such as "123", but leads to unexpected problems (and no error message) if the
string doesn't start with a number. Quite often this leads to hard-to-find
bugs.
bugs. e.g.: >
echo 123 == '123'
< 1 ~
With an accidental space: >
echo 123 == ' 123'
< 0 ~
*E1206* *E1210* *E1212*
In Vim9 script this has been made stricter. In most places it works just as
before, if the value used matches the expected type. There will sometimes be
before if the value used matches the expected type. There will sometimes be
an error, thus breaking backwards compatibility. For example:
- Using a number other than 0 or 1 where a boolean is expected. *E1023*
- Using a string value when setting a number option.
- Using a number where a string is expected. *E1024*
- Using a number where a string is expected. *E1024* *E1105*
One consequence is that the item type of a list or dict given to |map()| must
not change. This will give an error in Vim9 script: >
echo map([1, 2, 3], (i, v) => 'item ' .. i)
E1012: Type mismatch; expected number but got string
Instead use |mapnew()|: >
echo mapnew([1, 2, 3], (i, v) => 'item ' .. i)
['item 0', 'item 1', 'item 2']
not change, if the type was declared. This will give an error in Vim9
script: >
var mylist: list<number> = [1, 2, 3]
echo map(mylist, (i, v) => 'item ' .. i)
< E1012: Type mismatch; expected number but got string in map() ~
If the item type was determined to be "any" it can change to a more specific
type. E.g. when a list of mixed types gets changed to a list of strings: >
Instead use |mapnew()|, it creates a new list: >
var mylist: list<number> = [1, 2, 3]
echo mapnew(mylist, (i, v) => 'item ' .. i)
< ['item 0', 'item 1', 'item 2'] ~
If the item type was not declared or determined to be "any" it can change to a
more specific type. E.g. when a list of mixed types gets changed to a list of
strings: >
var mylist = [1, 2.0, '3']
# typename(mylist) == "list<any>"
map(mylist, (i, v) => 'item ' .. i)
# typename(mylist) == "list<string>", no error
There is a subtle difference between using a list constant directly and
through a variable declaration. Because of type inference, when using a list
constant to initialize a variable, this also sets the declared type: >
var mylist = [1, 2, 3]
# typename(mylist) == "list<number>"
echo map(mylist, (i, v) => 'item ' .. i) # Error!
When using the list constant directly, the type is not declared and is allowed
to change: >
echo map([1, 2, 3], (i, v) => 'item ' .. i) # OK
The reasoning behind this is that when a type is declared and the list is
passed around and changed, the declaration must always hold. So that you can
rely on the type to match the declared type. For a constant this is not
needed.
*E1158*
Same for |extend()|, use |extendnew()| instead, and for |flatten()|, use
|flattennew()| instead.
|flattennew()| instead. Since |flatten()| is intended to always change the
type, it can not be used in Vim9 script.
*E1211* *E1217* *E1218* *E1219* *E1220* *E1221*
*E1222* *E1223* *E1224* *E1225* *E1226* *E1227*
*E1228* *E1238* *E1250* *E1251* *E1252* *E1253*
*E1256*
Types are checked for most builtin functions to make it easier to spot
mistakes.
==============================================================================
@ -1385,7 +1536,7 @@ global namespace. If a file starts with: >
var myvar = 'yes'
Then "myvar" will only exist in this file. While without `vim9script` it would
be available as `g:myvar` from any other script and function.
*E1101*
The variables at the file level are very much like the script-local "s:"
variables in legacy Vim script, but the "s:" is omitted. And they cannot be
deleted.
@ -1432,7 +1583,7 @@ Exporting an item can be written as: >
export def MyFunc() ...
export class MyClass ...
export interface MyClass ...
< *E1043* *E1044*
As this suggests, only constants, variables, `:def` functions and classes can
be exported. {not implemented yet: class, interface}
@ -1441,19 +1592,23 @@ be exported. {not implemented yet: class, interface}
Import ~
*:import* *:imp* *E1094*
*:import* *:imp* *E1094* *E1047* *E1262*
*E1048* *E1049* *E1053* *E1071* *E1236*
The exported items can be imported in another Vim9 script: >
import "myscript.vim"
This makes each item available as "myscript.item".
*:import-as* *E1257* *E1261*
In case the name is long or ambiguous, another name can be specified: >
import "thatscript.vim" as that
< *E1060* *E1258* *E1259* *E1260*
Then you can use "that.EXPORTED_CONST", "that.someValue", etc. You are free
to choose the name "that". Use something that will be recognized as referring
to the imported script. Avoid command names and builtin function names,
because the name will shadow them.
to the imported script. Avoid command names, command modifiers and builtin
function names, because the name will shadow them.
If the name starts with a capital letter it can also shadow global user
commands and functions. Also, you cannot use the name for something else in
the script, such as a function or variable name.
In case the dot in the name is undesired, a local reference can be made for a
function: >
@ -1466,6 +1621,12 @@ This does not work for variables, since the value would be copied once and
when changing the variable the copy will change, not the original variable.
You will need to use the full name, with the dot.
The full syntax of the command is:
import {filename} [as {name}]
Where {filename} is an expression that must evaluate to a string. Without the
"as {name}" part it must end in ".vim". {name} must consist of letters,
digits and '_', like |internal-variables|.
`:import` can also be used in legacy Vim script. The imported items still
become script-local, even when the "s:" prefix is not given.
@ -1498,17 +1659,19 @@ line, there can be no line break: >
echo that
.name # Error!
< *:import-cycle*
The `import` commands are executed when encountered. If that script (directly
or indirectly) imports the current script, then items defined after the
`import` won't be processed yet. Therefore cyclic imports can exist, but may
result in undefined items.
The `import` commands are executed when encountered. If script A imports
script B, and B (directly or indirectly) imports A, this will be skipped over.
At this point items in A after "import B" will not have been processed and
defined yet. Therefore cyclic imports can exist and not result in an error
directly, but may result in an error for items in A after "import B" not being
defined. This does not apply to autoload imports, see the next section.
Importing an autoload script ~
*vim9-autoload*
For optimal startup speed, loading scripts should be postponed until they are
actually needed. Using the autoload mechanism is recommended:
*E1264*
1. In the plugin define user commands, functions and/or mappings that refer to
items imported from an autoload script. >
import autoload 'for/search.vim'
@ -1724,6 +1887,9 @@ Specific items from TypeScript we avoid:
- TypeScript has various "Readonly" types, which have limited usefulness,
since a type cast can remove the immutable nature. Vim locks the value,
which is more flexible, but is only checked at runtime.
- TypeScript has a complicated "import" statement that does not match how the
Vim import mechanism works. A much simpler mechanism is used instead, which
matches that the imported script is only sourced once.
Declarations ~

View File

@ -1,4 +1,4 @@
*visual.txt* For Vim version 8.2. Last change: 2021 Nov 21
*visual.txt* For Vim version 8.2. Last change: 2022 Jan 20
VIM REFERENCE MANUAL by Bram Moolenaar
@ -265,6 +265,7 @@ Additionally the following commands can be used:
X delete (2) |v_X|
Y yank (2) |v_Y|
p put |v_p|
P put without unnamed register overwrite |v_P|
J join (1) |v_J|
U make uppercase |v_U|
u make lowercase |v_u|

View File

@ -1,4 +1,4 @@
*windows.txt* For Vim version 8.2. Last change: 2022 Jan 08
*windows.txt* For Vim version 8.2. Last change: 2022 Feb 03
VIM REFERENCE MANUAL by Bram Moolenaar
@ -168,7 +168,7 @@ CTRL-W CTRL-S *CTRL-W_CTRL-S*
Note: CTRL-S does not work on all terminals and might block
further input, use CTRL-Q to get going again.
Also see |++opt| and |+cmd|.
*E242*
*E242* *E1159*
Be careful when splitting a window in an autocommand, it may
mess up the window layout if this happens while making other
window layout changes.
@ -473,7 +473,7 @@ These commands can also be executed with ":wincmd":
the |CursorHold| autocommand event). Or when a Normal mode
command is inconvenient.
The count can also be a window number. Example: >
:exe nr . "wincmd w"
:exe nr .. "wincmd w"
< This goes to window "nr".
==============================================================================
@ -964,12 +964,12 @@ CTRL-W g } *CTRL-W_g}*
cursor. This is less clever than using |:ptag|, but you don't
need a tags file and it will also find matches in system
include files. Example: >
:au! CursorHold *.[ch] ++nested exe "silent! psearch " . expand("<cword>")
:au! CursorHold *.[ch] ++nested exe "silent! psearch " .. expand("<cword>")
< Warning: This can be slow.
Example *CursorHold-example* >
:au! CursorHold *.[ch] ++nested exe "silent! ptag " . expand("<cword>")
:au! CursorHold *.[ch] ++nested exe "silent! ptag " .. expand("<cword>")
This will cause a ":ptag" to be executed for the keyword under the cursor,
when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
@ -992,14 +992,14 @@ is no word under the cursor, and a few other things: >
:
: " Delete any existing highlight before showing another tag
: silent! wincmd P " jump to preview window
: if &previewwindow " if we really get there...
: if &previewwindow " if we really get there...
: match none " delete existing highlight
: wincmd p " back to old window
: endif
:
: " Try displaying a matching tag for the word under the cursor
: try
: exe "ptag " . w
: exe "ptag " .. w
: catch
: return
: endtry
@ -1011,10 +1011,10 @@ is no word under the cursor, and a few other things: >
: endif
: call search("$", "b") " to end of previous line
: let w = substitute(w, '\\', '\\\\', "")
: call search('\<\V' . w . '\>') " position cursor on match
: call search('\<\V' .. w .. '\>') " position cursor on match
: " Add a match highlight to the word at this position
: hi previewWord term=bold ctermbg=green guibg=green
: exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
: exe 'match previewWord "\%' .. line(".") .. 'l\%' .. col(".") .. 'c\k*"'
: wincmd p " back to old window
: endif
: endif

View File

@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2022 Jan 13
" Last Change: 2022 Feb 13
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@ -44,7 +44,7 @@ endif
" file name matches ft_ignore_pat.
" When using this, the entry should probably be further down below with the
" other StarSetf() calls.
func! s:StarSetf(ft)
func s:StarSetf(ft)
if expand("<amatch>") !~ g:ft_ignore_pat
exe 'setf ' . a:ft
endif
@ -193,7 +193,8 @@ au BufNewFile,BufRead *.awk,*.gawk setf awk
au BufNewFile,BufRead *.mch,*.ref,*.imp setf b
" BASIC or Visual Basic
au BufNewFile,BufRead *.bas call dist#ft#FTVB("basic")
au BufNewFile,BufRead *.bas call dist#ft#FTbas()
au BufNewFile,BufRead *.bi,*.bm call dist#ft#FTbas()
" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb
@ -202,7 +203,7 @@ au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb
au BufNewFile,BufRead *.iba,*.ibi setf ibasic
" FreeBasic file (similar to QBasic)
au BufNewFile,BufRead *.fb,*.bi setf freebasic
au BufNewFile,BufRead *.fb setf freebasic
" Batch file for MSDOS.
au BufNewFile,BufRead *.bat,*.sys setf dosbatch
@ -228,6 +229,9 @@ au BufNewFile,BufRead *.bib setf bib
" BibTeX Bibliography Style
au BufNewFile,BufRead *.bst setf bst
" Bicep
au BufNewFile,BufRead *.bicep setf bicep
" BIND configuration
" sudoedit uses namedXXXX.conf
au BufNewFile,BufRead named*.conf,rndc*.conf,rndc*.key setf named
@ -480,6 +484,7 @@ au BufNewFile,BufRead */etc/dnsmasq.conf setf dnsmasq
au BufNewFile,BufRead *.desc setf desc
" the D language or dtrace
au BufNewFile,BufRead */dtrace/*.d setf dtrace
au BufNewFile,BufRead *.d call dist#ft#DtraceCheck()
" Desktop files
@ -653,6 +658,9 @@ au BufNewFile,BufRead *.fsl setf framescript
" FStab
au BufNewFile,BufRead fstab,mtab setf fstab
" Fusion
au BufRead,BufNewFile *.fusion setf fusion
" F# or Forth
au BufNewFile,BufRead *.fs call dist#ft#FTfs()
@ -665,6 +673,12 @@ au BufNewFile,BufRead .gdbinit,gdbinit setf gdb
" GDMO
au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
" GDscript
au BufNewFile,BufRead *.gd setf gdscript
" Godot resource
au BufRead,BufNewFile *.tscn,*.tres setf gdresource
" Gedcom
au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
@ -677,8 +691,10 @@ autocmd BufRead,BufNewFile *.gift setf gift
" Git
au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
au BufNewFile,BufRead NOTES_EDITMSG,EDIT_DESCRIPTION setf gitcommit
au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig setf gitconfig
au BufNewFile,BufRead *.git/config,.gitconfig,*/etc/gitconfig setf gitconfig
au BufNewFile,BufRead */.config/git/config setf gitconfig
au BufNewFile,BufRead *.git/config.worktree setf gitconfig
au BufNewFile,BufRead *.git/worktrees/*/config.worktree setf gitconfig
au BufNewFile,BufRead .gitmodules,*.git/modules/*/config setf gitconfig
if !empty($XDG_CONFIG_HOME)
au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config setf gitconfig
@ -693,6 +709,9 @@ au BufNewFile,BufRead *.git/*
" Gkrellmrc
au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc
" GLSL
au BufNewFile,BufRead *.glsl setf glsl
" GP scripts (2.0 and onward)
au BufNewFile,BufRead *.gp,.gprc setf gp
@ -712,16 +731,24 @@ au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
au BufNewFile,BufRead gitolite.conf setf gitolite
au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc setf perl
" Glimmer-flavored TypeScript and JavaScript
au BufNewFile,BufRead *.gts setf typescript.glimmer
au BufNewFile,BufRead *.gjs setf javascript.glimmer
" Gnuplot scripts
au BufNewFile,BufRead *.gpi setf gnuplot
au BufNewFile,BufRead *.gpi,.gnuplot setf gnuplot
" Go (Google)
au BufNewFile,BufRead *.go setf go
au BufNewFile,BufRead Gopkg.lock setf toml
au BufRead,BufNewFile go.work setf gowork
" GrADS scripts
au BufNewFile,BufRead *.gs setf grads
" GraphQL
au BufNewFile,BufRead *.graphql,*.graphqls,*.gql setf graphql
" Gretl
au BufNewFile,BufRead *.gretl setf gretl
@ -737,12 +764,18 @@ au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/
" GTK RC
au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
" Hack
au BufRead,BufNewFile *.hack,*.hackpartial setf hack
" Haml
au BufNewFile,BufRead *.haml setf haml
" Hamster Classic | Playground files
au BufNewFile,BufRead *.hsm setf hamster
" Handlebars
au BufNewFile,BufRead *.hbs setf handlebars
" Haskell
au BufNewFile,BufRead *.hs,*.hsc,*.hs-boot,*.hsig setf haskell
au BufNewFile,BufRead *.lhs setf lhaskell
@ -755,12 +788,21 @@ au BufNewFile,BufRead cabal.config setf cabalconfig
au BufNewFile,BufRead *.ht setf haste
au BufNewFile,BufRead *.htpp setf hastepreproc
" HCL
au BufRead,BufNewFile *.hcl setf hcl
" Hercules
au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum setf hercules
" HEEx
au BufRead,BufNewFile *.heex setf heex
" HEX (Intel)
au BufNewFile,BufRead *.hex,*.h32 setf hex
" Hjson
au BufNewFile,BufRead *.hjson setf hjson
" Hollywood
au BufRead,BufNewFile *.hws setf hollywood
@ -885,6 +927,9 @@ au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial
" JSON
au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest setf json
" JSON5
au BufNewFile,BufRead *.json5 setf json5
" JSON Patch (RFC 6902)
au BufNewFile,BufRead *.json-patch setf json
@ -936,6 +981,9 @@ au BufNewFile,BufRead *.ldif setf ldif
" Ld loader
au BufNewFile,BufRead *.ld setf ld
" Ledger
au BufRead,BufNewFile *.ldg,*.ledger,*.journal setf ledger
" Less
au BufNewFile,BufRead *.less setf less
@ -1173,6 +1221,9 @@ au BufNewFile,BufRead *.nginx,nginx*.conf,*nginx.conf,*/etc/nginx/*,*/usr/local/
" Ninja file
au BufNewFile,BufRead *.ninja setf ninja
" Nix
au BufRead,BufNewFile *.nix setf nix
" NPM RC file
au BufNewFile,BufRead npmrc,.npmrc setf dosini
@ -1358,6 +1409,9 @@ au BufNewFile,BufRead *printcap
au BufNewFile,BufRead *termcap
\ let b:ptcap_type = "term" | setf ptcap
" Prisma
au BufRead,BufNewFile *.prisma setf prisma
" PCCTS / ANTLR
"au BufNewFile,BufRead *.g setf antlr
au BufNewFile,BufRead *.g setf pccts
@ -1365,6 +1419,9 @@ au BufNewFile,BufRead *.g setf pccts
" PPWizard
au BufNewFile,BufRead *.it,*.ih setf ppwiz
" Pug
au BufRead,BufNewFile *.pug setf pug
" Puppet
au BufNewFile,BufRead Puppetfile setf ruby
@ -1430,6 +1487,9 @@ au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc setf python
au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python
" QL
au BufRead,BufNewFile *.ql,*.qll setf ql
" Radiance
au BufNewFile,BufRead *.rad,*.mat setf radiance
@ -1495,6 +1555,9 @@ au BufNewFile,BufRead *.r,*.R call dist#ft#FTr()
" Remind
au BufNewFile,BufRead .reminders,*.remind,*.rem setf remind
" ReScript
au BufNewFile,BufRead *.res,*.resi setf rescript
" Resolv.conf
au BufNewFile,BufRead resolv.conf setf resolv
@ -1737,6 +1800,9 @@ au BufNewFile,BufRead *.mib,*.my setf mib
au BufNewFile,BufRead *.hog,snort.conf,vision.conf setf hog
au BufNewFile,BufRead *.rules call dist#ft#FTRules()
" Solidity
au BufRead,BufNewFile *.sol setf solidity
" SPARQL queries
au BufNewFile,BufRead *.rq,*.sparql setf sparql
@ -1834,6 +1900,9 @@ au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers
" SVG (Scalable Vector Graphics)
au BufNewFile,BufRead *.svg setf svg
" Surface
au BufRead,BufNewFile *.sface setf surface
" Tads (or Nroff or Perl test file)
au BufNewFile,BufRead *.t
\ if !dist#ft#FTnroff() && !dist#ft#FTperl() | setf tads | endif
@ -1851,6 +1920,9 @@ au BufRead,BufNewFile *.task setf taskedit
" Tcl (JACL too)
au BufNewFile,BufRead *.tcl,*.tm,*.tk,*.itcl,*.itk,*.jacl,.tclshrc,.wishrc setf tcl
" Teal
au BufRead,BufNewFile *.tl setf teal
" TealInfo
au BufNewFile,BufRead *.tli setf tli
@ -1868,6 +1940,9 @@ au BufRead,BufNewFile *.ttl
" Terminfo
au BufNewFile,BufRead *.ti setf terminfo
" Terraform
au BufRead,BufNewFile *.tfvars setf terraform
" TeX
au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
au BufNewFile,BufRead *.tex call dist#ft#FTtex()
@ -1885,7 +1960,13 @@ au BufNewFile,BufRead texmf.cnf setf texmf
au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf setf tidy
" TF mud client
au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf
au BufNewFile,BufRead .tfrc,tfrc setf tf
" TF mud client or terraform
au BufNewFile,BufRead *.tf call dist#ft#FTtf()
" TLA+
au BufNewFile,BufRead *.tla setf tla
" tmux configuration
au BufNewFile,BufRead {.,}tmux*.conf setf tmux
@ -1894,7 +1975,7 @@ au BufNewFile,BufRead {.,}tmux*.conf setf tmux
au BufNewFile,BufRead *.toml setf toml
" TPP - Text Presentation Program
au BufNewFile,BufReadPost *.tpp setf tpp
au BufNewFile,BufRead *.tpp setf tpp
" Treetop
au BufRead,BufNewFile *.treetop setf treetop
@ -1951,6 +2032,9 @@ au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart
au BufNewFile,BufRead */.config/upstart/*.conf setf upstart
au BufNewFile,BufRead */.config/upstart/*.override setf upstart
" Vala
au BufNewFile,BufRead *.vala setf vala
" Vera
au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera
@ -1981,7 +2065,7 @@ au BufRead,BufNewFile *.hw,*.module,*.pkg
\ endif
" Visual Basic (also uses *.bas) or FORM
au BufNewFile,BufRead *.frm call dist#ft#FTVB("form")
au BufNewFile,BufRead *.frm call dist#ft#FTfrm()
" SaxBasic is close to Visual Basic
au BufNewFile,BufRead *.sba setf vb
@ -2145,6 +2229,9 @@ au BufNewFile,BufRead *.raml setf raml
" yum conf (close enough to dosini)
au BufNewFile,BufRead */etc/yum.conf setf dosini
" YANG
au BufRead,BufNewFile *.yang setf yang
" Zimbu
au BufNewFile,BufRead *.zu setf zimbu
" Zimbu Templates
@ -2440,7 +2527,7 @@ endif
" Function called for testing all functions defined here. These are
" script-local, thus need to be executed here.
" Returns a string with error messages (hopefully empty).
func! TestFiletypeFuncs(testlist)
func TestFiletypeFuncs(testlist)
let output = ''
for f in a:testlist
try

View File

@ -1,35 +1,43 @@
" Vim support file to switch on loading plugins for file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2006 Apr 30
vim9script noclear
if exists("did_load_ftplugin")
# Vim support file to switch on loading plugins for file types
#
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last change: 2022 Feb 11
if exists("g:did_load_ftplugin")
finish
endif
let did_load_ftplugin = 1
g:did_load_ftplugin = 1
augroup filetypeplugin
au FileType * call s:LoadFTPlugin()
func! s:LoadFTPlugin()
if exists("b:undo_ftplugin")
exe b:undo_ftplugin
unlet! b:undo_ftplugin b:did_ftplugin
endif
let s = expand("<amatch>")
if s != ""
if &cpo =~# "S" && exists("b:did_ftplugin")
" In compatible mode options are reset to the global values, need to
" set the local values also when a plugin was already used.
unlet b:did_ftplugin
endif
" When there is a dot it is used to separate filetype names. Thus for
" "aaa.bbb" load "aaa" and then "bbb".
for name in split(s, '\.')
exe 'runtime! ftplugin/' . name . '.vim ftplugin/' . name . '_*.vim ftplugin/' . name . '/*.vim'
endfor
endif
endfunc
au FileType * call LoadFTPlugin()
augroup END
if exists('*LoadFTPlugin')
# No need to define the function again.
finish
endif
def LoadFTPlugin()
if exists("b:undo_ftplugin")
# We assume b:undo_ftplugin is using legacy script syntax
legacy exe b:undo_ftplugin
unlet! b:undo_ftplugin b:did_ftplugin
endif
var s = expand("<amatch>")
if s != ""
if &cpo =~# "S" && exists("b:did_ftplugin")
# In compatible mode options are reset to the global values, need to
# set the local values also when a plugin was already used.
unlet b:did_ftplugin
endif
# When there is a dot it is used to separate filetype names. Thus for
# "aaa.bbb" load "aaa" and then "bbb".
for name in split(s, '\.')
exe 'runtime! ftplugin/' .. name .. '.vim ftplugin/' .. name .. '_*.vim ftplugin/' .. name .. '/*.vim'
endfor
endif
enddef

View File

@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: BASIC
" Language: BASIC (QuickBASIC 4.5)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2015 Jan 10
" Last Change: 2021 Mar 16
if exists("b:did_ftplugin")
finish
@ -11,17 +11,46 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal comments=:REM,:'
setlocal comments=:REM\ ,:Rem\ ,:rem\ ,:'
setlocal commentstring='\ %s
setlocal formatoptions-=t formatoptions+=croql
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" .
\ "All Files (*.*)\t*.*\n"
" TODO: support exit ... as middle matches?
if exists("loaded_matchit") && !exists("b:match_words")
let s:line_start = '\%(^\s*\)\@<='
let s:not_end = '\%(end\s\+\)\@<!'
let s:not_end_or_exit = '\%(\%(end\|exit\)\s\+\)\@<!'
let b:match_ignorecase = 1
let b:match_words =
\ s:not_end_or_exit .. '\<def\s\+fn:\<end\s\+def\>,' ..
\ s:not_end_or_exit .. '\<function\>:\<end\s\+function\>,' ..
\ s:not_end_or_exit .. '\<sub\>:\<end\s\+sub\>,' ..
\ s:not_end .. '\<type\>:\<end\s\+type\>,' ..
\ s:not_end .. '\<select\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
\ '\<do\>:\<loop\>,' ..
\ '\<for\>\%(\s\+\%(input\|output\|random\|append\|binary\)\)\@!:\<next\>,' ..
\ '\<while\>:\<wend\>,' ..
\ s:line_start .. 'if\%(.*\<then\s*\%($\|''\)\)\@=:\<\%(' .. s:line_start .. 'else\|elseif\)\>:\<end\s\+if\>,' ..
\ '\<lock\>:\<unlock\>'
let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string" || ' ..
\ 'strpart(getline("."), 0, col(".") ) =~? "\\<exit\\s\\+"'
unlet s:line_start s:not_end s:not_end_or_exit
endif
let b:undo_ftplugin = "setl fo< com< cms< sua<" .
\ " | unlet! b:browsefilter"
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" ..
\ "BASIC Include Files (*.bi, *.bm)\t*.bi;*.bm\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = "setl fo< com< cms<" ..
\ " | unlet! b:match_ignorecase b:match_skip b:match_words" ..
\ " | unlet! b:browsefilter"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@ -1,13 +1,65 @@
" Vim filetype plugin file
" Language: FreeBasic
" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2015 Jan 10
" Last Change: 2021 Mar 16
" Setup {{{1
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
runtime! ftplugin/basic.vim
" vim: ts=8
let s:dialect = freebasic#GetDialect()
" Comments {{{1
" add ''comments before 'comments
let &l:comments = "sO:*\ -,mO:*\ \ ,exO:*/,s1:/',mb:',ex:'/,:''," .. &l:comments
" Match words {{{1
if exists("loaded_matchit")
let s:not_end = '\%(end\s\+\)\@<!'
let b:match_words ..= ','
if s:dialect == 'fb'
let b:match_words ..= s:not_end .. '\<constructor\>:\<end\s\+constructor\>,' ..
\ s:not_end .. '\<destructor\>:\<end\s\+destructor\>,' ..
\ s:not_end .. '\<property\>:\<end\s\+property\>,' ..
\ s:not_end .. '\<operator\>:\<end\s\+operator\>,' ..
\ s:not_end .. '\<extern\%(\s\+"\)\@=:\<end\s\+extern\>,'
endif
if s:dialect == 'fb' || s:dialect == 'deprecated'
let b:match_words ..= s:not_end .. '\<scope\>:\<end\s\+scope\>,'
endif
if s:dialect == 'qb'
let b:match_words ..= s:not_end .. '\<__asm\>:\<end\s\+__asm\>,' ..
\ s:not_end .. '\<__union\>:\<end\s\+__union\>,' ..
\ s:not_end .. '\<__with\>:\<end\s\+__with\>,'
else
let b:match_words ..= s:not_end .. '\<asm\>:\<end\s\+asm\>,' ..
\ s:not_end .. '\<namespace\>:\<end\s\+namespace\>,' ..
\ s:not_end .. '\<union\>:\<end\s\+union\>,' ..
\ s:not_end .. '\<with\>:\<end\s\+with\>,'
endif
let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' ..
\ '^#\s*\%(if\|ifdef\|ifndef\)\>:^#\s*\%(else\|elseif\)\>:^#\s*endif\>,' ..
\ '^#\s*macro\>:^#\s*endmacro\>'
" skip "function = <retval>"
let b:match_skip ..= '|| strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="'
unlet s:not_end
endif
" Cleanup {{{1
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

26
runtime/ftplugin/qb64.vim Normal file
View File

@ -0,0 +1,26 @@
" Vim filetype plugin file
" Language: QB64
" Maintainer: Doug Kearns <dougkearns@gmail.com>
if exists("b:did_ftplugin")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
runtime! ftplugin/basic.vim
let s:not_end = '\%(end\s\+\)\@<!'
let b:match_words ..= ',' ..
\ s:not_end .. '\<declare\>:\<end\s\+declare\>,' ..
\ '\<select\s\+everycase\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
\ '$IF\>:$\%(ELSEIF\|ELSE\)\>:$END\s*IF\>'
unlet s:not_end
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@ -1,13 +1,15 @@
" Vim support file to switch off loading plugins for file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2011 Oct 20
vim9script
if exists("did_load_ftplugin")
unlet did_load_ftplugin
# Vim support file to switch off loading plugins for file types
#
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last Change: 2022 Feb 09
if exists("g:did_load_ftplugin")
unlet g:did_load_ftplugin
endif
" Remove all autocommands in the filetypeplugin group, if any exist.
# Remove all autocommands in the filetypeplugin group, if any exist.
if exists("#filetypeplugin")
silent! au! filetypeplugin *
endif

View File

@ -4,7 +4,9 @@
# Translators: This is the Application Name used in the GVim desktop file
Name[de]=GVim
Name[eo]=GVim
Name[fi]=GVim
Name[fr]=GVim
Name[ga]=GVim
Name[it]=GVim
Name[ru]=GVim
Name[sr]=GVim
@ -13,7 +15,9 @@ Name=GVim
# Translators: This is the Generic Application Name used in the Vim desktop file
GenericName[de]=Texteditor
GenericName[eo]=Tekstoredaktilo
GenericName[fi]=Tekstinmuokkain
GenericName[fr]=Éditeur de texte
GenericName[ga]=Eagarthóir Téacs
GenericName[it]=Editor di testi
GenericName[ja]=テキストエディタ
GenericName[ru]=Текстовый редактор
@ -23,7 +27,9 @@ GenericName=Text Editor
# Translators: This is the comment used in the Vim desktop file
Comment[de]=Textdateien bearbeiten
Comment[eo]=Redakti tekstajn dosierojn
Comment[fi]=Muokkaa tekstitiedostoja
Comment[fr]=Éditer des fichiers texte
Comment[ga]=Cuir comhaid téacs in eagar
Comment[it]=Edita file di testo
Comment[ja]=テキストファイルを編集します
Comment[ru]=Редактирование текстовых файлов
@ -54,8 +60,6 @@ Comment[es]=Edita archivos de texto
Comment[et]=Redigeeri tekstifaile
Comment[eu]=Editatu testu-fitxategiak
Comment[fa]=ویرایش پرونده‌های متنی
Comment[fi]=Muokkaa tekstitiedostoja
Comment[ga]=Eagar comhad Téacs
Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
Comment[he]=ערוך קבצי טקסט
Comment[hi]=पाठ फ़ाइलें संपादित करें
@ -103,7 +107,9 @@ Type=Application
# Translators: Search terms to find this application. Do NOT change the semicolons! The list MUST also end with a semicolon!
Keywords[de]=Text;Editor;
Keywords[eo]=Teksto;redaktilo;
Keywords[fi]=Teksti;muokkain;editori;
Keywords[fr]=Texte;éditeur;
Keywords[ga]=Téacs;eagarthóir;
Keywords[it]=Testo;editor;
Keywords[ja]=テキスト;エディタ;
Keywords[ru]=текст;текстовый редактор;

View File

@ -1,7 +1,7 @@
" Vim support file to switch on loading indent files for file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2008 Feb 22
" Last Change: 2022 Feb 11
if exists("did_indent_on")
finish
@ -10,22 +10,23 @@ let did_indent_on = 1
augroup filetypeindent
au FileType * call s:LoadIndent()
func! s:LoadIndent()
if exists("b:undo_indent")
exe b:undo_indent
unlet! b:undo_indent b:did_indent
endif
let s = expand("<amatch>")
if s != ""
if exists("b:did_indent")
unlet b:did_indent
endif
" When there is a dot it is used to separate filetype names. Thus for
" "aaa.bbb" load "indent/aaa.vim" and then "indent/bbb.vim".
for name in split(s, '\.')
exe 'runtime! indent/' . name . '.vim'
endfor
endif
endfunc
augroup END
def s:LoadIndent()
if exists("b:undo_indent")
legacy exe b:undo_indent
unlet! b:undo_indent b:did_indent
endif
var s = expand("<amatch>")
if s != ""
if exists("b:did_indent")
unlet b:did_indent
endif
# When there is a dot it is used to separate filetype names. Thus for
# "aaa.bbb" load "indent/aaa.vim" and then "indent/bbb.vim".
for name in split(s, '\.')
exe 'runtime! indent/' .. name .. '.vim'
endfor
endif
enddef

11
runtime/indent/basic.vim Normal file
View File

@ -0,0 +1,11 @@
" Vim indent file
" Language: BASIC (QuickBASIC 4.5)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 24
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/vb.vim

View File

@ -0,0 +1,11 @@
" Vim indent file
" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 24
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/vb.vim

View File

@ -1,7 +1,7 @@
" Vim indent script for HTML
" Maintainer: Bram Moolenaar
" Original Author: Andy Wokula <anwoku@yahoo.de>
" Last Change: 2021 Jun 13
" Last Change: 2022 Jan 31
" Version: 1.0 "{{{
" Description: HTML indent script with cached state for faster indenting on a
" range of lines.
@ -149,6 +149,15 @@ func HtmlIndent_CheckUserSettings()
let b:html_indent_line_limit = 200
endif
endif
if exists('b:html_indent_attribute')
let b:hi_attr_indent = b:html_indent_attribute
elseif exists('g:html_indent_attribute')
let b:hi_attr_indent = g:html_indent_attribute
else
let b:hi_attr_indent = 2
endif
endfunc "}}}
" Init Script Vars
@ -946,11 +955,11 @@ func s:InsideTag(foundHtmlString)
let idx = match(text, '<' . s:tagname . '\s\+\zs\w')
endif
if idx == -1
" after just "<tag" indent two levels more
" after just "<tag" indent two levels more by default
let idx = match(text, '<' . s:tagname . '$')
if idx >= 0
call cursor(lnum, idx + 1)
return virtcol('.') - 1 + shiftwidth() * 2
return virtcol('.') - 1 + shiftwidth() * b:hi_attr_indent
endif
endif
if idx > 0

11
runtime/indent/qb64.vim Normal file
View File

@ -0,0 +1,11 @@
" Vim indent file
" Language: QB64
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 24
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/vb.vim

View File

@ -1,4 +1,4 @@
" vim: set ft=html sw=4 :
" vim: set ft=html sw=4 ts=8 :
" START_INDENT
@ -41,6 +41,11 @@ dd text
dt text
</dt>
</dl>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
@ -50,6 +55,7 @@ dt text
% START_INDENT
% INDENT_EXE let g:html_indent_style1 = "inc"
% INDENT_EXE let g:html_indent_script1 = "zero"
% INDENT_EXE let g:html_indent_attribute = 1
% INDENT_EXE call HtmlIndent_CheckUserSettings()
<html>
<body>
@ -61,6 +67,11 @@ div#d2 { color: green; }
var v1 = "v1";
var v2 = "v2";
</script>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
% END_INDENT

View File

@ -1,4 +1,4 @@
" vim: set ft=html sw=4 :
" vim: set ft=html sw=4 ts=8 :
" START_INDENT
@ -41,6 +41,11 @@ div#d2 { color: green; }
dt text
</dt>
</dl>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
@ -50,6 +55,7 @@ div#d2 { color: green; }
% START_INDENT
% INDENT_EXE let g:html_indent_style1 = "inc"
% INDENT_EXE let g:html_indent_script1 = "zero"
% INDENT_EXE let g:html_indent_attribute = 1
% INDENT_EXE call HtmlIndent_CheckUserSettings()
<html>
<body>
@ -61,6 +67,11 @@ div#d2 { color: green; }
var v1 = "v1";
var v2 = "v2";
</script>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
% END_INDENT

View File

@ -1,7 +1,7 @@
" Vim indent file
" Language: Vim script
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Nov 27
" Last Change: 2022 Feb 23
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@ -10,7 +10,7 @@ endif
let b:did_indent = 1
setlocal indentexpr=GetVimIndent()
setlocal indentkeys+==end,=},=else,=cat,=finall,=END,0\\,0=\"\\\
setlocal indentkeys+==endif,=enddef,=endfu,=endfor,=endwh,=endtry,=},=else,=cat,=finall,=END,0\\,0=\"\\\
setlocal indentkeys-=0#
setlocal indentkeys-=:
@ -103,8 +103,9 @@ function GetVimIndentIntern()
" A line starting with :au does not increment/decrement indent.
" A { may start a block or a dict. Assume that when a } follows it's a
" terminated dict.
" ":function" starts a block but "function(" doesn't.
if prev_text !~ '^\s*au\%[tocmd]' && prev_text !~ '^\s*{.*}'
let i = match(prev_text, '\(^\||\)\s*\(export\s\+\)\?\({\|\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\|finall\%[y]\|fu\%[nction]\|def\|el\%[seif]\)\>\)')
let i = match(prev_text, '\(^\||\)\s*\(export\s\+\)\?\({\|\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\|finall\%[y]\|def\|el\%[seif]\)\>\|fu\%[nction]\s\)')
if i >= 0
let ind += shiftwidth()
if strpart(prev_text, i, 1) == '|' && has('syntax_items')
@ -170,10 +171,15 @@ function GetVimIndentIntern()
let ind = ind + shiftwidth()
endif
" Subtract a 'shiftwidth' on a :endif, :endwhile, :catch, :finally, :endtry,
" :endfun, :enddef, :else and :augroup END.
if cur_text =~ '^\s*\(ene\@!\|cat\|finall\|el\|aug\%[roup]\s\+[eE][nN][dD]\)'
" Subtract a 'shiftwidth' on a :endif, :endwhile, :endfor, :catch, :finally,
" :endtry, :endfun, :enddef, :else and :augroup END.
" Although ":en" would be enough only match short command names as in
" 'indentkeys'.
if cur_text =~ '^\s*\(endif\|endwh\|endfor\|endtry\|endfu\|enddef\|cat\|finall\|else\|aug\%[roup]\s\+[eE][nN][dD]\)'
let ind = ind - shiftwidth()
if ind < 0
let ind = 0
endif
endif
return ind

196
runtime/lang/Makefile Normal file
View File

@ -0,0 +1,196 @@
# Author: Ada (Haowen) Yu <me@yuhaowen.com>
all: \
menu_chinese_gb.936.vim \
menu_uk_ua.cp1251.vim \
menu_uk_ua.koi8-u.vim \
menu_chinese_taiwan.950.vim \
menu_cs_cz.iso_8859-2.vim \
menu_czech_czech_republic.1250.vim \
menu_ja_jp.euc-jp.vim \
menu_japanese_japan.932.vim \
menu_ko_kr.euckr.vim \
menu_pl_pl.iso_8859-2.vim \
menu_polish_poland.1250.vim \
menu_ru_ru.koi8-r.vim \
menu_sl_si.cp1250.vim \
menu_sl_si.latin2.vim \
menu_slovak_slovak_republic.1250.vim \
menu_tr_tr.cp1254.vim \
menu_tr_tr.iso_8859-9.vim \
menu_sr_rs.iso_8859-5.vim \
menu_sr_rs.iso_8859-2.vim \
menu_sr_rs.ascii.vim \
menu_czech_czech_republic.ascii.vim \
# Convert menu_zh_cn.utf-8.vim to create menu_chinese_gb.936.vim.
menu_chinese_gb.936.vim: menu_zh_cn.utf-8.vim
rm -f menu_chinese_gb.936.vim
iconv -f utf-8 -t cp936 menu_zh_cn.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp936/' -e 's/" Original translations/" Generated from menu_zh_cn.utf-8.vim, DO NOT EDIT/' > menu_chinese_gb.936.vim
# Convert menu_zh_tw.utf-8.vim to create menu_chinese_taiwan.950.vim.
menu_chinese_taiwan.950.vim: menu_zh_tw.utf-8.vim
rm -f menu_chinese_taiwan.950.vim
iconv -f utf-8 -t cp950 menu_zh_tw.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp950/' -e 's/" Original translations/" Generated from menu_zh_tw.utf-8.vim, DO NOT EDIT/' > menu_chinese_taiwan.950.vim
# Convert menu_cs_cz.utf-8.vim to create menu_cs_cz.iso_8859-2.vim.
menu_cs_cz.iso_8859-2.vim: menu_cs_cz.utf-8.vim
rm -f menu_cs_cz.iso_8859-2.vim
iconv -f utf-8 -t iso8859-2 menu_cs_cz.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso8859-2/' \
-e 's/" Original translations/" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(ISO8859-2)/' \
> menu_cs_cz.iso_8859-2.vim
# Convert menu_cs_cz.utf-8.vim to create menu_czech_czech_republic.1250.vim.
menu_czech_czech_republic.1250.vim: menu_cs_cz.utf-8.vim
rm -f menu_czech_czech_republic.1250.vim
iconv -f utf-8 -t cp1250 menu_cs_cz.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
-e 's/" Original translations/" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(CP1250)/' \
> menu_czech_czech_republic.1250.vim
# Convert menu_cs_cz.utf-8.vim to create menu_czech_czech_republic.ascii.vim.
menu_czech_czech_republic.ascii.vim: menu_cs_cz.utf-8.vim
rm -f menu_czech_czech_republic.ascii.vim
sed -e 's/Á/A/g' -e 's/á/a/g' -e 's/Č/C/g' -e 's/č/c/g' -e 's/Ď/D/g' \
-e 's/ď/d/g' -e 's/É/E/g' -e 's/é/e/g' -e 's/Ě/E/g' -e 's/ě/e/g' \
-e 's/Í/I/g' -e 's/í/i/g' -e 's/Ň/N/g' -e 's/ň/n/g' -e 's/Ó/O/g' \
-e 's/ó/o/g' -e 's/Ř/R/g' -e 's/ř/r/g' -e 's/Š/S/g' -e 's/š/s/g' \
-e 's/Ť/T/g' -e 's/ť/t/g' -e 's/Ú/U/g' -e 's/ú/u/g' -e 's/Ů/U/g' \
-e 's/ů/u/g' -e 's/Ý/Y/g' -e 's/ý/y/g' -e 's/Ž/Z/g' -e 's/ž/z/g' \
-e 's/scriptencoding utf-8/scriptencoding latin1/' \
-e 's/" Original translations/" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(ASCII - without diacritics)/' \
menu_cs_cz.utf-8.vim > menu_czech_czech_republic.ascii.vim
# Convert menu_ja_jp.utf-8.vim to create menu_ja_jp.euc-jp.vim.
menu_ja_jp.euc-jp.vim: menu_ja_jp.utf-8.vim
rm -f menu_ja_jp.euc-jp.vim
iconv -f utf-8 -t euc-jp menu_ja_jp.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding euc-jp/' \
-e 's/" Original translations/" Generated from menu_ja_jp.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(EUC-JP)/' \
> menu_ja_jp.euc-jp.vim
# Convert menu_ja_jp.utf-8.vim to create menu_japanese_japan.932.vim.
menu_japanese_japan.932.vim: menu_ja_jp.utf-8.vim
rm -f menu_japanese_japan.932.vim
iconv -f utf-8 -t cp932 menu_ja_jp.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp932/' \
-e 's/" Original translations/" Generated from menu_ja_jp.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(CP932)/' \
> menu_japanese_japan.932.vim
# Convert menu_ko_kr.utf-8.vim to create menu_ko_kr.euckr.vim.
menu_ko_kr.euckr.vim: menu_ko_kr.utf-8.vim
rm -f menu_ko_kr.euckr.vim
iconv -f utf-8 -t euc-kr menu_ko_kr.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding euc-kr/' -e 's/" Original translations/" Generated from menu_ko_kr.utf-8.vim, DO NOT EDIT/' > menu_ko_kr.euckr.vim
# Convert menu_pl_pl.utf-8.vim to create menu_pl_pl.iso_8859-2.vim.
menu_pl_pl.iso_8859-2.vim: menu_pl_pl.utf-8.vim
rm -f menu_pl_pl.iso_8859-2.vim
iconv -f utf-8 -t iso8859-2 menu_pl_pl.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso8859-2/' -e 's/" Original translations/" Generated from menu_pl_pl.utf-8.vim, DO NOT EDIT/' > menu_pl_pl.iso_8859-2.vim
# Convert menu_pl_pl.utf-8.vim to create menu_polish_poland.1250.vim.
menu_polish_poland.1250.vim: menu_pl_pl.utf-8.vim
rm -f menu_polish_poland.1250.vim
iconv -f utf-8 -t cp1250 menu_pl_pl.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' -e 's/" Original translations/" Generated from menu_pl_pl.utf-8.vim, DO NOT EDIT/' > menu_polish_poland.1250.vim
# Convert menu_ru_ru.utf-8.vim to create menu_ru_ru.koi8-r.vim.
menu_ru_ru.koi8-r.vim: menu_ru_ru.utf-8.vim
rm -f menu_ru_ru.koi8-r.vim
iconv -f utf-8 -t koi8-r menu_ru_ru.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding koi8-r/' -e 's/" Original translations/" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT/' > menu_ru_ru.koi8-r.vim
# Convert menu_sl_si.utf-8.vim to create menu_sl_si.cp1250.vim.
menu_sl_si.cp1250.vim: menu_sl_si.utf-8.vim
rm -f menu_sl_si.cp1250.vim
iconv -f utf-8 -t cp1250 menu_sl_si.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
-e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_sl_si.cp1250.vim
# Convert menu_uk_ua.utf-8.vim to create menu_sl_si.latin2.vim.
menu_sl_si.latin2.vim: menu_sl_si.utf-8.vim
rm -f menu_sl_si.latin2.vim
iconv -f utf-8 -t latin2 menu_sl_si.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding latin2/' -e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_sl_si.latin2.vim
# Convert menu_uk_ua.utf-8.vim to create menu_slovak_slovak_republic.1250.vim.
menu_slovak_slovak_republic.1250.vim: menu_sl_si.utf-8.vim
rm -f menu_slovak_slovak_republic.1250.vim
iconv -f utf-8 -t cp1250 menu_sl_si.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' -e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_slovak_slovak_republic.1250.vim
# Convert menu_tr_tr.utf-8.vim to create menu_tr_tr.cp1254.vim.
menu_tr_tr.cp1254.vim: menu_tr_tr.utf-8.vim
rm -f menu_tr_tr.cp1254.vim
iconv -f utf-8 -t cp1254 menu_tr_tr.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1254/' -e 's/" Original translations/" Generated from menu_tr_tr.utf-8.vim, DO NOT EDIT/' > menu_tr_tr.cp1254.vim
# Convert menu_tr_tr.utf-8.vim to create menu_tr_tr.iso_8859-9.vim.
menu_tr_tr.iso_8859-9.vim: menu_tr_tr.utf-8.vim
rm -f menu_tr_tr.iso_8859-9.vim
iconv -f utf-8 -t iso8859-9 menu_tr_tr.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso8859-9/' -e 's/" Original translations/" Generated from menu_tr_tr.utf-8.vim, DO NOT EDIT/' > menu_tr_tr.iso_8859-9.vim
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.iso_8859-5.vim.
menu_sr_rs.iso_8859-5.vim: menu_sr_rs.utf-8.vim
rm -f menu_sr_rs.iso_8859-5.vim
iconv -f utf-8 -t iso8859-5 menu_sr_rs.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso8859-5/' -e 's/" Original translations/" Generated from menu_sr_rs.utf-8.vim, DO NOT EDIT/' > menu_sr_rs.iso_8859-5.vim
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.iso_8859-2.vim.
menu_sr_rs.iso_8859-2.vim: menu_sr_rs.utf-8.vim
rm -f menu_sr_rs.iso_8859-2.vim
sed -e 's/а/a/g' -e 's/б/b/g' -e 's/в/v/g' -e 's/г/g/g' -e 's/д/d/g' \
-e 's/ђ/đ/g' -e 's/е/e/g' -e 's/ж/ž/g' -e 's/з/z/g' -e 's/и/i/g' \
-e 's/ј/j/g' -e 's/к/k/g' -e 's/л/l/g' -e 's/љ/lj/g' -e 's/м/m/g' \
-e 's/н/n/g' -e 's/њ/nj/g' -e 's/о/o/g' -e 's/п/p/g' -e 's/р/r/g' \
-e 's/с/s/g' -e 's/т/t/g' -e 's/ћ/ć/g' -e 's/у/u/g' -e 's/ф/f/g' \
-e 's/х/h/g' -e 's/ц/c/g' -e 's/ч/č/g' -e 's/џ/dž/g' -e 's/ш/š/g' \
-e 's/А/A/g' -e 's/Б/B/g' -e 's/В/V/g' -e 's/Г/G/g' -e 's/Д/D/g' \
-e 's/Ђ/Đ/g' -e 's/Е/E/g' -e 's/Ж/Ž/g' -e 's/З/Z/g' -e 's/И/I/g' \
-e 's/Ј/J/g' -e 's/К/K/g' -e 's/Л/L/g' -e 's/Љ/Lj/g' -e 's/М/M/g' \
-e 's/Н/N/g' -e 's/Њ/Nj/g' -e 's/О/O/g' -e 's/П/P/g' -e 's/Р/R/g' \
-e 's/С/S/g' -e 's/Т/T/g' -e 's/Ћ/Ć/g' -e 's/У/U/g' -e 's/Ф/F/g' \
-e 's/Х/H/g' -e 's/Ц/C/g' -e 's/Ч/Č/g' -e 's/Џ/Dž/g' -e 's/Ш/Š/g' \
-e 's/scriptencoding utf-8/scriptencoding iso8859-2/' -e 's/" Original translations/" Generated from menu_sr_rs.utf-8.vim, DO NOT EDIT/' \
menu_sr_rs.utf-8.vim | iconv -f utf-8 -t iso8859-2 \
> menu_sr_rs.iso_8859-2.vim
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.ascii.vim.
menu_sr_rs.ascii.vim: menu_sr_rs.utf-8.vim
rm -f menu_sr_rs.ascii.vim
sed -e 's/а/a/g' -e 's/б/b/g' -e 's/в/v/g' -e 's/г/g/g' -e 's/д/d/g' \
-e 's/ђ/dj/g' -e 's/е/e/g' -e 's/ж/z/g' -e 's/з/z/g' -e 's/и/i/g' \
-e 's/ј/j/g' -e 's/к/k/g' -e 's/л/l/g' -e 's/љ/lj/g' -e 's/м/m/g' \
-e 's/н/n/g' -e 's/њ/nj/g' -e 's/о/o/g' -e 's/п/p/g' -e 's/р/r/g' \
-e 's/с/s/g' -e 's/т/t/g' -e 's/ћ/c/g' -e 's/у/u/g' -e 's/ф/f/g' \
-e 's/х/h/g' -e 's/ц/c/g' -e 's/ч/c/g' -e 's/џ/dz/g' -e 's/ш/s/g' \
-e 's/А/A/g' -e 's/Б/B/g' -e 's/В/V/g' -e 's/Г/G/g' -e 's/Д/D/g' \
-e 's/Ђ/Đ/g' -e 's/Е/E/g' -e 's/Ж/Z/g' -e 's/З/Z/g' -e 's/И/I/g' \
-e 's/Ј/J/g' -e 's/К/K/g' -e 's/Л/L/g' -e 's/Љ/Lj/g' -e 's/М/M/g' \
-e 's/Н/N/g' -e 's/Њ/Nj/g' -e 's/О/O/g' -e 's/П/P/g' -e 's/Р/R/g' \
-e 's/С/S/g' -e 's/Т/T/g' -e 's/Ћ/C/g' -e 's/У/U/g' -e 's/Ф/F/g' \
-e 's/Х/H/g' -e 's/Ц/C/g' -e 's/Ч/C/g' -e 's/Џ/Dz/g' -e 's/Ш/S/g' \
-e 's/scriptencoding utf-8/scriptencoding latin1/' -e 's/" Original translations/" Generated from menu_sr_rs.utf-8.vim, DO NOT EDIT/' \
menu_sr_rs.utf-8.vim > menu_sr_rs.ascii.vim
# Convert menu_uk_ua.utf-8.vim to create menu_uk_ua.cp1251.vim.
menu_uk_ua.cp1251.vim: menu_uk_ua.utf-8.vim
rm -f menu_uk_ua.cp1251.vim
iconv -f utf-8 -t cp1251 menu_uk_ua.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1251/' -e 's/" Original translations/" Generated from menu_uk_ua.utf-8.vim, DO NOT EDIT/' > menu_uk_ua.cp1251.vim
# Convert menu_uk_ua.utf-8.vim to create menu_uk_ua.koi8-u.vim.
menu_uk_ua.koi8-u.vim: menu_uk_ua.utf-8.vim
rm -f menu_uk_ua.koi8-u.vim
iconv -f utf-8 -t koi8-u menu_uk_ua.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding koi8-u/' -e 's/" Original translations/" Generated from menu_uk_ua.utf-8.vim, DO NOT EDIT/' > menu_uk_ua.koi8-u.vim

View File

@ -1,6 +1,7 @@
" Menu Translations: Afrikaas
" Maintainer: Danie Roux <droux@tuks.co.za>
" Last Change: 2012 May 01
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -2,7 +2,7 @@
"
" Maintainer: Ernest Adrogu<67> <eadrogue@gmx.net>
" Last Change: 26 Jul 2017
"
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -1,7 +1,8 @@
" Menu Translations: Simplified Chinese
" Maintainer: Shun Bai <baishunde@gmail.com>
" Previous Maintainer: Yuheng Xie <elephant@linux.net.cn>
" Last Change: 2020 Apr 23
" Last Change: 2022 Feb 19
" Generated from menu_zh_cn.utf-8.vim, DO NOT EDIT
" Quit when menu translations have already been done.
if exists("did_menu_trans")
@ -449,4 +450,4 @@ menutrans Set\ '&filetype'\ Too Ҳ
let &cpo = s:keepcpo
unlet s:keepcpo
" vim: set nu ts=4 sw=4 noet fdm=marker fdc=4 :
" vim: set ts=4 sw=4 noet fdm=marker fdc=4 :

View File

@ -1,6 +1,7 @@
" Menu Translations: Traditional Chinese
" Translated By: Hung-Te Lin <piaip@csie.ntu.edu.tw>
" Last Change: 2012 May 01
" Generated from menu_zh_tw.utf-8.vim, DO NOT EDIT
" {{{ Quit when menu translations have already been done.
if exists("did_menu_trans")
@ -8,6 +9,7 @@ if exists("did_menu_trans")
endif
let did_menu_trans = 1
" }}}
let s:keepcpo= &cpo
set cpo&vim

View File

@ -1,7 +1,8 @@
" Menu Translations: Czech (ISO-8859-2)
" Menu Translations: Czech (ISO8859-2)
" Maintainer: Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
" Previous maintainer: Jiri Brezina
" Based on: menu.vim (2012-10-21)
" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT
" Quit when menu translations have already been done.
if exists("did_menu_trans")
@ -12,7 +13,7 @@ let did_menu_trans = 1
let s:keepcpo= &cpo
set cpo&vim
scriptencoding iso-8859-2
scriptencoding iso8859-2
" {{{ File menu
menutrans &File &Soubor

View File

@ -2,6 +2,7 @@
" Maintainer: Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
" Previous maintainer: Jiri Brezina
" Based on: menu.vim (2012-10-21)
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -2,6 +2,7 @@
" Maintainer: Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
" Previous maintainer: Jiri Brezina
" Based on: menu.vim (2012-10-21)
" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -1,7 +1,8 @@
" Menu Translations: Czech (latin1 - w/o diacritics)
" Menu Translations: Czech (ASCII - without diacritics)
" Maintainer: Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
" Previous maintainer: Jiri Brezina
" Based on: menu.vim (2012-10-21)
" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -1,6 +1,7 @@
" Menu Translations: Danish
" Maintainer: scootergrisen
" Last Change: 2020 Apr 23
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -5,6 +5,7 @@
" Johannes Zellner <johannes@zellner.org>
" Last Change: Mon, 1 April 2019
" vim:set foldmethod=marker tabstop=8:
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -1,6 +1,7 @@
" Menu Translations: Esperanto
" Maintainer: Dominique PELLE <dominique.pelle@free.fr>
" Last Change: 2012 May 01
" Original translations
"
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -3,7 +3,7 @@
" Last translator: Omar Campagne Polaino <ocampagne@gmail.com>
" Version: 7.2.245
" Last Change: 2012 May 01
"
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -1,6 +1,7 @@
" Menu Translations: Finnish
" Maintainer: Flammie Pirinen <flammie@iki.fi>
" Last Change: 2020 Apr 23
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -4,6 +4,7 @@
" Contributors: David Blanchet <david.blanchet@free.fr>
" Gabriel Dupras <gabrieldupras@gmail.com>
" Last Change: 2021 Feb 16
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

View File

@ -2,6 +2,7 @@
" Original Translation: Zolt<6C>n <20>rp<72>dffy
" Maintained By: Kontra Gergely <kgergely@mcl.hu>
" Last Change: 2020 Apr 23
" Original translations
" I'm working on defining (unaccented) hotkeys for everything.
" I want to remove y and z hotkeys, because on the hungarian keymap they're at
" a differrent place.

View File

@ -5,6 +5,7 @@
"
" This file was converted from menu_hu_hu.iso_8859-2.vim. See there for
" remarks.
" Original translations
" Quit when menu translations have already been done.
if exists("did_menu_trans")

Some files were not shown because too many files have changed in this diff Show More