Compare commits

...

285 Commits

Author SHA1 Message Date
ed3c7e6339 patch 8.2.1318: no status badge for Github CI
Problem:    No status badge for Github CI.
Solution:   Add a badge.
2020-07-29 17:34:33 +02:00
f9a343f8bd patch 8.2.1317: MS-Windows tests on AppVeyor are slow
Problem:    MS-Windows tests on AppVeyor are slow.
Solution:   Use GitHub Actions. (Ken Takata, closes #6569)
2020-07-29 16:32:21 +02:00
b61ef01cce patch 8.2.1316: test 42 is still old style
Problem:    Test 42 is still old style.
Solution:   Turn it into a new style test. (Yegappan Lakshmanan, closes #6561)
2020-07-29 16:08:21 +02:00
45df2a01a7 patch 8.2.1315: MS-Windows: test log contains escape sequences
Problem:    MS-Windows: test log contains escape sequences.
Solution:   Do not use t_md and t_me but ANSI escape sequences. (Ken Takata,
            closes #6559)
2020-07-29 15:03:01 +02:00
9898107f54 patch 8.2.1314: Vim9: rule for comment after :function is confusing
Problem:    Vim9: rule for comment after :function is confusing.
Solution:   Allow double quoted comment after :function in vim9script.
            (closes #6556)
2020-07-29 14:40:25 +02:00
b5ed266037 patch 8.2.1313: Vim9 script: cannot assign to environment variable
Problem:    Vim9 script: cannot assign to environment variable.
Solution:   Recognize environment variable assignment. (closes #6548)
            Also options and registers.
2020-07-28 22:38:37 +02:00
066b12e36c patch 8.2.1312: MS-Windows: terminal test may fail if dir.exe exists
Problem:    MS-Windows: terminal test may fail if dir.exe exists.
Solution:   Use dir.com. (Ken Takata, closes #6557)
2020-07-28 21:40:27 +02:00
68e30449a2 patch 8.2.1311: test failures with legacy Vim script
Problem:    Test failures with legacy Vim script.
Solution:   Actually check for Vim9 script.
2020-07-28 21:15:07 +02:00
bd7f7c123d patch 8.2.1310: configure with Xcode 12 fails to check for tgetent
Problem:    Configure with Xcode 12 fails to check for tgetent.
Solution:   Declare tgetent(). (Ozaki Kiichi, closes #6558)
2020-07-28 21:03:37 +02:00
461f21242a patch 8.2.1309: build failure with tiny version
Problem:    Build failure with tiny version.
Solution:   Add #ifdef.
2020-07-28 20:25:47 +02:00
ae616494d7 patch 8.2.1308: Vim9: accidentally using "x" causes Vim to exit
Problem:    Vim9: accidentally using "x" causes Vim to exit.
Solution:   Disallow using ":x" or "xit" in Vim9 script. (closes #6399)
2020-07-28 20:07:27 +02:00
0aac67a431 patch 8.2.1307: popup window width does not include number of sign columns
Problem:    popup window width does not include number, fold of sign column
            width.
Solution:   Take number, fold and sign column with into account.
2020-07-27 22:40:37 +02:00
b13ab99908 patch 8.2.1306: checking for first character of dict key is inconsistent
Problem:    Checking for first character of dict key is inconsistent.
Solution:   Add eval_isdictc(). (closes #6546)
2020-07-27 21:43:28 +02:00
622b3568fa patch 8.2.1305: some tests are still old style
Problem:    Some tests are still old style.
Solution:   Convert tests 52 and 70 to new style. (Yegappan Lakshmanan,
            closes #6544)  Fix error in FinishTesting().
2020-07-27 20:02:41 +02:00
6ca6ca4889 patch 8.2.1304: debug backtrace isn't tested much
Problem:    Debug backtrace isn't tested much.
Solution:   Add more specific tests. (Ben Jackson, closes #6540)
2020-07-27 19:47:07 +02:00
6d585f4c5c patch 8.2.1303: calling popup_setoptions() resets 'signcolumn'
Problem:    Calling popup_setoptions() resets 'signcolumn'.
Solution:   Only set 'signcolumn' when creating the popup. (closes #6542)
2020-07-26 22:20:54 +02:00
01865ade85 patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Problem:    Vim9: varargs arg after optional arg does not work
Solution:   Check for the "..." first. (issue #6507)
2020-07-26 18:33:09 +02:00
ace6132aa8 patch 8.2.1301: Vim9: varargs argument type not parsed properly
Problem:    Vim9: varargs argument type not parsed properly.
Solution:   Skip over the "...". (issue #6507)
2020-07-26 18:16:58 +02:00
4fc224ca1c patch 8.2.1300: Vim9: optional argument type not parsed properly
Problem:    Vim9: optional argument type not parsed properly.
Solution:   Skip over the "?". (issue #6507)
2020-07-26 17:56:25 +02:00
2547aa930b Update runtime files. 2020-07-26 17:00:44 +02:00
d3bb6a82a5 patch 8.2.1299: compiler warning for using size_t for int and void pointer
Problem:    Compiler warning for using size_t for int and void pointer.
Solution:   Add type casts.
2020-07-26 15:55:25 +02:00
cb4f69c2fd patch 8.2.1298: compiler warning for unused argument in small version
Problem:    Compiler warning for unused argument in small version.
Solution:   Add UNUSED.
2020-07-26 15:51:06 +02:00
a5d0423fa1 patch 8.2.1297: when a test fails it's often not easy to see where
Problem:    When a test fails it's often not easy to see what the call stack
            is.
Solution:   Add more entries from the call stack in the exception message.
2020-07-26 15:37:02 +02:00
d66cdcd43a patch 8.2.1296: some part of using 'smarcase' was not tested
Problem:    Some part of using 'smarcase' was not tested.
Solution:   Add more tests. (Dominique Pellé, closes #6538)
2020-07-26 13:27:16 +02:00
7d40b8a532 patch 8.2.1295: tests 44 and 99 are old style
Problem:    Tests 44 and 99 are old style.
Solution:   Convert to new style tests. (Yegappan Lakshmanan, closes #6536)
2020-07-26 12:52:59 +02:00
37394ff752 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Problem:    Vim9: error when using vim9script in TextYankPost.
Solution:   Use EX_LOCKOK instead of the EX_CMDWIN flag for command that can
            be used when text is locked. (closes #6529)
2020-07-25 19:38:18 +02:00
2d6b20d6a9 patch 8.2.1293: Vim9: error when using vim9script in TextYankPost
Problem:    Vim9: error when using vim9script in TextYankPost.
Solution:   Use EX_LOCKOK instead of the EX_CMDWIN flag for command that can
            be used when text is locked. (closes #6529)
2020-07-25 19:30:59 +02:00
2afc3b4f77 patch 8.2.1292: AIDL filetype not recognized
Problem:    AIDL filetype not recognized.
Solution:   Add filetype detection. (Dominique Pellé, closes #6533)
2020-07-25 16:53:12 +02:00
24aa48b7a2 patch 8.2.1291: Vim9: type of varargs items is not checked
Problem:    Vim9: type of varargs items is not checked.
Solution:   Check the list item types. (closes #6523)
2020-07-25 16:33:02 +02:00
925e9fd633 patch 8.2.1290: Vim9: cannot replace a global function
Problem:    Vim9: cannot replace a global function.
Solution:   Allow for "!" on a global function. (closes #6524)  Also fix that
            :delfunc on a :def function only made it empty.
2020-07-25 15:41:11 +02:00
c841afff6a patch 8.2.1289: crash when using a custom completion function
Problem:    Crash when using a custom completion function.
Solution:   Initialize all of the expand_T. (closes #6532)
2020-07-25 14:11:55 +02:00
13e12b8a3c patch 8.2.1288: Vim9: cannot use mark in range
Problem:    Vim9: cannot use mark in range.
Solution:   Use the flag that a colon was seen. (closes #6528)
2020-07-24 18:47:22 +02:00
40f4f7a48c patch 8.2.1287: Vim9: crash when using an imported function
Problem:    Vim9: crash when using an imported function.
Solution:   Add the function type to the imported entry. (closes #6522)
2020-07-23 22:41:43 +02:00
43e969d3f9 patch 8.2.1286: Vim9: No error when using a type to a window variable
Problem:    Vim9: No error when using a type to a window variable
Solution:   Recognize the syntax and give an error. (closes #6521)
2020-07-23 21:14:43 +02:00
b8070e3173 patch 8.2.1285: Vim9: argument types are not checked on assignment
Problem:    Vim9: argument types are not checked on assignment.
Solution:   Check function argument types. (issue #6507)
2020-07-23 20:56:04 +02:00
bfba8651a5 patch 8.2.1284: Vim9: skipping over type includes following white space
Problem:    Vim9: skipping over type includes following white space, leading
            to an error for missing white space.
Solution:   Do not skip over white space after the type.
2020-07-23 20:09:10 +02:00
637cd7d1c9 patch 8.2.1283: Vim9: error for misplaced -> lacks argument
Problem:    Vim9: error for misplaced -> lacks argument.
Solution:   Use the pointer before it was advanced.
2020-07-23 19:06:23 +02:00
6c4bfe4b31 patch 8.2.1282: Vim9: crash when using CheckScriptFailure()
Problem:    Vim9: crash when using CheckScriptFailure() in
            Test_vim9script_call_fail_decl().
Solution:   Do not decrement the def_functions len unless the function was
            newly added.
2020-07-23 18:26:30 +02:00
2d06bfde29 patch 8.2.1281: the "trailing characters" error can be hard to understand
Problem:    The "trailing characters" error can be hard to understand.
Solution:   Add the trailing characters to the message.
2020-07-23 17:16:18 +02:00
8930caaa1a patch 8.2.1280: Ex command error cannot contain an argument
Problem:    Ex command error cannot contain an argument.
Solution:   Add ex_errmsg() and translate earlier.  Use e_trailing_arg where
            possible.
2020-07-23 16:37:03 +02:00
8d5f6af5e5 patch 8.2.1279: some tests on Travis have EXITFREE duplicated
Problem:    Some tests on Travis have EXITFREE duplicated.
Solution:   Remove EXITFREE from shadowopt.  Add "shadow" to job name.
2020-07-23 15:50:40 +02:00
dd1a9af00f patch 8.2.1278: Vim9: line break after "->" only allowed in :def function
Problem:    Vim9: line break after "->" only allowed in :def function.
Solution:   Only allow line break after "->". (closes #6492)
2020-07-23 15:38:03 +02:00
7a87b4e3fe patch 8.2.1277: tests on Travis do not run with EXITFREE
Problem:    Tests on Travis do not run with EXITFREE.
Solution:   Add EXITFREE to all builds to uncover any mistakes.
2020-07-23 14:59:07 +02:00
4cc45a3673 patch 8.2.1276: MS-Windows: system test may fail if more.exe is installed
Problem:    MS-Windows: system test may fail if more.exe is installed.
Solution:   Explicitly use more.com. (Taro Muraoka, Ken Takata, closes #6517)
2020-07-23 14:51:02 +02:00
5a67c37a55 patch 8.2.1275: Vim9: compiler warning for buffer size
Problem:    Vim9: compiler warning for buffer size.
Solution:   Change the offset from 10 to 15. (Dominique Pellé, closes #6518)
2020-07-23 14:39:47 +02:00
63be3d4ba0 patch 8.2.1274: Vim9: no error for missing white space at script level
Problem:    Vim9: no error for missing white space in assignment at script
            level.
Solution:   Check for white space. (closes #6495)
2020-07-23 13:11:37 +02:00
c69950ac17 patch 8.2.1273: MS-Windows: terminal test may leave file behind
Problem:    MS-Windows: terminal test may leave file behind.
Solution:   Wait a moment for process to end before deleting the file.
            (Taro Muraoka, closes #6513)
2020-07-22 22:23:40 +02:00
4cdb13ce81 patch 8.2.1272: Vim9: type not checked if declaration also assigns value
Problem:    Vim9: type not checked if declaration also assigns value.
Solution:   Check the type. (issue #6507)
2020-07-22 21:45:14 +02:00
0f60e80f9b patch 8.2.1271: Vim9: Error for Funcref function argument type
Problem:    Vim9: Error for Funcref function argument type.
Solution:   Find the actual function type if possible. (issue #6507)
2020-07-22 20:16:11 +02:00
2f1980f7b7 patch 8.2.1270: Vim9: not skipping over function type declaration
Problem:    Vim9: not skipping over function type declaration with only a
            return type.
Solution:   Skip over the return type. (issue #6507)
2020-07-22 19:30:06 +02:00
054f14bbe5 patch 8.2.1269: language and locale code spread out
Problem:    Language and locale code spread out.
Solution:   Move relevant code to src/locale.c. (Yegappan Lakshmanan,
            closes #6509)
2020-07-22 19:11:19 +02:00
e7e4838f25 patch 8.2.1268: Vim9: no error for using double quote comment
Problem:    Vim9: no error for using double quote comment after :func or :def.
Solution:   Only accept double quote when not in Vim9 script and not after
            :def. (closes #6483)
2020-07-22 18:17:08 +02:00
2690b5aed8 patch 8.2.1267: MS-Windows: tests may fail due to $PROMPT value
Problem:    MS-Windows: tests may fail due to $PROMPT value.
Solution:   Set $PROMPT for testing. (Taro Muraoka, closes #6510)
2020-07-22 18:14:58 +02:00
bc6fcbe4ce patch 8.2.1266: Makefile preference were accidentally included
Problem:    Makefile preference were accidentally included.
Solution:   Revert the Makefile changes.
2020-07-21 22:34:41 +02:00
7d5e744162 patch 8.2.1265: crash with EXITFREE when split() fails
Problem:    Crash with EXITFREE when split() fails.
Solution:   Restore 'cpoptions'.
2020-07-21 22:25:51 +02:00
420952175a patch 8.2.1264: terminal getwinpos() test is a bit flaky
Problem:    Terminal getwinpos() test is a bit flaky.
Solution:   Call getwinpos() a bit later.
2020-07-21 21:48:58 +02:00
c71f36a889 patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Problem:    Vim9: comperators use 'ignorecase' in Vim9 script.
Solution:   Ignore 'ignorecase'.  Use true and false instead of 1 and 0.
            (closes #6497)
2020-07-21 21:31:00 +02:00
f868ba8903 patch 8.2.1262: src/ex_cmds.c file is too big
Problem:    src/ex_cmds.c file is too big.
Solution:   Move help related code to src/help.c. (Yegappan Lakshmanan,
            closes #6506)
2020-07-21 21:07:20 +02:00
c7db57788b patch 8.2.1261: Vim9: common type of function not tested
Problem:    Vim9: common type of function not tested.
Solution:   Add a test.  Fix uncovered problems.
2020-07-21 20:55:50 +02:00
7591116acf patch 8.2.1260: there is no good test for CursorHold
Problem:    There is no good test for CursorHold.
Solution:   Add a test.  Remove duplicated test. (Yegappan Lakshmanan,
            closes #6503
2020-07-21 19:44:47 +02:00
f56c95fdad patch 8.2.1259: empty group in 'tabline' may cause using an invalid pointer
Problem:    Empty group in 'tabline' may cause using an invalid pointer.
Solution:   Set the group start position. (closes #6505)
2020-07-21 19:25:18 +02:00
08815a1d03 patch 8.2.1258: CursorHold does not work well
Problem:    CursorHold does not work well.a (Shane-XB-Qian)
Solution:   Only restore did_cursorhold when using :normal.
2020-07-20 23:10:56 +02:00
b31be3f909 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Problem:    Vim9: list unpack doesn't work at the script level.
Solution:   Detect unpack assignment better. (closes #6494)
2020-07-20 22:37:44 +02:00
7892b953e0 patch 8.2.1256: Vim9: type wrong after getting dict item in lambda
Problem:    Vim9: type wrong after getting dict item in lambda.
Solution:   Set the type to "any" after enforcing dict type. (closes #6491)
2020-07-20 22:09:34 +02:00
d43906d2e5 patch 8.2.1255: cannot use a lambda with quickfix functions
Problem:    Cannot use a lambda with quickfix functions.
Solution:   Add support for lambda. (Yegappan Lakshmanan, closes #6499)
2020-07-20 21:31:32 +02:00
470adb827f patch 8.2.1254: MS-Windows: regexp test may fail if 'iskeyword' set wrongly
Problem:    MS-Windows: regexp test may fail if 'iskeyword' set wrongly.
Solution:   Override the 'iskeyword' value. (Taro Muraoka, closes #6502)
2020-07-20 21:21:30 +02:00
b146e01a7e patch 8.2.1253: CTRL-K in Insert mode gets <CursorHold> inserted
Problem:    CTRL-K in Insert mode gets <CursorHold> inserted. (Roland
            Puntaier)
Solution:   Do not reset did_cursorhold, restore it. (closes #6447)
2020-07-19 23:06:05 +02:00
54c3fcd852 patch 8.2.1252: ":marks" may show '< and '> mixed up
Problem:    ":marks" may show '< and '> mixed up.
Solution:   Show the mark position as where '< and '> would jump.
2020-07-19 22:09:06 +02:00
682d0a1546 patch 8.2.1251: Vim9: warning for pointer usage, test failure undetected
Problem:    Vim9: warning for pointer usage, test failure undetected.
Solution:   Fix pointer indirection.  Give error when executing function
            failed for any reason.  Fix instruction names.
2020-07-19 20:48:59 +02:00
2f8ce0ae8a patch 8.2.1250: Vim9: cannot use the g:, b:, t: and w: namespaces
Problem:    Vim9: cannot use the g:, b:, t: and w: namespaces.
Solution:   Add instructions to push a dict for the namespaces. (closes #6480)
2020-07-19 19:47:35 +02:00
747f11ad6e patch 8.2.1249: Vim9: disassemble test fails
Problem:    Vim9: disassemble test fails.
Solution:   Change INDEX to LISTINDEX.  Add test for STRINDEX.
2020-07-19 18:38:37 +02:00
956501594e patch 8.2.1248: Netbeans test is flaky in the GUI
Problem:    Netbeans test is flaky in the GUI.
Solution:   Filter out geometry messages. (Taro Muraoka, closes #6487)
2020-07-19 18:24:32 +02:00
bf9d8c3765 patch 8.2.1247: Vim9: cannot index a character in a string
Problem:    Vim9: cannot index a character in a string.
Solution:   Add ISN_STRINDEX instruction. (closes #6478)
2020-07-19 17:55:44 +02:00
b209750b5e patch 8.2.1246: Vim9: comment after assignment doesn't work
Problem:    Vim9: comment after assignment doesn't work.
Solution:   Skip over white space. (closes #6481)
2020-07-19 17:17:02 +02:00
f398238a37 patch 8.2.1245: build failure in tiny version
Problem:    Build failure in tiny version.
Solution:   Add #ifdef.
2020-07-19 16:32:09 +02:00
6802cce407 patch 8.2.1244: Vim9: in lambda index assumes a list
Problem:    Vim9: in lambda index assumes a list.
Solution:   Use the value type to decide about list or dict. (closes #6479)
2020-07-19 15:49:49 +02:00
75783bd84e patch 8.2.1243: Vim9: cannot have a comment line halfway a list
Problem:    Vim9: cannot have a comment or empty line halfway a list at script
            level.
Solution:   Skip more than one line if needed.
2020-07-19 14:41:58 +02:00
65b9545f44 patch 8.2.1242: Vim9: no error if calling a function with wrong type
Problem:    Vim9: no error if calling a function with wrong argument type.
Solution:   Check types of arguments. (closes #6469)
2020-07-19 14:03:09 +02:00
6434fc574d patch 8.2.1241: cannot use getbufinfo() as a method
Problem:    Cannot use getbufinfo() as a method.
Solution:   Support using getbufinfo() as a method. (closes #6458)
2020-07-18 22:24:22 +02:00
10e1d01aaf patch 8.2.1240: GUI tests sometimes fail because of translations
Problem:    GUI tests sometimes fail because of translations.
Solution:   Reload the menus without translation. (Taro Muraoka, closes #6486)
2020-07-18 22:03:11 +02:00
de2396fc87 patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Problem:    "maxwidth" in 'completepopup' not obeyed. (Jay Sitter)
Solution:   Add separate field for value from option. (closes #6470)
2020-07-18 21:40:41 +02:00
d032f34a51 patch 8.2.1238: Vim9: a few remaining errors not caught by try/catch
Problem:    Vim9: a few remaining errors not caught by try/catch.
Solution:   Do not bail out if an error is inside try/catch.
2020-07-18 18:13:02 +02:00
447bfba24b patch 8.2.1237: changing 'completepopup' after opening popup has no effect
Problem:    Changing 'completepopup' after opening a popup has no effect. (Jay
            Sitter)
Solution:   Close the popup when the options are changed. (closes #6471)
2020-07-18 16:07:16 +02:00
e859312e74 patch 8.2.1236: Vim9: a few errors not caught by try/catch
Problem:    Vim9: a few errors not caught by try/catch.
Solution:   Do not bail out if an error is inside try/catch.  Fix that a not
            matching catch doesn't jump to :endtry.
2020-07-18 15:17:02 +02:00
2764d06ab7 patch 8.2.1235: Not all mouse codes covered by tests
Problem:    Not all mouse codes covered by tests.
Solution:   Add more tests for the mouse. (Yegappan Lakshmanan, closes #6472)
2020-07-18 12:59:19 +02:00
066e7da3cd patch 8.2.1234: Lua build problem with old compiler
Problem:    Lua build problem with old compiler.
Solution:   Move declarations to start of the block. (Taro Muraoka,
            closes #6477)
2020-07-18 12:50:35 +02:00
f0b9f43c31 patch 8.2.1233: Vim9: various errors not caught by try/catch
Problem:    Vim9: various errors not caught by try/catch.
Solution:   Do not bail out if an error is inside try/catch.
2020-07-17 23:03:17 +02:00
b68ced5f07 patch 8.2.1232: MS-Windows GUI: Snap cancelled by split command
Problem:    MS-Windows GUI: Snap cancelled by split command.
Solution:   Do not cancel Snap when splitting a window. (Ken Takata,
            closes #6467)
2020-07-17 22:26:53 +02:00
945c857844 patch 8.2.1231: MS-Windows: GUI code can be cleaned up
Problem:    MS-Windows: GUI code can be cleaned up.
Solution:   Do a bit of cleaning up. (Ken Takata, closes #6465)
2020-07-17 22:17:03 +02:00
68d130c618 patch 8.2.1230: Vim9: list index error not caught by try/catch
Problem:    Vim9: list index error not caught by try/catch.
Solution:   Do not bail out if an error is inside try/catch. (closes #6462)
2020-07-17 22:06:44 +02:00
6e36b1c18e patch 8.2.1229: build error without the eval feature
Problem:    Build error without the eval feature.
Solution:   Declare starts_with_colon. Make function local.
2020-07-17 20:47:51 +02:00
203ec7760d patch 8.2.1228: scrollbars not flush against the window edges when maximised
Problem:    Scrollbars not flush against the window edges when maximised.
Solution:   Add padding. (Ken Takata, closes #5602, closes #6466)
2020-07-17 20:43:43 +02:00
f5be8cdb77 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Problem:    Vim9: allowing both quoted and # comments is confusing.
Solution:   Only support # comments in Vim9 script.
2020-07-17 20:36:00 +02:00
98af99f2d7 patch 8.2.1226: MS-Windows: windows positioning wrong depending on taskbar
Problem:    MS-Windows: windows positioning wrong when the taskbar is placed
            at the top or left of the screen.
Solution:   Use GetWindowRect and MoveWindow APIs. (Yukihiro Nakadaira,
            Ken Takata, closes #6455)
2020-07-16 22:30:31 +02:00
ee1b93169d patch 8.2.1225: linker errors when building with dynamic Python 3.9
Problem:    Linker errors when building with dynamic Python 3.9.
Solution:   Add #defined items. (closes #6461)
2020-07-16 22:15:53 +02:00
a90afb9a59 patch 8.2.1224: Vim9: arguments from partial are not used
Problem:    Vim9: arguments from partial are not used.
Solution:   Put the partial arguments on the stack. (closes #6460)
2020-07-15 22:38:56 +02:00
e30f64b4b5 patch 8.2.1223: Vim9: invalid type error for function default value
Problem:    Vim9: invalid type error for function default value.
Solution:   Use right argument index. (closes #6458)
2020-07-15 19:48:20 +02:00
657a826c07 patch 8.2.1222: using valgrind in Vim command started by test doesn't work
Problem:    When using valgrind a Vim command started by a test uses the same
            log file name which gets overwritten.
Solution:   Fix regexp to rename the log file.
2020-07-15 18:29:18 +02:00
02f9e6a60f patch 8.2.1221: memory leak when updating popup window
Problem:    Memory leak when updating popup window.
Solution:   Clear search highlighting.
2020-07-15 18:27:08 +02:00
452143c6bf patch 8.2.1220: memory access error when dragging a popup window
Problem:    memory access error when dragging a popup window over a buffer
            with folding.
Solution:   Avoid going over the end of the cache. (closes #6438)
2020-07-15 17:38:21 +02:00
5966ea105e patch 8.2.1219: symlink not followed if dirname ends in //
Problem:    Symlink not followed if dirname ends in //.
Solution:   Resolve symlink earlier. (Tomáš Janoušek, closes #6454)
2020-07-15 15:30:05 +02:00
3d48e25dcb patch 8.2.1218: Vim9: cannot use 'text'->func()
Problem:    Vim9: cannot use 'text'->func().
Solution:   Recognize string at start of command.
2020-07-15 14:15:52 +02:00
1e1f612bd4 patch 8.2.1217: startup test depends on random source file
Problem:    Startup test depends on random source file.
Solution:   Write a test file to find quickfix errors in.
2020-07-15 11:19:11 +02:00
b6e4e4c6f7 patch 8.2.1216: startup test fails
Problem:    Startup test fails.
Solution:   Adjust expected values for deleted lines.
2020-07-15 01:37:36 +02:00
e3f915d12c patch 8.2.1215: Atari MiNT support is outdated
Problem:    Atari MiNT support is outdated.
Solution:   Nobody responded this code is still useful, so let's delete it.
2020-07-14 23:02:44 +02:00
ceb56ddbaf patch 8.2.1214: MS-Windows: default _vimrc not correct in silent install mode
Problem:    MS-Windows: default _vimrc not correct in silent install mode.
Solution:   Add the LoadDefaultVimrc macro. (Ken Takata, closes #6451)
2020-07-14 22:24:40 +02:00
297bec0731 patch 8.2.1213: mouse codes not tested sufficiently
Problem:    Mouse codes not tested sufficiently.
Solution:   Add more tests for mouse codes. (closes #6436)
2020-07-14 22:11:04 +02:00
5551b131da patch 8.2.1212: cannot build with Lua 5.4
Problem:    Cannot build with Lua 5.4.
Solution:   Use luaL_typeerror instead defining it. (closes #6454)
2020-07-14 21:54:28 +02:00
8455c5ed31 patch 8.2.1211: removed more than dead code
Problem:    Removed more than dead code.
Solution:   Put back the decrement.
2020-07-14 21:22:30 +02:00
1f22cc5cdb patch 8.2.1210: using ht_used when looping through a hashtab is less reliable
Problem:    Using ht_used when looping through a hashtab is less reliable.
Solution:   Use ht_changed in a few more places.
2020-07-14 21:08:49 +02:00
21c16f868d patch 8.2.1209: Vim9: test failure
Problem:    Vim9: test failure.
Solution:   Add missing changes to hashtab.
2020-07-14 16:15:34 +02:00
49fe0d6b28 patch 8.2.1208: build failure
Problem:    Build failure.
Solution:   Add missing change.
2020-07-14 15:47:23 +02:00
7ce85be63b patch 8.2.1207: Vim9: crash in expr test when run in the GUI
Problem:    Vim9: crash in expr test when run in the GUI.
Solution:   Break out of loop over hashtab also when function got removed and
            added.
2020-07-14 15:01:05 +02:00
1bce831e13 patch 8.2.1206: Vim9: crash in expr test when run in the GUI
Problem:    Vim9: crash in expr test when run in the GUI.
Solution:   Temporarily comment out two test lines.
2020-07-13 23:22:54 +02:00
8c34ea54ad patch 8.2.1205: Vim9: && and || work different when not compiled
Problem:    Vim9: && and || work different when not compiled.
Solution:   Keep the value.
2020-07-13 22:29:02 +02:00
5d2eb0fff0 patch 8.2.1204: Vim9: true and false not recognized in Vim9 script
Problem:    Vim9: true and false not recognized in Vim9 script.
Solution:   Recognize true and false.
2020-07-13 21:59:33 +02:00
3ac9c4701a patch 8.2.1203: unused assignments in expression evaluation
Problem:    Unused assignments in expression evaluation.
Solution:   Move declarations and assignments to inner blocks where possible.
2020-07-13 21:28:03 +02:00
08f7a41b0a patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Problem:    Vim9: crash when calling a closure from a builtin function.
Solution:   Use the current execution context. (closes #6441)
2020-07-13 20:41:08 +02:00
f1a2368d81 patch 8.2.1201: Vim9: crash when passing number as dict key
Problem:    Vim9: crash when passing number as dict key.
Solution:   Check key type to be string. (closes #6449)
2020-07-13 18:55:48 +02:00
bfd65589d9 patch 8.2.1200: Vim9: cannot disassemble a lambda function
Problem:    Vim9: cannot disassemble a lambda function.
Solution:   Recognize "<lambda>123" as a function name.
2020-07-13 18:18:00 +02:00
7177da9dd4 patch 8.2.1199: not all assert functions are fully tested
Problem:    Not all assert functions are fully tested.
Solution:   Test more assert functions.
2020-07-12 23:09:20 +02:00
a4b442614c patch 8.2.1198: terminal2 test sometimes hangs in the GUI on Travis
Problem:    Terminal2 test sometimes hangs in the GUI on Travis.
Solution:   Move test function to terminal3 to see if the problem moves too.
2020-07-12 21:38:29 +02:00
c212dd0a34 patch 8.2.1197: clientserver test still fails on MS-Windows
Problem:    Clientserver test still fails on MS-Windows.
Solution:   Expect a different error message.
2020-07-12 20:49:29 +02:00
83e7450053 patch 8.2.1196: build failure with normal features
Problem:    Build failure with normal features.
Solution:   Add #ifdef.
2020-07-12 20:44:37 +02:00
4d57ba0202 patch 8.2.1195: clientserver test fails on MS-Windows
Problem:    Clientserver test fails on MS-Windows.
Solution:   Expect a different error message.
2020-07-12 20:00:24 +02:00
a4dc6f92bb patch 8.2.1194: test failure because shell prompt differs
Problem:    Test failure because shell prompt differs.
Solution:   Set the shell prompt.
2020-07-12 19:52:36 +02:00
35910f2d54 patch 8.2.1193: terminal window not redrawn when dragging a popup window
Problem:    Terminal window not redrawn when dragging a popup window over it.
Solution:   Redraw terminal window. (fixes #6438)
2020-07-12 19:24:10 +02:00
b898a029b0 patch 8.2.1192: Lua test fails with older Lua version
Problem:    Lua test fails with older Lua version.
Solution:   Adjust expected error messages. (closes #6444)
2020-07-12 18:33:53 +02:00
985116ae0b patch 8.2.1191: Vim9: crash when function calls itself
Problem:    Vim9: crash when function calls itself.
Solution:   Add status UF_COMPILING. (closes #6441)
2020-07-12 17:31:09 +02:00
eb6880b6eb patch 8.2.1190: Vim9: checking for Vim9 syntax is spread out
Problem:    Vim9: checking for Vim9 syntax is spread out.
Solution:   Use in_vim9script().
2020-07-12 17:07:05 +02:00
8af81d656a patch 8.2.1189: Vim9: line continuation in lambda doesn't always work
Problem:    Vim9: line continuation in lambda doesn't always work.
Solution:   Do not use a local evalarg unless there isn't one. (closes #6439)
2020-07-12 16:32:19 +02:00
6d3a7213f5 patch 8.2.1188: memory leak with invalid json input
Problem:    Memory leak with invalid json input.
Solution:   Free all keys at the end. (Dominique Pellé, closes #6443,
            closes #6442)
2020-07-12 14:34:00 +02:00
c85156bb89 patch 8.2.1187: terminal2 test sometimes hangs in the GUI on Travis
Problem:    Terminal2 test sometimes hangs in the GUI on Travis.
Solution:   Disable Test_zz2_terminal_guioptions_bang() for now.
2020-07-12 14:09:23 +02:00
13c046316b patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Problem:    With SGR mouse codes balloon doesn't show up after click.
Solution:   Add the MOUSE_RELEASE bits to mouse_code.
2020-07-12 13:47:42 +02:00
ecdd14a427 patch 8.2.1185: some other tests fail
Problem:    Some other tests fail.
Solution:   Adjust tests for different assert_fails() behavior.
2020-07-11 22:49:59 +02:00
2b6ef856fb patch 8.2.1184: some tests fail
Problem:    Some tests fail.
Solution:   Adjust tests for different assert_fails() behavior.  Remove unused
            variable.
2020-07-11 22:25:57 +02:00
9b7bf9e98f patch 8.2.1183: assert_fails() checks the last error message
Problem:    assert_fails() checks the last error message.
Solution:   Check the first error, it is more relevant.  Fix all the tests
            that rely on the old behavior.
2020-07-11 22:14:59 +02:00
914e7eaa67 patch 8.2.1182: Vim9: no check for whitespace after comma in lambda
Problem:    Vim9: no check for whitespace after comma in lambda.
Solution:   Give error if white space is missing.
2020-07-11 15:20:48 +02:00
21e5bdd271 patch 8.2.1181: json code not fully tested
Problem:    Json code not fully tested.
Solution:   Add more test coverage. (Dominique Pellé, closes #6433)
2020-07-11 14:26:08 +02:00
1e624c912d patch 8.2.1180: build failure in small version
Problem:    Build failure in small version.
Solution:   Add #ifdef.
2020-07-11 14:08:04 +02:00
f65927fc8d patch 8.2.1179: Test_termwinscroll() sometimes hangs in the GUI
Problem:    Test_termwinscroll() sometimes hangs in the GUI.
Solution:   Skip the test in the GUI.
2020-07-11 14:04:28 +02:00
b074e8b8d4 patch 8.2.1178: Vim9: filter function recognized as command modifier
Problem:    Vim9: filter function recognized as command modifier, leading to a
            crash.
Solution:   Clear cmdmod after freeing items.  Do not recognize a command
            modifier followed by non-white space. (closes #6434)
2020-07-11 13:40:45 +02:00
18aa13d13b patch 8.2.1177: terminal2 test sometimes hangs in the GUI
Problem:    Terminal2 test sometimes hangs in the GUI.
Solution:   Move some tests to other files to further locate the problem.
            Set the GUI to a fixed screen size.
2020-07-11 13:09:36 +02:00
543e6f3467 patch 8.2.1176: Vim9: not enough type checking in Vim9 script
Problem:    Vim9: not enough type checking in Vim9 script.
Solution:   Use same type checking as in a :def function.
2020-07-10 22:45:38 +02:00
7ff78465f7 Update runtime files 2020-07-10 22:00:53 +02:00
a7eedf317a patch 8.2.1175: Vim9: cannot split a line before ".member"
Problem:    Vim9: Cannot split a line before ".member".
Solution:   Check for ".member" after line break.
2020-07-10 21:50:41 +02:00
11a5b19a8c patch 8.2.1174: no test for the "recording @x" message
Problem:    No test for the "recording @x" message.
Solution:   Add a test. (Dominique Pellé, closes #6427)
2020-07-10 21:17:51 +02:00
4004315292 patch 8.2.1173: tee doesn't build on some systems
Problem:    Tee doesn't build on some systems.
Solution:   Include header files. (Dominique Pelle, closes #6431)
2020-07-10 20:45:31 +02:00
08fc48492a patch 8.2.1172: error messages when doing "make clean" in doc or tee
Problem:    Error messages when doing "make clean" in the runtime/doc or
            src/tee directories.
Solution:   Use "rm -f".
2020-07-10 20:40:23 +02:00
58bb61cf5e patch 8.2.1171: possible crash when out of memory
Problem:    Possible crash when out of memory.
Solution:   Check for NULL pointer. (Dominique Pellé, closes #6432)
2020-07-10 20:30:12 +02:00
ef85a9b2d9 patch 8.2.1170: cursor off by one with block paste while 'virtualedit' "all"
Problem:    Cursor off by one with block paste while 'virtualedit' is "all".
Solution:   Adjust condition. (Hugo Gualandi, closes #6430)
2020-07-10 20:24:07 +02:00
97d2f34c87 patch 8.2.1169: write NUL past allocated space using corrupted spell file
Problem:    Write NUL past allocated space using corrupted spell file.
            (Markus Vervier)
Solution:   Init "c" every time.
2020-07-10 20:03:03 +02:00
92053ce59e patch 8.2.1168: wrong method argument for appendbufline()
Problem:    Wrong method argument for appendbufline().
Solution:   Use FEARG_3.
2020-07-09 22:53:30 +02:00
389df259c4 patch 8.2.1167: Vim9: builtin function method call only supports first arg
Problem:    Vim9: builtin function method call only supports first argument.
Solution:   Shift arguments when needed. (closes #6305, closes #6419)
2020-07-09 21:20:47 +02:00
ae97b94176 patch 8.2.1166: once mouse move events are enabled getchar() returns them
Problem:    Once mouse move events are enabled getchar() returns them.
Solution:   Ignore K_MOUSEMOVE in getchar(). (closes #6424)
2020-07-09 19:16:35 +02:00
e4358906fd patch 8.2.1165: insufficient testing for the Tcl interface
Problem:    Insufficient testing for the Tcl interface.
Solution:   Add more tests. (Yegappan Lakshmanan, closes #6423)
2020-07-09 18:49:23 +02:00
96916ac67a patch 8.2.1164: text cleared by checking terminal properties not redrawn
Problem:    Text cleared by checking terminal properties not redrawn. (Alexey
            Radkov)
Solution:   Mark the screen characters as invalid. (closes #6422)
2020-07-08 23:09:28 +02:00
6e13530ca0 patch 8.2.1163: build error
Problem:    Build error.
Solution:   Add missing change to globals.
2020-07-08 22:36:17 +02:00
efaaaa683b patch 8.2.1162: crash when using a lambda
Problem:    Crash when using a lambda.
Solution:   Check for evalarg to be NULL.
2020-07-08 22:24:09 +02:00
8e2730a315 patch 8.2.1161: Vim9: using freed memory
Problem:    Vim9: using freed memory.
Solution:   Put pointer back in evalarg instead of freeing it.
2020-07-08 22:01:49 +02:00
6110e79a58 patch 8.2.1160: Vim9: memory leak in allocated types
Problem:    Vim9: memory leak in allocated types.
Solution:   Free the type pointers.
2020-07-08 19:35:21 +02:00
6b7a0a8c20 patch 8.2.1159: Vim9: no error for missing space after a comma
Problem:    Vim9: no error for missing space after a comma.
Solution:   Check for white space.
2020-07-08 18:38:08 +02:00
b335b29e1c patch 8.2.1158: build error
Problem:    Build error.
Solution:   Add missing change to globals.
2020-07-08 18:34:57 +02:00
0a47e0970a patch 8.2.1157: Vim9: dict.name is not recognized as an expression
Problem:    Vim9: dict.name is not recognized as an expression.
Solution:   Recognize ".name". (closes #6418)
2020-07-08 18:30:06 +02:00
002262f4de patch 8.2.1156: Vim9: No error for invalid command in compiled function
Problem:    Vim9: No error for invalid command in compiled function.
Solution:   Handle CMD_SIZE.
2020-07-08 17:47:57 +02:00
7a4b8980ea patch 8.2.1155: Vim9: cannot handle line break inside lambda
Problem:    Vim9: cannot handle line break inside lambda.
Solution:   Pass the compilation context through. (closes #6407, closes #6409)
2020-07-08 17:36:21 +02:00
c620c055ce patch 8.2.1154: Vim9: crash when using imported function
Problem:    Vim9: crash when using imported function.
Solution:   Check for a function type.  Set the script context when calling a
            function. (closes #6412)
2020-07-08 15:16:19 +02:00
bed36b939a patch 8.2.1153: Vim9: script test fails on some systems
Problem:    Vim9: script test fails on some systems.
Solution:   Return proper value from Compare().
2020-07-07 23:31:36 +02:00
fe465a01cf patch 8.2.1152: Vim9: function reference is missing script prefix
Problem:    Vim9: function reference is missing script prefix.
Solution:   Use the actual function name instead of the name searched for in
            the script context. (closes #6412)
2020-07-07 22:50:12 +02:00
0ab55d6201 patch 8.2.1151: insufficient test coverage for Python
Problem:    Insufficient test coverage for Python.
Solution:   Add more test cases. (Yegappan Lakshmanan, closes #6415)
2020-07-07 20:50:39 +02:00
bb790dcc46 patch 8.2.1150: ml_get error when using Python
Problem:    ml_get error when using Python. (Yegappan Lakshmanan)
Solution:   Check the line number is not out of range.  Call "Check" with
            "fromObj" instead of "from".
2020-07-07 20:12:54 +02:00
007f9d6ed5 patch 8.2.1149: Vim9: :eval command not handled properly
Problem:    Vim9: :eval command not handled properly.
Solution:   Compile the :eval command. (closes #6408)
2020-07-06 23:04:49 +02:00
cbb6bdcd89 patch 8.2.1148: warning for using int instead of size_t
Problem:    Warning for using int instead of size_t.
Solution:   Change "len" argument to size_t. (Mike Williams)
2020-07-06 21:53:17 +02:00
27321dbeed patch 8.2.1147: :confirm may happen in cooked mode
Problem:    :confirm may happen in cooked mode. (Jason Franklin)
Solution:   Switch to raw mode before prompting. (Brandon Pfeifer)
2020-07-06 21:24:57 +02:00
ab58946384 patch 8.2.1146: not enough testing for Python
Problem:    Not enough testing for Python.
Solution:   Add more tests.  Fix uncovered problems. (Yegappan Lakshmanan,
            closes #6392)
2020-07-06 21:03:06 +02:00
0ad3e894d7 patch 8.2.1145: Vim9: "for" only accepts a list at compile time
Problem:    Vim9: "for" only accepts a list at compile time.
Solution:   Also accept a list at runtime.
2020-07-05 21:38:11 +02:00
67627355ac patch 8.2.1144: Vim9: return type of reverse() is any
Problem:    Vim9: return type of reverse() is any.
Solution:   Use the type of the first argument.
2020-07-05 21:10:24 +02:00
ad7c249327 patch 8.2.1143: Vim9: return type of remove() is any
Problem:    Vim9: return type of remove() is any.
Solution:   Use the member type of the first argument, if known.
2020-07-05 20:55:29 +02:00
252e88a785 patch 8.2.1142: Vim9: return type of insert() is any
Problem:    Vim9: return type of insert() is any.
Solution:   Use type of the first argument.
2020-07-05 20:47:18 +02:00
0d94ad6958 patch 8.2.1141: Vim9: return type of filter() is any
Problem:    Vim9: return type of filter() is any.
Solution:   Use type of the argument.
2020-07-05 20:16:41 +02:00
b3c019cbc3 patch 8.2.1140: Vim9: return type of extend() is any
Problem:    Vim9: return type of extend() is any.
Solution:   Use type of the argument.
2020-07-05 20:08:39 +02:00
8f510afcd6 patch 8.2.1139: Vim9: test for silent echo fails in some environments
Problem:    Vim9: test for silent echo fails in some environments.
Solution:   Use :function instead of :def.
2020-07-05 18:48:23 +02:00
a66ba01a5f patch 8.2.1138: Vim9: return type of copy() and deepcopy() is any
Problem:    Vim9: return type of copy() and deepcopy() is any.
Solution:   Use type of the argument.
2020-07-05 18:41:08 +02:00
47e7d70b58 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Problem:    Vim9: modifiers not cleared after compiling function.
Solution:   Clear command modifiers. (closes #6396)
2020-07-05 18:18:42 +02:00
846178a72c patch 8.2.1136: Vim9: return type of argv() is always any
Problem:    Vim9: return type of argv() is always any.
Solution:   Use list<string> if there is no argument.
2020-07-05 17:04:13 +02:00
50788ef349 patch 8.2.1135: Vim9: getting a dict member may not work
Problem:    Vim9: getting a dict member may not work.
Solution:   Clear the dict only after copying the item.
2020-07-05 16:51:26 +02:00
435d89789e patch 8.2.1134: Vim9: getting a list member may not work
Problem:    Vim9: getting a list member may not work.
Solution:   Clear the list only after copying the item. (closes #6393)
2020-07-05 16:42:13 +02:00
fce82b3aa7 patch 8.2.1133: Vim9: return type of add() is not specific enough
Problem:    Vim9: return type of add() is not specific enough.
Solution:   Return the type of the first argument. (closes #6395)
2020-07-05 16:07:21 +02:00
9978d473e3 patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Problem:    Vim9: return type of repeat() is not specific enough.
Solution:   Return the type of the first argument. (closes #6395)
2020-07-05 16:01:56 +02:00
05a5551a86 patch 8.2.1131: Vim9: error message for returning a value is not clear
Problem:    Vim9: error message for returning a value in a function that does
            not return anything is not clear.
Solution:   Add a specific message.
2020-07-05 15:52:19 +02:00
788123c00c patch 8.2.1130: Vim9: bar not recognized after function call
Problem:    Vim9: bar not recognized after function call
Solution:   Skip whitespace. (closes #6391)
2020-07-05 15:32:17 +02:00
e9f262bdff patch 8.2.1129: Vim9: bar not recognized after not compiled command
Problem:    Vim9: bar not recognized after not compiled command.
Solution:   Check for bar for commands where this is possible. (closes #6391)
2020-07-05 14:57:51 +02:00
3f40ce78f5 patch 8.2.1128: the write message mentions characters, but it's bytes
Problem:    The write message mentions characters, but it's actually bytes.
Solution:   Change "C" to "B" and "characters" to "bytes".
2020-07-05 14:10:13 +02:00
fb9d5c51c8 patch 8.2.1127: Vim9: getting a dict member may not work
Problem:    Vim9: getting a dict member may not work.
Solution:   Clear the dict only after copying the item. (closes #6390)
2020-07-04 19:19:43 +02:00
eeb27bfe28 patch 8.2.1126: Vim9: using :copen causes an error
Problem:    Vim9: using :copen causes an error.
Solution:   Add flag LET_NO_COMMAND in set_var().
2020-07-04 17:39:10 +02:00
962d721319 patch 8.2.1125: Vim9: double quote can be a string or a comment
Problem:    Vim9: double quote can be a string or a comment.
Solution:   Only support comments starting with # to avoid confusion.
2020-07-04 14:15:00 +02:00
1c991144c5 patch 8.2.1124: Vim9: no line break allowed in :import command
Problem:    Vim9: no line break allowed in :import command.
Solution:   Skip over line breaks.
2020-07-04 13:15:31 +02:00
effb0cd75d patch 8.2.1123: Python 3 test is old style
Problem:    Python 3 test is old style.
Solution:   Turn into new style test. (Yegappan Lakshmanan, closes #6385)
2020-07-03 21:17:34 +02:00
442af2f89e patch 8.2.1122: Vim9: line continuation in dict member not recognized
Problem:    Vim9: line continuation in dict member not recognized.
Solution:   Check for line continuation.
2020-07-03 21:09:52 +02:00
743d062020 patch 8.2.1121: command completion not working after ++arg
Problem:    Command completion not working after ++arg.
Solution:   Move skipping up. (Christian Brabandt, closes #6382)
2020-07-03 18:15:06 +02:00
92fdd1e75d patch 8.2.1120: Python code not tested properly
Problem:    Python code not tested properly.
Solution:   Add more tests and convert old-style test into new-style test.
            (Yegappan Lakshmanan, closes #6370)
2020-07-03 18:00:05 +02:00
5289783e0b patch 8.2.1119: configure fails with Xcode 12 beta
Problem:    Configure fails with Xcode 12 beta.
Solution:   use "return" instead of "exit()". (Nico Weber, closes #6381)
2020-07-02 22:50:37 +02:00
810af5ea46 patch 8.2.1118: condition can never be true, dead code
Problem:    Condition can never be true, dead code.
Solution:   Remove the dead code.
2020-07-02 21:23:42 +02:00
a9a8e5f0dc patch 8.2.1117: Coverity warns for unsing unitialized field
Problem:    Coverity warns for unsing unitialized field.
Solution:   Initialize v_lock.
2020-07-02 21:17:57 +02:00
d2ef6b320b patch 8.2.1116: Vim9: parsing command checks for list twice
Problem:    Vim9: parsing command checks for list twice.
Solution:   Adjust how a command is parsed.
2020-07-02 21:11:34 +02:00
c19fd917be patch 8.2.1115: iminsert test fails when compiled with VIMDLL
Problem:    Iminsert test fails when compiled with VIMDLL.
Solution:   Change condition. (Ken Takata, closes #6376)
2020-07-02 20:59:05 +02:00
1112c0febb patch 8.2.1114: terminal test sometimes times out
Problem:    Terminal test sometimes times out.
Solution:   Split the test in two parts.
2020-07-01 21:53:50 +02:00
a0d072ef82 patch 8.2.1113: no test for verbose output of :call
Problem:    No test for verbose output of :call.
Solution:   Add a test.
2020-07-01 20:19:37 +02:00
5f195938d4 patch 8.2.1112: Vim9: no line continuation allowed in method call
Problem:    Vim9: no line continuation allowed in method call.
Solution:   Handle line continuation in expression before method call.
2020-07-01 20:07:14 +02:00
9a78e6df17 patch 8.2.1111: inconsistent naming of get_list_tv() and eval_dict()
Problem:    Inconsistent naming of get_list_tv() and eval_dict().
Solution:   Rename get_list_tv() to eval_list().  Similarly for eval_number(),
            eval_string(), eval_lit_string() and a few others.
2020-07-01 18:29:55 +02:00
e6b5324e3a patch 8.2.1110: Vim9: line continuation does not work in function arguments
Problem:    Vim9: line continuation does not work in function arguments.
Solution:   Pass "evalarg" to get_func_tv().  Fix seeing double quoted string
            as comment.
2020-07-01 17:28:33 +02:00
086eb18ba1 patch 8.2.1109: still crashing when using s:variable
Problem:    Still crashing when using s:variable.
Solution:   Remove assignment. (Ken Takata)
2020-07-01 16:00:44 +02:00
d58d4f90ae patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Problem:    Mouse left-right scroll is not supported in terminal window.
Solution:   Implement mouse codes 6 and 7. (Trygve Aaberge, closes #6363)
2020-07-01 15:49:29 +02:00
ef8c617b9c patch 8.2.1107: 'imactivatefunc' and 'imstatusfunc' are not used in the GUI
Problem:    'imactivatefunc' and 'imstatusfunc' are not used in the GUI.
Solution:   Adjust the #ifdefs. (closes #6367)
2020-07-01 15:12:44 +02:00
8e6cbb7232 patch 8.2.1106: crash when trying to use s: variable in typed command
Problem:    Crash when trying to use s: variable in typed command.
Solution:   Don't use the script index when not set. (Ken Takata,
            closes #6366)
2020-07-01 14:38:12 +02:00
e49b8e8d75 patch 8.2.1105: insufficient test coverage for Lua
Problem:    Insufficient test coverage for Lua.
Solution:   Add tests. (Yegappan Lakshmanan, closes #6368)  Fix uncovered
            memory leak.  Avoid unnecessary copy/free.
2020-07-01 13:52:55 +02:00
11b6600c88 patch 8.2.1104: Coverity warnts for possible NULL pointer use
Problem:    Coverity warnts for possible NULL pointer use.
Solution:   Check "pbyts" is not NULL.
2020-07-01 13:15:24 +02:00
e707c882b2 patch 8.2.1103: Coverity reports an unnecessary NULL check
Problem:    Coverity reports an unnecessary NULL check.
Solution:   Remove the check for NULL.
2020-07-01 13:07:37 +02:00
9004949221 patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Problem:    Coverity gets confused by an unnecessary NULL check.
Solution:   Remove the check for NULL.
2020-07-01 13:04:05 +02:00
be7a50c22f patch 8.2.1101: no error when using wrong arguments for setqflist()
Problem:    No error when using wrong arguments for setqflist() or
            setloclist().
Solution:   Check for the error.
2020-06-30 22:11:44 +02:00
47e880d6c1 patch 8.2.1100: Vim9: cannot use line break in :execute argument
Problem:    Vim9: cannot use line break in :execute, :echomsg and :echoerr
            argument.
Solution:   Check for line break.
2020-06-30 22:02:02 +02:00
37c8371195 patch 8.2.1099: Vim9: cannot use line break in :cexpr argument
Problem:    Vim9: cannot use line break in :cexpr argument.
Solution:   Check for line break.
2020-06-30 21:18:36 +02:00
006ad48b8a patch 8.2.1098: Vim9: cannot use line break in :throw argument
Problem:    Vim9: cannot use line break in :throw argument.
Solution:   Check for line break.
2020-06-30 20:55:15 +02:00
e46a440505 Runtime file updates 2020-06-30 20:38:27 +02:00
de8f0f47f6 patch 8.2.1097: highlight code not sufficiently tested
Problem:    Highlight code not sufficiently tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #6359)
2020-06-30 18:45:43 +02:00
f151ad1c70 patch 8.2.1096: Vim9: return type of getqflist() is wrong
Problem:    Vim9: return type of getqflist() is wrong.
Solution:   Let the return type depend on the arguments.  Also for
            getloclist(). (closes #6367)
2020-06-30 13:38:01 +02:00
6b949615ed patch 8.2.1095: may use pointer after freeing it
Problem:    May use pointer after freeing it when text properties are used.
Solution:   Update redo buffer before calling ml_replace().
2020-06-29 23:18:42 +02:00
a53618dd1d patch 8.2.1094: dead code in libvterm
Problem:    Dead code in libvterm.
Solution:   Remove condition that is always true.
2020-06-29 23:14:02 +02:00
de19b745ee patch 8.2.1093: Python: double free when adding item to dict fails
Problem:    Python: double free when adding item to dict fails.
Solution:   Remove vim_free() call.
2020-06-29 23:07:44 +02:00
cf070112ca patch 8.2.1092: not checking if saving for undo succeeds
Problem:    Not checking if saving for undo succeeds.
Solution:   Bail out if u_savesub() returns FAIL.
2020-06-29 23:02:21 +02:00
d034220c54 patch 8.2.1091: no check if opening a pty works
Problem:    No check if opening a pty works.
Solution:   Check for invalid file descriptor.
2020-06-29 22:40:42 +02:00
9b5384b97e patch 8.2.1090: may use NULL pointer when skipping over name
Problem:    May use NULL pointer when skipping over name.
Solution:   Always set ll_name_end.
2020-06-29 22:31:36 +02:00
927b7dd0fe patch 8.2.1089: Coverity warns for pointer computation
Problem:    Coverity warns for pointer computation.
Solution:   Avoid computing a pointer to invalid memory.
2020-06-29 22:24:56 +02:00
6378b21d6d patch 8.2.1088: a very long translation might cause a buffer overflow
Problem:    A very long translation might cause a buffer overflow.
Solution:   Trunctate the message if needed.
2020-06-29 21:32:06 +02:00
566cc8c72b patch 8.2.1087: possible memory leak when file expansion fails
Problem:    Possible memory leak when file expansion fails.
Solution:   Clear the grow array when returning FAIL.  Use an error message
            instead of an empty string.
2020-06-29 21:14:51 +02:00
cf30643ae6 patch 8.2.1086: possibly using freed memory when text properties used
Problem:    Possibly using freed memory when text properties used when
            changing indent of a line.
Solution:   Compute the offset before calling ml_replace().
2020-06-29 20:40:37 +02:00
6d90c61c5a patch 8.2.1085: Coverity complains about ignoring dict_add() return value
Problem:    Coverity complains about ignoring dict_add() return value.
Solution:   Add (void).
2020-06-29 20:23:32 +02:00
7d2ac92ebc patch 8.2.1084: Lua: registering function has useless code
Problem:    Lua: registering function has useless code.
Solution:   Remove clearing grow arrays.
2020-06-29 20:20:33 +02:00
fda20c4cc5 patch 8.2.1083: crash when using reduce() on a NULL list
Problem:    Crash when using reduce() on a NULL list.
Solution:   Only access the list when not NULL.
2020-06-29 20:09:36 +02:00
91639195ef patch 8.2.1082: Coverity complains about ignoring dict_add() return value
Problem:    Coverity complains about ignoring dict_add() return value.
Solution:   Add (void).
2020-06-29 19:55:58 +02:00
a1f9f8666e patch 8.2.1081: Lua: cannot use table.insert() and table.remove()
Problem:    Lua: cannot use table.insert() and table.remove().
Solution:   Add the list functions. (Prabir Shrestha, closes #6353)
2020-06-28 22:41:26 +02:00
b7a78f7a67 patch 8.2.1080: Vim9: no line break allowed in a for loop
Problem:    Vim9: no line break allowed in a for loop.
Solution:   Skip line breaks in for command.
2020-06-28 18:43:40 +02:00
d5053d015a patch 8.2.1079: Vim9: no line break allowed in a while loop
Problem:    Vim9: no line break allowed in a while loop.
Solution:   Update stored loop lines when finding line breaks.
2020-06-28 15:51:16 +02:00
06cf97e714 patch 8.2.1078: highlight and match functionality together in one file
Problem:    Highlight and match functionality together in one file.
Solution:   Move match functionality to a separate file. (Yegappan Lakshmanan,
            closes #6352)
2020-06-28 13:17:26 +02:00
75e15670b8 patch 8.2.1077: no enough test coverage for highlighting
Problem:    No enough test coverage for highlighting.
Solution:   Add more tests. (Yegappan Lakshmanan, closes #6351)
2020-06-28 13:10:22 +02:00
faf8626b79 patch 8.2.1076: Vim9: no line break allowed in :if expression
Problem:    Vim9: no line break allowed in :if expression.
Solution:   Skip linebreak.
2020-06-27 23:07:36 +02:00
7e8967fdcd patch 8.2.1075: Vim9: no line break allowed in :echo expression
Problem:    Vim9: no line break allowed in :echo expression.
Solution:   Skip linebreak.
2020-06-27 21:56:17 +02:00
9215f01218 patch 8.2.1074: Vim9: no line break allowed after some operators
Problem:    Vim9: no line break allowed after some operators.
Solution:   Skip a line break after the operator.  Add
            eval_may_get_next_line() to simplify checking for a line break.
2020-06-27 21:18:00 +02:00
7a4981b936 patch 8.2.1073: Vim9: no line break allowed in () expression
Problem:    Vim9: no line break allowed in () expression.
Solution:   Skip a line break.
2020-06-27 20:46:29 +02:00
a0a0c4147f patch 8.2.1072: missing libvterm test
Problem:    Missing libvterm test.
Solution:   Sync with libvterm revision 768.
2020-06-27 18:13:10 +02:00
e40fbc2ca9 patch 8.2.1071: Vim9: no line break allowed inside a lambda
Problem:    Vim9: no line break allowed inside a lambda.
Solution:   Handle line break inside a lambda in Vim9 script.
2020-06-27 18:06:45 +02:00
ab19d495fd patch 8.2.1070: Vim9: leaking memory when lacking white space in dict
Problem:    Vim9: leaking memory when lacking white space in dict.
Solution:   Clear the typval.
2020-06-27 17:04:05 +02:00
e6e031739c patch 8.2.1069: Vim9: fail to check for white space in list
Problem:    Vim9: fail to check for white space in list.
Solution:   Add check for white space.
2020-06-27 16:36:05 +02:00
8ea9390b78 patch 8.2.1068: Vim9: no line break allowed inside a dict
Problem:    Vim9: no line break allowed inside a dict.
Solution:   Handle line break inside a dict in Vim9 script.
2020-06-27 14:11:53 +02:00
0b1cd52ff6 patch 8.2.1067: expression "!expr->func()" does not work
Problem:    Expression "!expr->func()" does not work.
Solution:   Apply plus and minus earlier. (closes #6348)
2020-06-27 13:11:50 +02:00
bd84617d1a patch 8.2.1066: Lua arrays are zero based
Problem:    Lua arrays are zero based.
Solution:   Make Lua arrays one based. (Prabir Shrestha, closes #6347)
            Note: this is not backwards compatible.
2020-06-27 12:32:57 +02:00
7147820cb9 patch 8.2.1065: Vim9: no line break allowed inside a list
Problem:    Vim9: no line break allowed inside a list.
Solution:   Handle line break inside a list in Vim9 script.
2020-06-26 22:46:27 +02:00
e6536aa766 patch 8.2.1064: Vim9: no line break allowed before comperators
Problem:    Vim9: no line break allowed before comperators.
Solution:   Check for comperator after line break.
2020-06-26 22:00:38 +02:00
be7ee48876 patch 8.2.1063: Vim9: no line break allowed before || or &&
Problem:    Vim9: no line break allowed before || or &&.
Solution:   Check for operator after line break.
2020-06-26 21:38:51 +02:00
793648fb56 patch 8.2.1062: Vim9: no line break allowed inside "cond ? val1 : val2"
Problem:    Vim9: no line break allowed inside "cond ? val1 : val2".
Solution:   Check for operator after line break.
2020-06-26 21:28:25 +02:00
5d3c9f8c2a patch 8.2.1061: insufficient testing for src/window.c
Problem:    Insufficient testing for src/window.c.
Solution:   Add more tests. (Yegappan Lakshmanan, closes #6345)
2020-06-26 20:41:39 +02:00
5f36d5fbb8 patch 8.2.1060: not all elinks files are recognized
Problem:    Not all elinks files are recognized.
Solution:   Just check for "elinks.conf". (Guido Cella, closes #6337)
2020-06-26 20:23:45 +02:00
cf8441704d patch 8.2.1059: crash when using :tabonly in an autocommand
Problem:    Crash when using :tabonly in an autocommand. (Yegappan Lakshmanan)
Solution:   Do not allow the autocommand window to be closed.
2020-06-26 19:44:06 +02:00
fc838d6cb0 patch 8.2.1058: multiline conceal causes display errors
Problem:    Multiline conceal causes display errors.
Solution:   Do not allow conceal cross over EOL. (closes #6326, closes #4854,
            closes #6302)
2020-06-25 22:23:48 +02:00
1e4c7d0ed2 patch 8.2.1057: cannot build with dynamic Lua
Problem:    Cannot build with dynamic Lua.
Solution:   Add dll variables.
2020-06-25 20:56:42 +02:00
211dd3fd82 patch 8.2.1056: wrong display when mixing match conceal and syntax conceal
Problem:    Wrong display when mixing match conceal and syntax conceal.
Solution:   Adjust how conceal flags are used. (closes #6327, closes #6303)
2020-06-25 20:07:04 +02:00
73b4465ba7 patch 8.2.1055: no filetype set for pacman config files
Problem:    No filetype set for pacman config files.
Solution:   Recognize pacman.conf and *.hook. (Guido Cella, closes #6335)
2020-06-25 19:53:24 +02:00
801ab06934 patch 8.2.1054: not so easy to pass a lua function to Vim
Problem:    Not so easy to pass a lua function to Vim.
Solution:   Convert a Lua function and closure to a Vim funcref. (Prabir
            Shrestha, closes #6246)
2020-06-25 19:27:56 +02:00
832adf9bb8 patch 8.2.1053: insufficient testing for 'statusline' and 'tabline'
Problem:    Insufficient testing for 'statusline' and 'tabline'.
Solution:   Add more tests. (Yegappan Lakshmanan, closes #6333)
2020-06-25 19:01:36 +02:00
7acde51832 patch 8.2.1052: build failure with older compilers
Problem:    Build failure with older compilers.
Solution:   Move declaration to start of block.
2020-06-24 23:02:40 +02:00
ca275a05d8 patch 8.2.1051: crash when changing a list while using reduce() on it
Problem:    Crash when changing a list while using reduce() on it.
Solution:   Lock the list. (closes #6330)
2020-06-24 22:07:46 +02:00
65a8ed37f7 patch 8.2.1050: missing change in struct
Problem:    Missing change in struct.
Solution:   Add missing change.
2020-06-24 21:00:25 +02:00
b171fb1790 patch 8.2.1049: Vim9: leaking memory when using continuation line
Problem:    Vim9: leaking memory when using continuation line.
Solution:   Keep a pointer to the continuation line in evalarg_T.  Centralize
            checking for a next command.
2020-06-24 20:34:03 +02:00
9d40c63c7d patch 8.2.1048: build failure without the eval feature
Problem:    Build failure without the eval feature.
Solution:   Add dummy typedef.
2020-06-24 19:05:29 +02:00
5409f5d8c9 patch 8.2.1047: Vim9: script cannot use line continuation like :def function
Problem:    Vim9: script cannot use line continuation like in a :def function.
Solution:   Pass the getline function pointer to the eval() functions.  Use it
            for addition and multiplication operators.
2020-06-24 18:37:35 +02:00
b7e2483655 patch 8.2.1046: insufficient tests for src/buffer.c
Problem:    Insufficient tests for src/buffer.c.
Solution:   Add more tests.  Move comments related tests to a separate file.
            (Yegappan Lakshmanan, closes #6325)
2020-06-24 13:37:35 +02:00
67fbdfefd2 patch 8.2.1045: Vim9: line break before operator does not work
Problem:    Vim9: line break before operator does not work.
Solution:   Peek the next line for an operator.
2020-06-23 22:26:05 +02:00
ef6d86c173 patch 8.2.1044: not all systemd file types are recognized
Problem:    Not all systemd file types are recognized.
Solution:   Match several more files. (Guido Cella, closes #6319)
2020-06-23 21:01:38 +02:00
4014e2ceb0 patch 8.2.1043: %a item in 'statusline' not tested
Problem:    %a item in 'statusline' not tested.
Solution:   Add a test. (Dominique Pellé, closes #6318)
2020-06-23 20:00:50 +02:00
df069eec3b patch 8.2.1042: Vim9: cannot put an operator on the next line
Problem:    Vim9: cannot put an operator on the next line.
Solution:   Require a colon before a range to see if that causes problems.
2020-06-22 23:02:51 +02:00
7eaafe65ee patch 8.2.1041: test summary is missing executed count
Problem:    Test summary is missing executed count.
Solution:   Adjust pattern used for counting.
2020-06-22 22:10:06 +02:00
bdd2c290d3 patch 8.2.1040: not enough testing for movement commands
Problem:    Not enough testing for movement commands.
Solution:   Add more tests. (Yegappan Lakshmanan, closes #6313)
2020-06-22 21:34:30 +02:00
25fd267287 patch 8.2.1039: cannot put NUL byte on clipboard
Problem:    Cannot put NUL byte on clipboard.
Solution:   Use the text length. (Christian Brabandt, closes #6312,
            closes #6149)
2020-06-22 20:30:27 +02:00
b2b218d89b patch 8.2.1038: popupwin test fails
Problem:    Popupwin test fails.
Solution:   Fix WaitForAssert() argument.
2020-06-22 20:22:19 +02:00
acd4c5e914 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Problem:    Vim9: crash when using line continuation inside :def.
Solution:   Check for no more lines available.
2020-06-22 19:39:03 +02:00
323 changed files with 25498 additions and 16220 deletions

208
.github/workflows/ci-windows.yaml vendored Normal file
View File

@ -0,0 +1,208 @@
name: CI with MSVC and MinGW-w64
on:
push:
pull_request:
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
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
# Python 2
PYTHON_VER: 27
PYTHON_VER_DOT: '2.7'
# Python 3
PYTHON3_VER: 38
PYTHON3_VER_DOT: '3.8'
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
# Escape sequences
COL_RED: "\x1b[31m"
COL_GREEN: "\x1b[32m"
COL_YELLOW: "\x1b[33m"
COL_RESET: "\x1b[m"
jobs:
build:
runs-on: windows-latest
strategy:
matrix:
toolchain: [msvc, mingw]
arch: [x64, x86]
features: [HUGE, NORMAL]
include:
- arch: x64
vcarch: amd64
warch: x64
bits: 64
msystem: MINGW64
cygreg: registry
pyreg: ""
- arch: x86
vcarch: x86
warch: ia32
bits: 32
msystem: MINGW32
cygreg: registry32
pyreg: "-32"
exclude:
- toolchain: msvc
arch: x64
features: NORMAL
- toolchain: mingw
arch: x86
features: NORMAL
steps:
- name: Initalize
id: init
shell: bash
run: |
git config --global core.autocrlf input
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 "::set-env name=PYTHON_DIR::$python_dir"
echo "::set-env name=PYTHON3_DIR::$python3_dir"
- uses: msys2/setup-msys2@v2
if: matrix.toolchain == 'mingw'
with:
msystem: ${{ matrix.msystem }}
release: false
- uses: actions/checkout@v2
- name: Create a list of download URLs
shell: cmd
run: |
type NUL > urls.txt
echo %LUA_RELEASE%>> urls.txt
echo %WINPTY_URL%>> urls.txt
- name: Cache downloaded files
uses: actions/cache@v2
with:
path: downloads
key: ${{ runner.os }}-${{ matrix.bits }}-${{ hashFiles('urls.txt') }}
- name: Download dependencies
shell: cmd
run: |
path C:\Program Files\7-Zip;%path%
if not exist downloads mkdir downloads
echo %COL_GREEN%Download Lua%COL_RESET%
call :downloadfile %LUA${{ matrix.bits }}_URL% downloads\lua.zip
7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
echo %COL_GREEN%Download winpty%COL_RESET%
call :downloadfile %WINPTY_URL% downloads\winpty.zip
7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty.dll src\winpty${{ matrix.bits }}.dll
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty-agent.exe src\
goto :eof
:downloadfile
:: call :downloadfile <URL> <localfile>
if not exist %2 (
curl -f -L %1 -o %2
)
if ERRORLEVEL 1 (
rem Retry once.
curl -f -L %1 -o %2 || exit 1
)
goto :eof
- name: Build (MSVC)
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
call "%VCVARSALL%" ${{ 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 ^
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 ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes
)
if not exist vim${{ matrix.bits }}.dll (
echo %COL_RED%Build failure.%COL_RESET%
exit 1
)
- name: Build (MinGW)
if: matrix.toolchain == 'mingw'
shell: msys2 {0}
run: |
cd src
if [ "${{ matrix.features }}" = "HUGE" ]; then
mingw32-make -f Make_ming.mak -j2 \
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} \
STATIC_STDCPLUS=yes
else
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
STATIC_STDCPLUS=yes
fi
# - name: Prepare Artifact
# shell: cmd
# run: |
# mkdir artifacts
# copy src\*vim.exe artifacts
# copy src\vim*.dll artifacts
#
# - name: Upload Artifact
# uses: actions/upload-artifact@v1
# with:
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
# path: ./artifacts
- name: Test
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
cd testdir
echo %COL_GREEN%Test gvim:%COL_RESET%
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
nmake -nologo -f Make_dos.mak clean
echo %COL_GREEN%Test vim:%COL_RESET%
if "${{ matrix.toolchain }}-${{ matrix.arch }}"=="msvc-x64" (
rem This test may hang up unless it is executed in a separate console.
start /wait cmd /c "nmake -nologo -f Make_dos.mak VIMPROG=..\vim > nul"
if exist messages type messages
nmake -nologo -f Make_dos.mak report || exit 1
) else (
nmake -nologo -f Make_dos.mak VIMPROG=..\vim || exit 1
)

View File

@ -3,21 +3,21 @@ language: c
_anchors:
envs:
- &tiny-nogui
BUILD=yes TEST=test FEATURES=tiny CONFOPT="--disable-gui" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
BUILD=yes TEST=test FEATURES=tiny CONFOPT="--disable-gui" LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
- &tiny
BUILD=yes TEST=test FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
BUILD=yes TEST=test FEATURES=tiny CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
- &small
BUILD=yes TEST=test FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
BUILD=yes TEST=test FEATURES=small CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
- &normal
BUILD=yes TEST=test FEATURES=normal CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
BUILD=yes TEST=test FEATURES=normal CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
- &linux-huge
BUILD=yes TEST="scripttests test_libvterm" CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
BUILD=yes TEST="scripttests test_libvterm" CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
- &osx-huge # macOS build
BUILD=yes TEST=test FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
BUILD=yes TEST=test FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
- &unittests
BUILD=no TEST=unittests CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
BUILD=no TEST=unittests CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
- &asan # ASAN build
SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
@ -191,13 +191,13 @@ jobs:
compiler: gcc
env: *small
- <<: *linux
name: normal/clang
name: normal+shadow/clang
compiler: clang
env:
- *normal
- *shadowopt
- <<: *linux
name: normal/gcc
name: normal+shadow/gcc
compiler: gcc
env:
- *normal

View File

@ -9,6 +9,7 @@ SRC_ALL = \
.lgtm.yml \
.travis.yml \
.cirrus.yml \
.github/workflows/ci-windows.yaml \
appveyor.yml \
ci/appveyor.bat \
ci/if_ver*.vim \
@ -68,6 +69,7 @@ SRC_ALL = \
src/gui_beval.c \
src/hardcopy.c \
src/hashtab.c \
src/help.c \
src/highlight.c \
src/indent.c \
src/insexpand.c \
@ -75,11 +77,13 @@ SRC_ALL = \
src/json_test.c \
src/kword_test.c \
src/list.c \
src/locale.c \
src/keymap.h \
src/macros.h \
src/main.c \
src/map.c \
src/mark.c \
src/match.c \
src/mbyte.c \
src/memfile.c \
src/memfile_test.c \
@ -239,14 +243,17 @@ SRC_ALL = \
src/proto/gui_beval.pro \
src/proto/hardcopy.pro \
src/proto/hashtab.pro \
src/proto/help.pro \
src/proto/highlight.pro \
src/proto/indent.pro \
src/proto/insexpand.pro \
src/proto/json.pro \
src/proto/list.pro \
src/proto/locale.pro \
src/proto/main.pro \
src/proto/map.pro \
src/proto/mark.pro \
src/proto/match.pro \
src/proto/mbyte.pro \
src/proto/memfile.pro \
src/proto/memline.pro \
@ -673,10 +680,8 @@ SRC_EXTRA = \
$(SRC_QNX) \
$(SRC_VMS) \
README_os390.txt \
src/Make_mint.mak \
src/infplist.xml \
src/link.390 \
src/os_mint.h \
src/os_vms_fix.com \
src/toolbar.phi \

View File

@ -2,6 +2,7 @@
[![Travis Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
[![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
![Github Build status](https://github.com/vim/vim/workflows/CI%20with%20MSVC%20and%20MinGW-w64/badge.svg)
[![Cirrus Build Status](https://api.cirrus-ci.com/github/vim/vim.svg)](https://cirrus-ci.com/github/vim/vim)
[![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master)
[![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim)

View File

@ -19,8 +19,6 @@ src/os_dos.* Files for the MS-DOS port.
src/gui_mac.*
src/os_mac.* Files for the Mac port.
src/os_mint.8 Files for the Atari Mint port.
src/os_vms* Files for the VMS port.
src/os_w32*

View File

@ -5,16 +5,17 @@ skip_tags: true
environment:
matrix:
- FEATURE: HUGE
- FEATURE: NORMAL
# disabled
# - FEATURE: TINY
# - FEATURE: SMALL
# - FEATURE: NORMAL
# - FEATURE: BIG
matrix:
fast_finish: true
before_build:
# Use Windows SDK 7.1 (= MSVC 2010)
- '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /release'
- 'set INCLUDE=%INCLUDE%C:\Program Files (x86)\Windows Kits\8.1\Include\um'
@ -25,9 +26,9 @@ test_script:
- cd src/testdir
# Testing with MSVC gvim
- path C:\Python35-x64;%PATH%
- nmake -f Make_dos.mak POSTSCRIPT=yes VIMPROG=..\gvim
- nmake -f Make_dos.mak VIMPROG=..\gvim
- nmake -f Make_dos.mak clean
# Testing with MingW console version
- nmake -f Make_dos.mak POSTSCRIPT=yes VIMPROG=..\vim
# Testing with MSVC console version
- nmake -f Make_dos.mak VIMPROG=..\vim
# vim: sw=2 sts=2 et ts=8 sr

View File

@ -5,48 +5,32 @@ setlocal ENABLEDELAYEDEXPANSION
cd %APPVEYOR_BUILD_FOLDER%
cd src
echo "Building MinGW 32bit console version"
set PATH=c:\msys64\mingw32\bin;%PATH%
mingw32-make.exe -f Make_ming.mak GUI=no OPTIMIZE=speed IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
.\vim -u NONE -c "redir @a | ver |0put a | wq" ver_ming.txt
:: Save vim.exe before Make clean, moved back below.
copy vim.exe testdir
mingw32-make.exe -f Make_ming.mak clean
:: Build Mingw huge version with python and channel support, or
:: with specified features without python.
echo "Building MinGW 32bit GUI version"
if "%FEATURE%" == "HUGE" (
mingw32-make.exe -f Make_ming.mak OPTIMIZE=speed CHANNEL=yes GUI=yes IME=yes ICONV=yes DEBUG=no PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27 PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35 FEATURES=%FEATURE% || exit 1
) ELSE (
mingw32-make.exe -f Make_ming.mak OPTIMIZE=speed GUI=yes IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
)
.\gvim -u NONE -c "redir @a | ver |0put a | wq" ver_ming_gui.txt
:: 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 OLE=no GUI=no IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
:: The executable is not used
nmake -f Make_mvc2.mak clean
nmake -f Make_mvc2.mak CPU=AMD64 ^
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE% || exit 1
:: build MSVC huge version with python and channel support
:: GUI needs to be last, so that testing works
echo "Building MSVC 64bit GUI Version"
if "%FEATURE%" == "HUGE" (
nmake -f Make_mvc2.mak DIRECTX=yes CPU=AMD64 CHANNEL=yes OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35-x64 FEATURES=%FEATURE% || exit 1
nmake -f Make_mvc2.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% || exit 1
) ELSE (
nmake -f Make_mvc2.mak CPU=AMD64 OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
nmake -f Make_mvc2.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE% || exit 1
)
.\gvim -u NONE -c "redir @a | ver |0put a | wq" ver_msvc.txt
:: Restore vim.exe, tests will run with this.
move /Y testdir\vim.exe .
echo "version output MinGW"
type ver_ming.txt
echo "version output MinGW GUI"
type ver_ming_gui.txt
echo "version output MVC"
echo "version output MSVC console"
.\vim --version
echo "version output MSVC GUI"
type ver_msvc.txt
cd ..

View File

@ -687,6 +687,15 @@ SectionEnd
${EndIf}
!macroend
!macro LoadDefaultVimrc out_var reg_value default_value
ClearErrors
ReadRegStr ${out_var} HKLM "${UNINST_REG_KEY_VIM}" ${reg_value}
${If} ${Errors}
${OrIf} ${out_var} == ""
StrCpy ${out_var} ${default_value}
${EndIf}
!macroend
Function .onInit
!ifdef HAVE_MULTI_LANG
# Select a language (or read from the registry).
@ -718,10 +727,10 @@ Function .onInit
!endif
${EndIf}
# Load the selections from the registry (if any).
${If} ${RunningX64}
SetRegView 64
${EndIf}
# Load the selections from the registry (if any).
!insertmacro LoadSectionSelection ${id_section_console} "select_console"
!insertmacro LoadSectionSelection ${id_section_batch} "select_batch"
!insertmacro LoadSectionSelection ${id_section_desktop} "select_desktop"
@ -736,6 +745,10 @@ Function .onInit
!ifdef HAVE_NLS
!insertmacro LoadSectionSelection ${id_section_nls} "select_nls"
!endif
# Load the default _vimrc settings from the registry (if any).
!insertmacro LoadDefaultVimrc $vim_compat_stat "vim_compat" "all"
!insertmacro LoadDefaultVimrc $vim_keymap_stat "vim_keyremap" "default"
!insertmacro LoadDefaultVimrc $vim_mouse_stat "vim_mouse" "default"
${If} ${RunningX64}
SetRegView lastused
${EndIf}
@ -799,17 +812,11 @@ Function SetCustom
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_defaults)
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_all)
# Default selection
${If} $vim_compat_stat == ""
ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_compat"
${Else}
StrCpy $3 $vim_compat_stat
${EndIf}
${If} $3 == "defaults"
${If} $vim_compat_stat == "defaults"
StrCpy $4 2
${ElseIf} $3 == "vim"
${ElseIf} $vim_compat_stat == "vim"
StrCpy $4 1
${ElseIf} $3 == "vi"
${ElseIf} $vim_compat_stat == "vi"
StrCpy $4 0
${Else} # default
StrCpy $4 3
@ -828,13 +835,7 @@ Function SetCustom
${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_default)
${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_windows)
# Default selection
${If} $vim_keymap_stat == ""
ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_keyremap"
${Else}
StrCpy $3 $vim_keymap_stat
${EndIf}
${If} $3 == "windows"
${If} $vim_keymap_stat == "windows"
StrCpy $4 1
${Else} # default
StrCpy $4 0
@ -854,15 +855,9 @@ Function SetCustom
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_windows)
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_unix)
# Default selection
${If} $vim_mouse_stat == ""
ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_mouse"
${Else}
StrCpy $3 $vim_mouse_stat
${EndIf}
${If} $3 == "xterm"
${If} $vim_mouse_stat == "xterm"
StrCpy $4 2
${ElseIf} $3 == "windows"
${ElseIf} $vim_mouse_stat == "windows"
StrCpy $4 1
${Else} # default
StrCpy $4 0

View File

@ -25,7 +25,7 @@ function decada#Unit_Name () dict " {{{1
" Convert filename into acs unit:
" 1: remove the file extenstion.
" 2: replace all double '_' or '-' with an dot (which denotes a separate)
" 3: remove a trailing '_' (wich denotes a specification)
" 3: remove a trailing '_' (which denotes a specification)
return substitute (substitute (expand ("%:t:r"), '__\|-', ".", "g"), '_$', "", '')
endfunction decada#Unit_Name " }}}1

View File

@ -1,15 +1,11 @@
" Vim script to download a missing spell file
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2012 Jan 08
" Last Change: 2020 Jul 10
if !exists('g:spellfile_URL')
" Prefer using http:// when netrw should be able to use it, since
" more firewalls let this through.
if executable("curl") || executable("wget") || executable("fetch")
let g:spellfile_URL = 'http://ftp.vim.org/pub/vim/runtime/spell'
else
let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
endif
" Always use https:// because it's secure. The certificate is for nluug.nl,
" thus we can't use the alias ftp.vim.org here.
let g:spellfile_URL = 'https://ftp.nluug.nl/pub/vim/runtime/spell'
endif
let s:spellfile_URL = '' " Start with nothing so that s:donedict is reset.

View File

@ -396,7 +396,7 @@ test_urls:
vim -S test_urls.vim
clean:
-rm doctags *.html tags.ref
-rm -f doctags *.html tags.ref
# These files are in the extra archive, skip if not present

View File

@ -77,7 +77,7 @@ Arabic requires ISO-8859-6 as well as Presentation Form-B fonts
(without Form-B, Arabic will _NOT_ be usable). It is highly
recommended that users search for so-called 'ISO-10646-1' fonts.
Do an Internet search or check www.arabeyes.org for further
info on where to attain the necessary Arabic fonts.
info on where to obtain the necessary Arabic fonts.
Font Installation
@ -123,7 +123,7 @@ o Setting the appropriate character Encoding
>
:set encoding=utf-8
<
to your .vimrc file (entering the command manually into you Vim
to your .vimrc file (entering the command manually into your Vim
window is highly discouraged). In short, include ':set
encoding=utf-8' to your .vimrc file.

View File

@ -1755,7 +1755,7 @@ Some examples:
Automatic formatting *auto-format* *autoformat*
When the 'a' flag is present in 'formatoptions' text is formatted
automatically when inserting text or deleting text. This works nice for
automatically when inserting text or deleting text. This works nicely for
editing text paragraphs. A few hints on how to use this:
- You need to properly define paragraphs. The simplest is paragraphs that are

View File

@ -1,4 +1,4 @@
*channel.txt* For Vim version 8.2. Last change: 2020 Jun 01
*channel.txt* For Vim version 8.2. Last change: 2020 Jul 10
VIM REFERENCE MANUAL by Bram Moolenaar
@ -1259,7 +1259,7 @@ can start typing a line.
The text of the prompt can be set with the |prompt_setprompt()| function.
The user can go to Normal mode and navigate through the buffer. This can be
useful see older output or copy text.
useful to see older output or copy text.
The CTRL-W key can be used to start a window command, such as CTRL-W w to
switch to the next window. This also works in Insert mode (use Shift-CTRL-W

View File

@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 8.2. Last change: 2020 Apr 23
*cmdline.txt* For Vim version 8.2. Last change: 2020 Jul 26
VIM REFERENCE MANUAL by Bram Moolenaar
@ -876,7 +876,7 @@ Also see |`=|.
*:<cword>* *<cword>* *:<cWORD>* *<cWORD>*
*:<cexpr>* *<cexpr>* *:<cfile>* *<cfile>*
*:<afile>* *<afile>* *:<abuf>* *<abuf>*
*:<amatch>* *<amatch>*
*:<amatch>* *<amatch>* *:<stack>* *<stack>*
*:<sfile>* *<sfile>* *:<slnum>* *<slnum>*
*:<sflnum>* *<sflnum>* *E499* *E500*
Note: these are typed literally, they are not special keys!
@ -903,12 +903,16 @@ Note: these are typed literally, they are not special keys!
events).
<sfile> When executing a ":source" command, is replaced with the
file name of the sourced file. *E498*
When executing a function, is replaced with:
"function {function-name}[{lnum}]"
function call nesting is indicated like this:
"function {function-name1}[{lnum}]..{function-name2}[{lnum}]"
When executing a function, is replaced with the call stack,
as with <stack> (this is for backwards compatibility, using
<stack> is preferred).
Note that filename-modifiers are useless when <sfile> is
used inside a function.
not used inside a script.
<stack> is replaced with the call stack, using
"function {function-name}[{lnum}]" for a function line
and "script {file-name}[{lnum}]" for a script line, and
".." in between items. E.g.:
"function {function-name1}[{lnum}]..{function-name2}[{lnum}]"
<slnum> When executing a ":source" command, is replaced with the
line number. *E842*
When executing a function it's the line number relative to

View File

@ -1,4 +1,4 @@
*digraph.txt* For Vim version 8.2. Last change: 2019 May 05
*digraph.txt* For Vim version 8.2. Last change: 2020 Jul 16
VIM REFERENCE MANUAL by Bram Moolenaar
@ -33,6 +33,8 @@ An alternative is using the 'keymap' option.
it is the Unicode character, see |digraph-encoding|.
Example: >
:digr e: 235 a: 228
< You can use `:exe` to enter a hex number: >
:exe 'digr += ' .. 0x2A72
< Avoid defining a digraph with '_' (underscore) as the
first character, it has a special meaning in the
future.

View File

@ -1,4 +1,4 @@
*editing.txt* For Vim version 8.2. Last change: 2020 Jun 05
*editing.txt* For Vim version 8.2. Last change: 2020 Jul 05
VIM REFERENCE MANUAL by Bram Moolenaar
@ -1402,7 +1402,7 @@ to 0, 'modeline' off, 'expandtab' off). Setting the 'binary' option has the
same effect. Don't forget to do this before reading the file.
There are a few things to remember when editing binary files:
- When editing executable files the number of characters must not change.
- When editing executable files the number of bytes must not change.
Use only the "R" or "r" command to change text. Do not delete characters
with "x" or by backspacing.
- Set the 'textwidth' option to 0. Otherwise lines will unexpectedly be
@ -1410,7 +1410,7 @@ There are a few things to remember when editing binary files:
- When there are not many <EOL>s, the lines will become very long. If you
want to edit a line that does not fit on the screen reset the 'wrap' option.
Horizontal scrolling is used then. If a line becomes too long (more than
about 32767 characters on the Amiga, much more on 32-bit systems, see
about 32767 bytes on the Amiga, much more on 32-bit and 64-bit systems, see
|limits|) you cannot edit that line. The line will be split when reading
the file. It is also possible that you get an "out of memory" error when
reading the file.

View File

@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.2. Last change: 2020 Jun 17
*eval.txt* For Vim version 8.2. Last change: 2020 Jul 21
VIM REFERENCE MANUAL by Bram Moolenaar
@ -94,8 +94,9 @@ the Number. Examples:
Number 0 --> String "0" ~
Number -1 --> String "-1" ~
*octal*
Conversion from a String to a Number is done by converting the first digits to
a number. Hexadecimal "0xf9", Octal "017" or "0o17", and Binary "0b10"
Conversion from a String to a Number only happens in legacy Vim script, not in
Vim9 script. It is done by converting the first digits to a number.
Hexadecimal "0xf9", Octal "017" or "0o17", and Binary "0b10"
numbers are recognized (NOTE: when using |scriptversion-4| octal with a
leading "0" is not recognized). If the String doesn't start with digits, the
result is zero.
@ -157,7 +158,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*
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
@ -1993,6 +1994,8 @@ v:mouse_col Column number for a mouse click obtained with |getchar()|.
*v:none* *none-variable* *None*
v:none An empty String. Used to put an empty item in JSON. See
|json_encode()|.
This can also be used as a function argument to use the
default value, see |none-function_argument|.
When used as a number this evaluates to zero.
When used as a string this evaluates to "v:none". >
echo v:none
@ -2511,13 +2514,15 @@ getjumplist([{winnr} [, {tabnr}]])
List list of jump list items
getline({lnum}) String line {lnum} of current buffer
getline({lnum}, {end}) List lines {lnum} to {end} of current buffer
getloclist({nr} [, {what}]) List list of location list items
getloclist({nr}) List list of location list items
getloclist({nr}, {what}) Dict get specific location list properties
getmarklist([{expr}]) List list of global/local marks
getmatches([{win}]) List list of current matches
getmousepos() Dict last known mouse position
getpid() Number process ID of Vim
getpos({expr}) List position of cursor, mark, etc.
getqflist([{what}]) List list of quickfix items
getqflist() List list of quickfix items
getqflist({what}) Dict get specific quickfix list properties
getreg([{regname} [, 1 [, {list}]]])
String or List contents of a register
getreginfo([{regname}]) Dict information about a register
@ -2756,12 +2761,15 @@ setcmdpos({pos}) Number set cursor position in command-line
setenv({name}, {val}) none set environment variable
setfperm({fname}, {mode}) Number set {fname} file permissions to {mode}
setline({lnum}, {line}) Number set line {lnum} to {line}
setloclist({nr}, {list} [, {action} [, {what}]])
Number modify location list using {list}
setloclist({nr}, {list} [, {action}])
Number modify location list using {list}
setloclist({nr}, {list}, {action}, {what})
Number modify specific location list props
setmatches({list} [, {win}]) Number restore a list of matches
setpos({expr}, {list}) Number set the {expr} position to {list}
setqflist({list} [, {action} [, {what}]])
Number modify quickfix list using {list}
setqflist({list} [, {action}]) Number modify quickfix list using {list}
setqflist({list}, {action}, {what})
Number modify specific quickfix list props
setreg({n}, {v} [, {opt}]) Number set register to value and type
settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val}
settabwinvar({tabnr}, {winnr}, {varname}, {val})
@ -2826,7 +2834,7 @@ stridx({haystack}, {needle} [, {start}])
string({expr}) String String representation of {expr} value
strlen({expr}) Number length of the String {expr}
strpart({str}, {start} [, {len}])
String {len} characters of {str} at {start}
String {len} bytes of {str} at byte {start}
strptime({format}, {timestring})
Number Convert {timestring} to unix timestamp
strridx({haystack}, {needle} [, {start}])
@ -3031,7 +3039,8 @@ append({lnum}, {text}) *append()*
:let failed = append(line('$'), "# THE END")
:let failed = append(0, ["Chapter 1", "the beginning"])
< Can also be used as a |method| after a List: >
< Can also be used as a |method| after a List, the base is
passed as the second argument: >
mylist->append(lnum)
@ -3053,7 +3062,8 @@ appendbufline({expr}, {lnum}, {text}) *appendbufline()*
error message is given. Example: >
:let failed = appendbufline(13, 0, "# THE START")
<
Can also be used as a |method| after a List: >
< Can also be used as a |method| after a List, the base is
passed as the second argument: >
mylist->appendbufline(buf, lnum)
@ -3635,7 +3645,7 @@ complete_check() *complete_check()*
*complete_info()*
complete_info([{what}])
Returns a Dictionary with information about Insert mode
Returns a |Dictionary| with information about Insert mode
completion. See |ins-completion|.
The items are:
mode Current completion mode name string.
@ -3897,6 +3907,7 @@ deepcopy({expr} [, {noref}]) *deepcopy()* *E698*
changing an item in the copy does not change the contents of
the original |List|.
A |Dictionary| is copied in a similar way as a |List|.
When {noref} is omitted or zero a contained |List| or
|Dictionary| is only copied once. All references point to
this single copy. With {noref} set to 1 every occurrence of a
@ -4833,12 +4844,14 @@ get({list}, {idx} [, {default}]) *get()*
Get item {idx} from |List| {list}. When this item is not
available return {default}. Return zero when {default} is
omitted.
Can also be used as a |method|: >
Preferably used as a |method|: >
mylist->get(idx)
get({blob}, {idx} [, {default}])
Get byte {idx} from |Blob| {blob}. When this byte is not
available return {default}. Return -1 when {default} is
omitted.
Preferably used as a |method|: >
myblob->get(idx)
get({dict}, {key} [, {default}])
Get item with key {key} from |Dictionary| {dict}. When this
item is not available return {default}. Return zero when
@ -4846,6 +4859,8 @@ get({dict}, {key} [, {default}])
let val = get(g:, 'var_name', 'default')
< This gets the value of g:var_name if it exists, and uses
'default' when it does not exist.
Preferably used as a |method|: >
mydict->get(key)
get({func}, {what})
Get an item with from Funcref {func}. Possible values for
{what} are:
@ -4853,7 +4868,9 @@ get({func}, {what})
"func" The function
"dict" The dictionary
"args" The list with arguments
Preferably used as a |method|: >
myfunc->get(what)
<
*getbufinfo()*
getbufinfo([{expr}])
getbufinfo([{dict}])
@ -4862,7 +4879,7 @@ getbufinfo([{dict}])
Without an argument information about all the buffers is
returned.
When the argument is a Dictionary only the buffers matching
When the argument is a |Dictionary| only the buffers matching
the specified criteria are returned. The following keys can
be specified in {dict}:
buflisted include only listed buffers.
@ -4915,8 +4932,11 @@ getbufinfo([{dict}])
<
To get buffer-local options use: >
getbufvar({bufnr}, '&option_name')
<
Can also be used as a |method|: >
GetBufnr()->getbufinfo()
<
*getbufline()*
getbufline({expr}, {lnum} [, {end}])
Return a |List| with the lines starting from {lnum} to {end}
@ -5018,8 +5038,9 @@ getchar([expr]) *getchar()*
When the user clicks a mouse button, the mouse event will be
returned. The position can then be found in |v:mouse_col|,
|v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|.
|getmousepos()| can also be used. This example positions the
mouse as it would normally happen: >
|getmousepos()| can also be used. Mouse move events will be
ignored.
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"
@ -5393,7 +5414,7 @@ getline({lnum} [, {end}])
< To get lines from another buffer see |getbufline()|
getloclist({nr} [, {what}]) *getloclist()*
Returns a list with all the entries in the location list for
Returns a |List| with all the entries in the location list for
window {nr}. {nr} can be the window number or the |window-ID|.
When {nr} is zero the current window is used.
@ -5415,6 +5436,14 @@ getloclist({nr} [, {what}]) *getloclist()*
|location-list-file-window| for more
details.
Returns an empty Dictionary if there is no location list for
the window {nr} or the window is not present.
Examples (See also |getqflist-examples|): >
:echo getloclist(3, {'all': 0})
:echo getloclist(5, {'filewinid': 0})
getmarklist([{expr}] *getmarklist()*
Without the {expr} argument returns a |List| with information
about all the global marks. |mark|
@ -5459,7 +5488,7 @@ getmatches([{win}]) *getmatches()*
:unlet m
<
getmousepos() *getmousepos()*
Returns a Dictionary with the last known position of the
Returns a |Dictionary| with the last known position of the
mouse. This can be used in a mapping for a mouse click or in
a filter of a popup window. The items are:
screenrow screen row
@ -5679,12 +5708,12 @@ getregtype([{regname}]) *getregtype()*
gettabinfo([{arg}]) *gettabinfo()*
If {arg} is not specified, then information about all the tab
pages is returned as a List. Each List item is a Dictionary.
pages is returned as a |List|. Each List item is a |Dictionary|.
Otherwise, {arg} specifies the tab page number and information
about that one is returned. If the tab page does not exist an
empty List is returned.
Each List item is a Dictionary with the following entries:
Each List item is a |Dictionary| with the following entries:
tabnr tab page number.
variables a reference to the dictionary with
tabpage-local variables
@ -5712,7 +5741,7 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
When {varname} is empty a dictionary with all window-local
variables is returned.
When {varname} is equal to "&" get the values of all
window-local options in a Dictionary.
window-local options in a |Dictionary|.
Otherwise, when {varname} starts with "&" get the value of a
window-local option.
Note that {varname} must be the name without "w:".
@ -5767,16 +5796,16 @@ gettagstack([{nr}]) *gettagstack()*
GetWinnr()->gettagstack()
getwininfo([{winid}]) *getwininfo()*
Returns information about windows as a List with Dictionaries.
Returns information about windows as a |List| with Dictionaries.
If {winid} is given Information about the window with that ID
is returned, as a List with one item. If the window does not
is returned, as a |List| with one item. If the window does not
exist the result is an empty list.
Without {winid} information about all the windows in all the
tab pages is returned.
Each List item is a Dictionary with the following entries:
Each List item is a |Dictionary| with the following entries:
botline last displayed buffer line
bufnr number of buffer in the window
height window height (excluding winbar)
@ -5804,7 +5833,7 @@ getwininfo([{winid}]) *getwininfo()*
GetWinnr()->getwininfo()
getwinpos([{timeout}]) *getwinpos()*
The result is a List with two numbers, the result of
The result is a |List| with two numbers, the result of
|getwinposx()| and |getwinposy()| combined:
[x-pos, y-pos]
{timeout} can be used to specify how long to wait in msec for
@ -5859,7 +5888,7 @@ glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()*
'suffixes' affect the ordering of matches.
'wildignorecase' always applies.
When {list} is present and it is |TRUE| the result is a List
When {list} is present and it is |TRUE| the result is a |List|
with all matching files. The advantage of using a List is,
you also get filenames containing newlines correctly.
Otherwise the result is a String and when there are several
@ -5922,7 +5951,7 @@ globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
one of the patterns in 'wildignore' will be skipped and
'suffixes' affect the ordering of matches.
When {list} is present and it is |TRUE| the result is a List
When {list} is present and it is |TRUE| the result is a |List|
with all matching files. The advantage of using a List is, you
also get filenames containing newlines correctly. Otherwise
the result is a String and when there are several matches,
@ -7281,7 +7310,7 @@ matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
*max()*
max({expr}) Return the maximum value of all items in {expr}.
{expr} can be a List or a Dictionary. For a Dictionary,
{expr} can be a |List| or a |Dictionary|. For a Dictionary,
it returns the maximum of all values in the Dictionary.
If {expr} is neither a List nor a Dictionary, or one of the
items in {expr} cannot be used as a Number this results in
@ -7352,7 +7381,7 @@ menu_info({name} [, {mode}]) *menu_info()*
< *min()*
min({expr}) Return the minimum value of all items in {expr}.
{expr} can be a List or a Dictionary. For a Dictionary,
{expr} can be a |List| or a |Dictionary|. For a Dictionary,
it returns the minimum of all values in the Dictionary.
If {expr} is neither a List nor a Dictionary, or one of the
items in {expr} cannot be used as a Number this results in
@ -8014,7 +8043,7 @@ readdirex({directory} [, {expr} [, {dict}]]) *readdirex()*
If {expr} results in 1 then this entry will be added
to the list.
The entries "." and ".." are always excluded.
Each time {expr} is evaluated |v:val| is set to a Dictionary
Each time {expr} is evaluated |v:val| is set to a |Dictionary|
of the entry.
When {expr} is a function the entry is passed as the argument.
For example, to get a list of files ending in ".txt": >
@ -8263,7 +8292,7 @@ remove({list}, {idx} [, {end}]) *remove()*
Without {end}: Remove the item at {idx} from |List| {list} and
return the item.
With {end}: Remove items from {idx} to {end} (inclusive) and
return a List with these items. When {idx} points to the same
return a |List| with these items. When {idx} points to the same
item as {end} a list with one item is returned. When {end}
points to an item before {idx} this is an error.
See |list-index| for possible values of {idx} and {end}.
@ -8400,7 +8429,7 @@ screenchar({row}, {col}) *screenchar()*
GetRow()->screenchar(col)
screenchars({row}, {col}) *screenchars()*
The result is a List of Numbers. The first number is the same
The result is a |List| of Numbers. The first number is the same
as what |screenchar()| returns. Further numbers are
composing characters on top of the base character.
This is mainly to be used for testing.
@ -8565,7 +8594,7 @@ searchcount([{options}]) *searchcount()*
without the "S" flag in 'shortmess'. This works even if
'shortmess' does contain the "S" flag.
This returns a Dictionary. The dictionary is empty if the
This returns a |Dictionary|. The dictionary is empty if the
previous pattern was not set and "pattern" was not specified.
key type meaning ~
@ -8647,7 +8676,7 @@ searchcount([{options}]) *searchcount()*
" search again
call searchcount()
<
{options} must be a Dictionary. It can contain:
{options} must be a |Dictionary|. It can contain:
key type meaning ~
recompute |Boolean| if |TRUE|, recompute the count
like |n| or |N| was executed.
@ -8999,6 +9028,8 @@ setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()*
Otherwise, same as |setqflist()|.
Also see |location-list|.
For {action} see |setqflist-action|.
If the optional {what} dictionary argument is supplied, then
only the items listed in {what} are set. Refer to |setqflist()|
for the list of supported keys in {what}.
@ -9077,7 +9108,7 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
only the items listed in {what} are set. The first {list}
argument is ignored. See below for the supported items in
{what}.
*setqflist-what*
When {what} is not present, the items in {list} or used. Each
item must be a dictionary. Non-dictionary items in {list} are
ignored. Each dictionary item can contain the following
@ -9114,7 +9145,7 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
Note that the list is not exactly the same as what
|getqflist()| returns.
{action} values: *E927*
{action} values: *setqflist-action* *E927*
'a' The items from {list} are added to the existing
quickfix list. If there is no existing list, then a
new list is created.
@ -9155,7 +9186,8 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
the last quickfix list.
quickfixtextfunc
function to get the text to display in the
quickfix window. Refer to
quickfix window. The value can be the name of
a function or a funcref or a lambda. Refer to
|quickfix-window-function| for an explanation
of how to write the function and an example.
title quickfix list title text. See |quickfix-title|
@ -9186,10 +9218,12 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
setreg({regname}, {value} [, {options}])
Set the register {regname} to {value}.
If {regname} is "" or "@", the unnamed register '"' is used.
{value} may be any value returned by |getreg()| or
|getreginfo()|, including a |List| or |Dict|.
If {options} contains "a" or {regname} is upper case,
then the value is appended.
{options} can also contain a register type specification:
"c" or "v" |characterwise| mode
"l" or "V" |linewise| mode
@ -9220,7 +9254,7 @@ setreg({regname}, {value} [, {options}])
register: >
:let var_a = getreginfo()
:call setreg('a', var_a)
< or:
< or: >
:let var_a = getreg('a', 1, 1)
:let var_amode = getregtype('a')
....
@ -9697,13 +9731,13 @@ state([{what}]) *state()*
something is busy:
m halfway a mapping, :normal command, feedkeys() or
stuffed command
o operator pending or waiting for a command argument,
e.g. after |f|
o operator pending, e.g. after |d|
a Insert mode autocomplete active
x executing an autocommand
w blocked on waiting, e.g. ch_evalexpr(), ch_read() and
ch_readraw() when reading json.
S not triggering SafeState or SafeStateAgain
ch_readraw() when reading json
S not triggering SafeState or SafeStateAgain, e.g. after
|f| or a count
c callback invoked, including timer (repeats for
recursiveness up to "ccc")
s screen has scrolled for messages
@ -9884,7 +9918,7 @@ string({expr}) Return {expr} converted to a String. If {expr} is a Number,
List [item, item]
Dictionary {key: value, key: value}
When a List or Dictionary has a recursive reference it is
When a |List| or |Dictionary| has a recursive reference it is
replaced by "[...]" or "{...}". Using eval() on the result
will then fail.
@ -10175,7 +10209,7 @@ synIDtrans({synID}) *synIDtrans()*
:echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
synconcealed({lnum}, {col}) *synconcealed()*
The result is a List with currently three items:
The result is a |List| with currently three items:
1. The first item in the list is 0 if the character at the
position {lnum} and {col} is not part of a concealable
region, 1 if it is.
@ -10220,7 +10254,7 @@ synstack({lnum}, {col}) *synstack()*
system({expr} [, {input}]) *system()* *E677*
Get the output of the shell command {expr} as a string. See
|systemlist()| to get the output as a List.
|systemlist()| to get the output as a |List|.
When {input} is given and is a string this string is written
to a file and passed as stdin to the command. The string is
@ -10482,7 +10516,7 @@ timer_info([{id}])
returned.
When {id} is omitted information about all timers is returned.
For each timer the information is stored in a Dictionary with
For each timer the information is stored in a |Dictionary| with
these items:
"id" the timer ID
"time" time the timer was started with
@ -10716,7 +10750,7 @@ undotree() *undotree()*
undo blocks.
The first item in the "entries" list is the oldest undo item.
Each List item is a Dictionary with these items:
Each List item is a |Dictionary| with these items:
"seq" Undo sequence number. Same as what appears in
|:undolist|.
"time" Timestamp when the change happened. Use
@ -10928,7 +10962,7 @@ win_splitmove({nr}, {target} [, {options}]) *win_splitmove()*
Returns zero for success, non-zero for failure.
{options} is a Dictionary with the following optional entries:
{options} is a |Dictionary| with the following optional entries:
"vertical" When TRUE, the split is created vertically,
like with |:vsplit|.
"rightbelow" When TRUE, the split is made below or to the
@ -11678,7 +11712,7 @@ The argument default expressions are evaluated at the time of the function
call, not definition. Thus it is possible to use an expression which is
invalid the moment the function is defined. The expressions are also only
evaluated when arguments are not specified during a call.
*none-function_argument*
You can pass |v:none| to use the default expression. Note that this means you
cannot pass v:none as an ordinary value when an argument has a default
expression.
@ -12093,8 +12127,9 @@ An assignment leaves out the `:let` command. |vim9-declaration|
text...
text...
{endmarker}
Set internal variable {var-name} to a List containing
the lines of text bounded by the string {endmarker}.
Set internal variable {var-name} to a |List|
containing the lines of text bounded by the string
{endmarker}.
{endmarker} must not contain white space.
{endmarker} cannot start with a lower case character.
The last line should end only with the {endmarker}

View File

@ -312,7 +312,7 @@ can create any of the following: >
$VIM/vimfiles/indent/sqlite.vim
No changes are necessary to the SQLSetType function. It will automatically
pickup the new SQL files and load them when you issue the SQLSetType command.
pick up the new SQL files and load them when you issue the SQLSetType command.
==============================================================================
@ -519,7 +519,7 @@ beginning with those characters. >
4.3.2 Column Completion: *sql-completion-columns*
The SQL completion plugin can also display a list of columns for particular
tables. The column completion is trigger via <C-C>c.
tables. The column completion is triggered via <C-C>c.
NOTE: The following example uses <Right> to trigger a column list while
the popup window is active.
@ -727,7 +727,7 @@ your platform (often a case on *nix) you define the following variable in
your |vimrc|: >
let g:omni_sql_no_default_maps = 1
Do no edit ftplugin/sql.vim directly! If you change this file your changes
Do not edit ftplugin/sql.vim directly! If you change this file your changes
will be over written on future updates. Vim has a special directory structure
which allows you to make customizations without changing the files that are
included with the Vim distribution. If you wish to customize the maps

View File

@ -1,4 +1,4 @@
*if_lua.txt* For Vim version 8.2. Last change: 2020 May 17
*if_lua.txt* For Vim version 8.2. Last change: 2020 Jun 28
VIM REFERENCE MANUAL by Luis Carvalho
@ -217,14 +217,27 @@ Vim's syntax for lists. Since lists are objects, changes in list references in
Lua are reflected in Vim and vice-versa. A list "l" has the following
properties and methods:
NOTE: In patch 8.2.1066 array indexes were changed from zero-based to
one-based. You can check with: >
if has("patch-8.2.1066")
Properties
----------
o "#l" is the number of items in list "l", equivalent to "len(l)"
in Vim.
o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
o "l[k]" returns the k-th item in "l"; "l" is one-indexed, as in Lua.
To modify the k-th item, simply do "l[k] = newitem"; in
particular, "l[k] = nil" removes the k-th item from "l".
particular, "l[k] = nil" removes the k-th item from "l". Item can
be added to the end of the list by "l[#l + 1] = newitem"
o "l()" returns an iterator for "l".
o "table.insert(l, newitem)" inserts an item at the end of the list.
(only Lua 5.3 and later)
o "table.insert(l, position, newitem)" inserts an item at the
specified position. "position" is one-indexed. (only Lua 5.3 and
later)
o "table.remove(l, position)" removes an item at the specified
position. "position" is one-indexed.
Methods
-------
@ -237,13 +250,16 @@ Examples:
:let l = [1, 'item']
:lua l = vim.eval('l') -- same 'l'
:lua l:add(vim.list())
:lua l[0] = math.pi
:lua l[1] = math.pi
:echo l[0] " 3.141593
:lua l[0] = nil -- remove first item
:lua l[1] = nil -- remove first item
:lua l:insert(true, 1)
:lua print(l, #l, l[0], l[1], l[-1])
:lua print(l, #l, l[1], l[2])
:lua l[#l + 1] = 'value'
:lua table.insert(l, 100)
:lua table.insert(l, 2, 200)
:lua table.remove(l, 1)
:lua for item in l() do print(item) end
<
==============================================================================
4. Dict userdata *lua-dict*
@ -333,6 +349,14 @@ Examples:
:lua l = d.len -- assign d as 'self'
:lua print(l())
<
Lua functions and closures are automatically converted to a Vim |Funcref| and
can be accessed in Vim scripts. Example:
>
lua <<EOF
vim.fn.timer_start(1000, function(timer)
print('timer callback')
end)
EOF
==============================================================================
7. Buffer userdata *lua-buffer*

View File

@ -843,11 +843,10 @@ When modifyOtherKeys is enabled you can map <C-[> and <C-S-{>: >
imap <C-S-{> {{{
Without modifyOtherKeys <C-[> and <C-S-{> are indistinguishable from Esc.
A known side effect effect is that in Insert mode the raw escape sequence is
inserted after the CTRL-V key. This can be used to check whether
modifyOtherKeys is enabled: In Insert mode type CTRL-SHIFT-V CTRL-V, if you
get one byte then modifyOtherKeys is off, if you get <1b>27;5;118~ then it is
on.
A known side effect is that in Insert mode the raw escape sequence is inserted
after the CTRL-V key. This can be used to check whether modifyOtherKeys is
enabled: In Insert mode type CTRL-SHIFT-V CTRL-V, if you get one byte then
modifyOtherKeys is off, if you get <1b>27;5;118~ then it is on.
When the 'esckeys' option is off, then modifyOtherKeys will be disabled in
Insert mode to avoid every key with a modifier causing Insert mode to end.

View File

@ -128,7 +128,7 @@ There are several ways to enter multi-byte characters:
- For MS-Windows IME can be used. See |IME|.
- For all systems keymaps can be used. See |mbyte-keymap|.
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to choose
the different input methods or disable them temporarily.
==============================================================================
@ -141,8 +141,8 @@ in, or just use a certain locale inside Vim.
WHAT IS A LOCALE? *locale*
There are many of languages in the world. And there are different cultures
and environments at least as much as the number of languages. A linguistic
There are many languages in the world. And there are different cultures and
environments at least as many as the number of languages. A linguistic
environment corresponding to an area is called "locale". This includes
information about the used language, the charset, collating order for sorting,
date format, currency format and so on. For Vim only the language and charset
@ -889,7 +889,7 @@ input_server_name is your |IM-server| name (check your |IM-server|
your_input_style is one of |OverTheSpot|, |OffTheSpot|, |Root|. See
also |xim-input-style|.
*international may not necessary if you use X11R6.
*international may not be necessary if you use X11R6.
*.inputMethod and *.preeditType are optional if you use X11R6.
For example, when you are using kinput2 as |IM-server|, >
@ -952,7 +952,7 @@ automatically.
This works on not only insert-normal mode, but also search-command input and
replace mode.
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to choose
the different input methods or disable them temporarily.
WHAT IS IME

View File

@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2020 Jun 10
*options.txt* For Vim version 8.2. Last change: 2020 Jul 18
VIM REFERENCE MANUAL by Bram Moolenaar
@ -1951,9 +1951,11 @@ A jump table for the options with a short description can be found at |Q_op|.
{not available when compiled without the |+textprop|
or |+quickfix| feature}
When 'completeopt' contains "popup" then this option is used for the
properties of the info popup when it is created. You can also use
|popup_findinfo()| and then set properties for an existing info popup
with |popup_setoptions()|. See |complete-popup|.
properties of the info popup when it is created. If an info popup
window already exists it is closed, so that the option value is
applied when it is created again.
You can also use |popup_findinfo()| and then set properties for an
existing info popup with |popup_setoptions()|. See |complete-popup|.
*'concealcursor'* *'cocu'*
@ -4133,7 +4135,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
This option specifies a function that will be called to
activate or deactivate the Input Method.
It is not used in the GUI.
It is not used in the MS-Windows GUI version.
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|.
@ -4242,7 +4244,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
This option specifies a function that is called to obtain the status
of Input Method. It must return a positive number when IME is active.
It is not used in the GUI.
It is not used in the MS-Windows GUI version.
Example: >
function ImStatusFunc()
@ -5911,7 +5913,8 @@ A jump table for the options with a short description can be found at |Q_op|.
customize the information displayed in the quickfix or location window
for each entry in the corresponding quickfix or location list. See
|quickfix-window-function| for an explanation of how to write the
function and an example.
function and an example. The value can be the name of a function or a
lambda.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
@ -6730,7 +6733,7 @@ A jump table for the options with a short description can be found at |Q_op|.
flag meaning when present ~
f use "(3 of 5)" instead of "(file 3 of 5)"
i use "[noeol]" instead of "[Incomplete last line]"
l use "999L, 888C" instead of "999 lines, 888 characters"
l use "999L, 888B" instead of "999 lines, 888 bytes"
m use "[+]" instead of "[Modified]"
n use "[New]" instead of "[New File]"
r use "[RO]" instead of "[readonly]"
@ -7708,7 +7711,6 @@ A jump table for the options with a short description can be found at |Q_op|.
on Amiga: "amiga"
on Haiku: "xterm"
on Mac: "mac-ansi"
on MiNT: "vt52"
on Unix: "ansi"
on VMS: "ansi"
on Win 32: "win32")

View File

@ -1,39 +1,15 @@
*os_mint.txt* For Vim version 8.2. Last change: 2005 Mar 29
*os_mint.txt* For Vim version 8.2. Last change: 2020 Jul 14
VIM REFERENCE MANUAL by Jens M. Felderhoff
*MiNT* *Atari*
This file contains the particularities for the Atari MiNT version of Vim.
The Atari MiNT support was removed with patch 8.2.1215. It probably didn't
work at that time, since the code was old and not maintained.
For compiling Vim on the Atari running MiNT see "INSTALL" and "Makefile"
in the src directory.
Vim for MiNT behaves almost exactly like the Unix version.
The Unix behavior described in the documentation also refers to the
MiNT version of Vim unless explicitly stated otherwise.
Originally added by: Jens M. Felderhoff, e-mail: <jmf@infko.uni-koblenz.de>
For wildcard expansion of <~> (home directory) you need a shell that
expands the tilde. The vanilla Bourne shell doesn't recognize it.
With csh and ksh it should work OK.
The MiNT version of vim needs the termcap file /etc/termcap with the
terminal capabilities of your terminal. Builtin termcaps are
supported for the vt52 terminal. Termcap entries for the TOSWIN window
manager and the virtual console terminals have been appended to the
termcap file that comes with the Vim distribution.
If you should encounter problems with swapped <BS> and <Del> keys, see
|:fixdel|.
Because terminal updating under MiNT is often slow (e.g. serial line
terminal), the 'showcmd' and 'ruler' options are default off.
If you have a fast terminal, try setting them on. You might
also want to set 'ttyfast'.
Send bug reports to
Jens M. Felderhoff, e-mail: <jmf@infko.uni-koblenz.de>
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@ -30,8 +30,8 @@ can be changed at compile time.
Because terminal updating under Unix is often slow (e.g. serial line
terminal, shell window in suntools), the 'showcmd' and 'ruler' options
are default off. If you have a fast terminal, try setting them on. You might
also want to set 'ttyfast'.
are off by default. If you have a fast terminal, try setting them on. You
might also want to set 'ttyfast'.
When using Vim in an xterm the mouse clicks can be used by Vim by setting
'mouse' to "a". If there is access to an X-server gui style copy/paste will

View File

@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.2. Last change: 2019 Dec 07
*pattern.txt* For Vim version 8.2. Last change: 2020 Jul 10
VIM REFERENCE MANUAL by Bram Moolenaar
@ -1279,7 +1279,7 @@ not match in "càt" (where the a has the composing character 0x0300), but
0xe1, it does not have a compositing character). It does match "cat" (where
the a is just an a).
When a composing character appears at the start of the pattern of after an
When a composing character appears at the start of the pattern or after an
item that doesn't include the composing character, a match is found at any
character that includes this composing character.

View File

@ -1964,7 +1964,10 @@ The function should return a single line of text to display in the quickfix
window for each entry from start_idx to end_idx. The function can obtain
information about the entries using the |getqflist()| function and specifying
the quickfix list identifier "id". For a location list, getloclist() function
can be used with the 'winid' argument.
can be used with the 'winid' argument. If an empty list is returned, then the
default format is used to display all the entries. If an item in the returned
list is an empty string, then the default format is used to display the
corresponding entry.
If a quickfix or location list specific customization is needed, then the
'quickfixtextfunc' attribute of the list can be set using the |setqflist()| or

View File

@ -642,7 +642,7 @@ disallowed though.
This assumes you write one or more plugins that you distribute as a package.
If you have two unrelated plugins you would use two packages, so that Vim
users can chose what they include or not. Or you can decide to use one
users can choose what they include or not. Or you can decide to use one
package with optional plugins, and tell the user to add the ones he wants with
`:packadd`.

View File

@ -69,7 +69,7 @@ o Invocations
+ 'rightleft' ('rl') sets window orientation to right-to-left.
+ 'delcombine' ('deco'), boolean, if editing UTF-8 encoded languages,
allows one to remove a composing character which gets superimposed
on those that proceeded them (some languages require this).
on those that preceded them (some languages require this).
+ 'rightleftcmd' ('rlc') sets the command-line within certain modes
(such as search) to be utilized in right-to-left orientation as well.

View File

@ -78,7 +78,7 @@ used by popup windows where 'cursorline' is set.
*sign-priority*
Each placed sign is assigned a priority value. When multiple signs are placed
on the same line, the attributes of the sign with the highest priority is used
independent of the sign group. The default priority for a sign is 10. The
independently of the sign group. The default priority for a sign is 10. The
priority is assigned at the time of placing a sign.
When the line on which the sign is placed is deleted, the sign is moved to the

View File

@ -1,4 +1,4 @@
*spell.txt* For Vim version 8.2. Last change: 2020 Jun 10
*spell.txt* For Vim version 8.2. Last change: 2020 Jul 10
VIM REFERENCE MANUAL by Bram Moolenaar
@ -653,11 +653,12 @@ ask you where to write the file (there must be a writable directory in
'runtimepath' for this).
The plugin has a default place where to look for spell files, on the Vim ftp
server. If you want to use another location or another protocol, set the
g:spellfile_URL variable to the directory that holds the spell files. The
|netrw| plugin is used for getting the file, look there for the specific
syntax of the URL. Example: >
let g:spellfile_URL = 'http://ftp.vim.org/vim/runtime/spell'
server. The protocol used is SSL (https://) for security. If you want to use
another location or another protocol, set the g:spellfile_URL variable to the
directory that holds the spell files. You can use http:// or ftp://, but you
are taking a security risk then. The |netrw| plugin is used for getting the
file, look there for the specific syntax of the URL. Example: >
let g:spellfile_URL = 'https://ftp.nluug.nl/vim/runtime/spell'
You may need to escape special characters.
The plugin will only ask about downloading a language once. If you want to

View File

@ -1,4 +1,4 @@
*syntax.txt* For Vim version 8.2. Last change: 2020 Jun 01
*syntax.txt* For Vim version 8.2. Last change: 2020 Jul 08
VIM REFERENCE MANUAL by Bram Moolenaar
@ -1403,7 +1403,7 @@ to your startup file.
EUPHORIA *euphoria3.vim* *euphoria4.vim* *ft-euphoria-syntax*
Two syntax highlighting files exists for Euphoria. One for Euphoria
Two syntax highlighting files exist for Euphoria. One for Euphoria
version 3.1.1, which is the default syntax highlighting file, and one for
Euphoria version 4.0.5 or later.
@ -1937,7 +1937,7 @@ new highlightings for the following groups.:
Debug, DebugSpecial, DebugString, DebugBoolean, DebugType
which are used for the statement itself, special characters used in debug
strings, strings, boolean constants and types (this, super) respectively. I
have opted to chose another background for those statements.
have opted to choose another background for those statements.
Javadoc is a program that takes special comments out of Java program files and
creates HTML pages. The standard configuration will highlight this HTML code
@ -5018,7 +5018,7 @@ ctermul={color-nr} *highlight-ctermul*
console. Example, for reverse video: >
:highlight Visual ctermfg=bg ctermbg=fg
< Note that the colors are used that are valid at the moment this
command are given. If the Normal group colors are changed later, the
command is given. If the Normal group colors are changed later, the
"fg" and "bg" colors will not be adjusted.

View File

@ -1979,6 +1979,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:<sfile> cmdline.txt /*:<sfile>*
:<sflnum> cmdline.txt /*:<sflnum>*
:<slnum> cmdline.txt /*:<slnum>*
:<stack> cmdline.txt /*:<stack>*
:= various.txt /*:=*
:> change.txt /*:>*
:? cmdline.txt /*:?*
@ -3647,6 +3648,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
<sfile> cmdline.txt /*<sfile>*
<sflnum> cmdline.txt /*<sflnum>*
<slnum> cmdline.txt /*<slnum>*
<stack> cmdline.txt /*<stack>*
<xCSI> intro.txt /*<xCSI>*
<xDown> term.txt /*<xDown>*
<xEnd> term.txt /*<xEnd>*
@ -3894,9 +3896,11 @@ E103 diff.txt /*E103*
E104 digraph.txt /*E104*
E1042 vim9.txt /*E1042*
E105 mbyte.txt /*E105*
E1050 vim9.txt /*E1050*
E107 eval.txt /*E107*
E108 eval.txt /*E108*
E109 eval.txt /*E109*
E1092 vim9.txt /*E1092*
E1094 vim9.txt /*E1094*
E11 cmdline.txt /*E11*
E110 eval.txt /*E110*
@ -4698,6 +4702,7 @@ E855 autocmd.txt /*E855*
E858 eval.txt /*E858*
E859 eval.txt /*E859*
E86 windows.txt /*E86*
E860 textprop.txt /*E860*
E861 popup.txt /*E861*
E862 eval.txt /*E862*
E863 popup.txt /*E863*
@ -8196,6 +8201,7 @@ no_plugin_maps filetype.txt /*no_plugin_maps*
nocombine syntax.txt /*nocombine*
non-greedy pattern.txt /*non-greedy*
non-zero-arg eval.txt /*non-zero-arg*
none-function_argument eval.txt /*none-function_argument*
none-variable eval.txt /*none-variable*
normal-index index.txt /*normal-index*
not-compatible usr_01.txt /*not-compatible*
@ -8819,7 +8825,9 @@ setloclist() eval.txt /*setloclist()*
setmatches() eval.txt /*setmatches()*
setpos() eval.txt /*setpos()*
setqflist() eval.txt /*setqflist()*
setqflist-action eval.txt /*setqflist-action*
setqflist-examples quickfix.txt /*setqflist-examples*
setqflist-what eval.txt /*setqflist-what*
setreg() eval.txt /*setreg()*
settabvar() eval.txt /*settabvar()*
settabwinvar() eval.txt /*settabwinvar()*
@ -10002,6 +10010,7 @@ vim9-declaration vim9.txt /*vim9-declaration*
vim9-declarations usr_46.txt /*vim9-declarations*
vim9-differences vim9.txt /*vim9-differences*
vim9-export vim9.txt /*vim9-export*
vim9-gotchas vim9.txt /*vim9-gotchas*
vim9-import vim9.txt /*vim9-import*
vim9-rationale vim9.txt /*vim9-rationale*
vim9-scopes vim9.txt /*vim9-scopes*

View File

@ -1,4 +1,4 @@
*testing.txt* For Vim version 8.2. Last change: 2020 Jun 15
*testing.txt* For Vim version 8.2. Last change: 2020 Jul 11
VIM REFERENCE MANUAL by Bram Moolenaar
@ -264,7 +264,8 @@ assert_equal({expected}, {actual} [, {msg}])
< Will result in a string to be added to |v:errors|:
test.vim line 12: Expected 'foo' but got 'bar' ~
Can also be used as a |method|: >
Can also be used as a |method|, the base is passed as the
second argument: >
mylist->assert_equal([1, 2, 3])
< *assert_equalfile()*
@ -294,8 +295,23 @@ assert_exception({error} [, {msg}]) *assert_exception()*
assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
Run {cmd} and add an error message to |v:errors| if it does
NOT produce an error. Also see |assert-return|.
When {error} is given it must match in |v:errmsg|.
NOT produce an error or when {error} is not found in the
error message. Also see |assert-return|.
When {error} is a string it must be found literally in the
first reported error. Most often this will be the error code,
including the colon, e.g. "E123:". >
assert_fails('bad cmd', 'E987:')
<
When {error} is a |List| with one or two strings, these are
used as patterns. The first pattern is matched against the
first reported error: >
assert_fails('cmd', ['E987:.*expected bool'])
< The second pattern, if present, is matched against the last
reported error. To only match the last error use an empty
string for the first error: >
assert_fails('cmd', ['', 'E987:'])
<
Note that beeping is not considered an error, and some failing
commands only beep. Use |assert_beeps()| for those.

View File

@ -220,7 +220,7 @@ prop_list({lnum} [, {props}]) *prop_list()*
Can also be used as a |method|: >
GetLnum()->prop_list()
<
*prop_remove()* *E968*
*prop_remove()* *E968* *E860*
prop_remove({props} [, {lnum} [, {lnum-end}]])
Remove a matching text property from line {lnum}. When
{lnum-end} is given, remove matching text properties from line

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2020 Jun 21
*todo.txt* For Vim version 8.2. Last change: 2020 Jul 26
VIM REFERENCE MANUAL by Bram Moolenaar
@ -38,23 +38,37 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
Include src/po/vim.pot ?
See if resizing a terminal can be fixed.
Vim9 script:
Making everything work:
- Error for "g:var: string = 'value'"
- Make func()->append('$') work - value is last argument, not first. #6305
- possible memory leak in test_vim9_func through compile_nested_function.
- memory leaks in test_vim9_expr
- memory leaks in test_vim9_script
- more return types depending on the first argument, like sort().
- more items in https://github.com/vim/vim/issues/6507
- More "goto failed" with check for trylevel.
- memory leak in test_vim9_script
- Check that when sourcing a Vim9 script, only the global items can be used.
- Make "true" and "false" work in vim9script
- :put with a "=" register argument doesn't work, need to find the expression
and compile it. (#6397)
- At the script level, keep script variables local to the block they are
declared in? Need to remember what variables were declared and delete them
when leaving the block.
- Implement { } block at the script level.
- need to check type when a declaration specifies a type: #6507
let nr: number = 'asdf'
- Make map() give an error if the resulting type is wrong.
Add mapnew() to create a new List/Dict for the result, which can have a
different value type.
- Implement "export {one, two three}".
- ISN_CHECKTYPE could use check_argtype()
- Slice of list: [1, 2, 3][1:2].
- give error for variable name:
let p = function('NoSuchFunc')
- Give runtime error if function argument is wrong.
def Increment(nr: number)
range(3)->Increment()
- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
- Expand `=expr` in :mkspell
- Test that a function defined inside a :def function is local to that
function, g: functions can be defined and script-local functions cannot be
defined.
- Support passing v:none to use the default argument value. (#6504)
- make 0 == 'string' fail on the script level, like inside :def.
- Check that when using a user function name without prefix, it does not find
a global function. Prefixing g: is required.
@ -68,15 +82,12 @@ Making everything work:
- Compile redir to local variable: var_redir_start().
- Compile builtin functions that access local variables:
islocked()
- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
- Expand `=expr` in :mkspell
- possible memory leak in test_vim9_func through compile_nested_function.
- memory leaks in test_vim9_expr
- memory leaks in test_vim9_script
- memory leaks in test_vim9_cmd
- When evaluating constants for script variables, some functions could work:
has('asdf'), len('string')
- Support type for ":let"/":const" at script level for Vim9 script.
(Ben Jackson, #5671)
Can we share the code from ex_let_const() between direct execution and
compiling?
- Implement "as Name" in "import Item as Name from ..."
- Disallow unlet for local/script/imported vars
- Make "++nr" work.
@ -87,6 +98,7 @@ Making everything work:
- eval_expr() call in dbg_parsearg() and debuggy_find()
- has() is compiled as a constant, but some checks are dynamic.
Check for dynamic values, such as "gui_running".
- Implement command modifiers, such as "silent". (#6530)
New syntax and functionality:
Improve error checking:
- "echo Func()" is an error if Func() does not return anything.
@ -134,18 +146,16 @@ Further improvements:
- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
Popup windows:
- With some sequence get get hidden finished terminal buffer. (#5768)
Cannot close popup terminal (#5744)
Buffer can't be wiped, gets status "aF". (#5764)
Is buf->nwindows incorrect?
- popup_clear() and popup_close() should close the terminal popup, and
make the buffer hidden. #5745
- Cursor not updated before a redraw, making it jump. (#5943)
- Add a termcap entry for changing the cursor when it goes under the popup and
back. like t_SI and t_EI (t_SU and t_EU, where "U" means under?)
- With terminal in popup, allow for popup_hide() to temporarily hide it.?
- Fire some autocommand event after a new popup window was created and
positioned? PopupNew? Could be used to set some options or move it out of
the way. (#5737)
However, it may also cause trouble, changing the popup of another plugin.
- Add a way to use popup_menu() synchronously: instead of invoking the
callback, return the choice. (Ben Jackson, #6534)
- Use popup (or popup menu) for command line completion
- When using a popup for the info of a completion menu, and there is not
enough space, let the popup overlap with the menu. (#4544)
@ -201,6 +211,9 @@ Terminal debugger:
Terminal emulator window:
- No support for underline color, t_8u.
- When in terminal-Normal mode when the job finishes, the cursor jumps to the
end but the window is not updated. This only happens when typing "a".
:term bash -c "for V in {0..5}; do echo $V; sleep 1; done"
- When started with ":terminal ++close" and the shell exits but there is a
background process, the window remains open, because the channel still
exists (and output still shows). Perhaps close the window when an explicit
@ -240,7 +253,7 @@ Terminal emulator window:
conversions.
Error numbers available:
E489, E610, E611, E653, E856
E610, E611, E653
Remove SPACE_IN_FILENAME ? It is only used for completion.
@ -271,11 +284,32 @@ autocommands for the buffer lifecycle:
BufIsRenamed (after buffer ID gets another name)
The buffer list and windows are locked, no changes possible
How about removing Atari MiNT support?
src/Make_mint.mak, src/os_mint.h, matches with __MINT__
Make it possible to map (console and GUI): #6457
<C-[> 0x27 or is this <Esc> ?
<C-\> 0x28
<C-]> 0x29
<C-^> 0x30
<C-_> 0x31
Patch for Template string: #4634
Have another look at the implementation.
Add the <=> (spaceship) operator and "cond ?< expr ?= expr ?> expr"
replace this:
let left = GetLeftFunc()
let right = GetRightFunc()
let res = left < right ? lower : left == right ? equal : upper
by:
let res = GetLeftFunc() <=> GetRightFunc() ?< lower ?= equal ?> upper
Patch to make :q work with local arglist. (Christian Brabandt, #6286)
Lua: updating wrong buffer when using newly created, unloaded buffer.
(#6539)
When "+ register is set then "" points to it. If another Vim grabs the "+
register, then "" doesn't contain anything. Make it still follow "+.
(#6435)
Patch to fix drawing error with DirectX. (James Grant, #5688)
Causes flicker on resizing. Workaround from Ken Takata.
How about only setting the attribute when part of the Vim window is offscreen?
@ -320,6 +354,9 @@ When changing the crypt key the buffer should be considered modified.
Like when changing 'fileformat'. Save the old key in save_file_ff().
(Ninu-Ciprian Marginean)
Patch to implement the vimtutor with a plugin: #6414
Was originally writtten by Felipe Morales.
Strange sequence of BufWipeout and BufNew events while doing omni-complete.
(Paul Jolly, #5656)
Get BufDelete without preceding BufNew. (Paul Jolly, #5694)
@ -339,6 +376,10 @@ Test loose_clipboard() by selecting text before suspending.
Undo puts cursor in wrong line after "cG<Esc>" undo.
Implement completion for "breakadd". Should expand the second argument, e.g.
"func", and then function names after ":breakadd func". Including
script-local functions.
:unmap <c-n> gives error but does remove the mapping. (Antony Scriven, 2019
Dec 19)
@ -378,10 +419,6 @@ behavior of i_CTRl-R_CTRL-R differs from documentation. (Paul Desmond Parker,
goes to any buffer, and then :bnext skips help buffers, since they are
unlisted. (#4478)
Patch for Template string: #4634
Copies the text twice, not very efficient. Requires a separate implementation
for Vim9 script, compiling the string parts and expressions.
Statusline highlighting error, off by one. (#5599)
":find" with 'path' set to "data*" does not find files, while completion does
@ -495,9 +532,6 @@ window 2. User expects 10 to be added to size of window 2. (Daniel Steinberg,
Would be nice to set tab-local values for 'diffexpr' and 'diffopt'. Use
t:diffexpr_option t:diffopt_option? (#4782)
v:register isn't reset early enough, may be used by next command.
(Andy Massimino, #5294, possible fix in #5305)
Internal diff doesn't handle binary file like external diff does. (Mike
Williams, 2018 Oct 30)
@ -580,9 +614,6 @@ buffer didn't change at all.
Line numbers in profile are off when function was defined with ":execute".
(Daniel Hahler, #4511)
Add a way to create an empty, hidden buffer. Like doing ":new|hide".
":let buf = bufcreate('name')
Session file contains absolute paths when "curdir" is removed form
'sessionoptions', making it impossible to have a session with a relative path.
(#4450)
@ -1060,7 +1091,7 @@ Problem with three-piece comment. (Michael Lee, 2017 May 11, #1696)
Creating a partial with an autoload function is confused about the "self"
attribute of the function. For an unknown function assume "self" and make
that optiona? (Bjorn Linse, 2017 Aug 5)
that optional? (Bjorn Linse, 2017 Aug 5)
Cindent: returning a structure has more indent for the second item.
(Sam Pagenkopf, 2017 Sep 14, #2090)
@ -1199,8 +1230,8 @@ Make a function to check for function-like type?
Screen updated delayed when using CTRL-O u in Insert mode.
(Barlik, #1191) Perhaps because status message?
Implement named arguments for functions:
func Foo(start, count = 1 all = 1)
Implement named arguments for functions with optional arguments:
func Foo(start, count = 1, all = 1)
call Foo(12, all = 0)
Add a command to take a range of lines, filter them and put the output
@ -1393,8 +1424,6 @@ Did maintainer reply?
ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19)
Also with latest version.
Cannot delete a file with square brackets with delete(). (#696)
Completion for input() does not expand environment variables. (chdiza, 2016
Jul 25, #948)
@ -1403,8 +1432,6 @@ names, shell commands and the like. (Kikuchan, 2010 Oct 14)
Assume the system converts between the actual encoding of the filesystem to
the system encoding (usually utf-8).
'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9)
MS-Windows: use WS_HIDE instead of SW_SHOWMINNOACTIVE in os_win32.c?
Otherwise task flickers in taskbar.
@ -1416,8 +1443,6 @@ Have a way to get the call stack, in a function and from an exception.
Second problem in #966: ins_compl_add_tv() uses get_dict_string() multiple
times, overwrites the one buffer. (Nikolay Pavlov, 2016 Aug 5)
Possibly wrong value for seq_cur. (Florent Fayolle, 2016 May 15, #806)
Filetype plugin for awk. (Doug Kearns, 2016 Sep 5)
Patch to improve map documentation. Issue #799.
@ -1436,8 +1461,6 @@ Reject the value? #710.
When doing "vi buf.md" a BufNew autocommand for *.md is not triggered.
Because of using the initial buffer? (Dun Peal, 2016 May 12)
Add redrawtabline command. (Naruhiko Nishino, 2016 Jun 11)
Neovim patch for utfc_ptr2char_len() https://github.com/neovim/neovim/pull/4574
No test, needs some work to include.
@ -1507,20 +1530,10 @@ If ":bd" also closes a Tab page then the " mark is not set. (Harm te Hennepe,
Patch to avoid redrawing tabline when the popup menu is visible.
(Christian Brabandt, 2016 Jan 28)
Patch to show search statistics. (Christian Brabandt, 2016 Jul 22)
When the CursorMovedI event triggers, and CTRL-X was typed, a script cannot
restore the mode properly. (Andrew Stewart, 2016 Apr 20)
Do not trigger the event?
Using ":windo" to set options in all windows has the side effect that it
changes the window layout and the current window. Make a variant that saves
and restores. Use in the matchparen plugin.
Perhaps we can use ":windo <restore> {cmd}"?
Patch to add <restore> to :windo, :bufdo, etc. (Christian Brabandt, 2015 Jan
6, 2nd message)
Alternative: ":keeppos" command modifier: ":keeppos windo {cmd}".
Patch to fix display of listchars on the cursorline. (Nayuri Aohime, 2013)
Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
https://gist.github.com/presuku/d3d6b230b9b6dcfc0477
@ -1549,10 +1562,6 @@ Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
Comparing nested structures with "==" uses a different comparator than when
comparing individual items.
Also, "'' == 0" evaluates to true, which isn't nice.
Add "===" to have a strict comparison (type and value match).
Add "==*" (?) to have a value match, but no automatic conversion, and v:true
equals 1 and 1.0, v:false equals 0 and 0.0.?
Using uninitialized memory. (Dominique Pelle, 2015 Nov 4)
@ -1723,8 +1732,6 @@ arguments.
Problem with transparent and matchgroup. Issue #475
Patch to add :arglocal and :arglists. (Marcin Szamotulski, 2014 Aug 6)
Spell files use a latin single quote. Unicode also has another single quote:
0x2019. (Ron Aaron, 2014 Apr 4)
New OpenOffice spell files support this with ICONV. But they are not
@ -1751,8 +1758,11 @@ from?
Problem with upwards search on Windows (works OK on Linux). (Brett Stahlman,
2014 Jun 8)
Include a plugin manager with Vim? Neobundle seems to be the best currently.
Include a plugin manager with Vim? vim-plug seems to be the best currently:
https://github.com/junegunn/vim-plug.
Also Vundle: https://github.com/gmarik/vundle
Or minpac: https://github.com/k-takata/minpac, since it leverages the builtin
package feature.
Long message about this from ZyX, 2014 Mar 23. And following replies.
Also see http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html
User view:
@ -1807,6 +1817,7 @@ instead. (Samuel Ferencik, 2013 Sep 28)
Patch for XDG base directory support. (Jean François Bignolles, 2014 Mar 4)
Remark on the docs. Should not be a compile time feature. But then what?
Also see #2034.
Completion of ":e" is ":earlier", should be ":edit". Complete to the matching
command instead of doing this alphabetically. (Mikel Jorgensen)
@ -1868,6 +1879,10 @@ Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}.
Exception caused by argument of return is not caught by try/catch.
(David Barnett, 2013 Nov 19)
Bug in try/catch: return with invalid compare throws error that isn't caught.
(ZyX, 2011 Jan 26)
try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt,
2013 Mar 19, later message)
@ -1903,6 +1918,8 @@ process that is running. It might actually be some other program, e.g. after
a reboot.
patch to add "combine" flag to syntax commands. (so8res, 2012 Dec 6)
Patch to add "combine" to :syntax, combines highlight attributes. (Nate
Soares, 2012 Dec 3)
Syntax update problem in one buffer opened in two windows, bottom window is
not correctly updated. (Paul Harris, 2012 Feb 27)
@ -1940,13 +1957,6 @@ Szamotulski, 2012 Nov 8)
Session file creation: 'autochdir' causes trouble. Keep it off until after
loading all files.
MS-Windows resizing problems:
- Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun
20. Uses getWindowRect() instead of GetWindowPlacement()
- Win32: When the taskbar is at the top of the screen creating the tabbar
causes the window to move unnecessarily. (William E. Skeith III, 2012 Jan
12) Patch: 2012 Jan 13 Needs more work (2012 Feb 2)
'iminsert' global value set when using ":setlocal iminsert"? (Wu, 2012 Jun 23)
Patch to append regexp to tag commands to make it possible to select one out
@ -2090,9 +2100,6 @@ doesn't jump to the correct line with :cfirst. (ZyX, 2011 Sep 18)
Behavior of i" and a" text objects isn't logical. (Ben Fritz, 2013 Nov 19)
Bug in try/catch: return with invalid compare throws error that isn't caught.
(ZyX, 2011 Jan 26)
When setting a local option value from the global value, add a script ID that
indicates this, so that ":verbose set" can give a hint. Check with options in
the help file.
@ -2281,9 +2288,6 @@ Add local time at start of --startuptime output.
Requires configure check for localtime().
Use format year-month-day hr:min:sec.
Patch to add "combine" to :syntax, combines highlight attributes. (Nate
Soares, 2012 Dec 3)
Patch to make ":hi link" also take arguments. (Nate Soares, 2012 Dec 4)
Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
@ -2478,6 +2482,9 @@ Sergey Khorev)
Consider making YankRing or something else that keeps a list of yanked text
part of standard Vim. The "1 to "9 registers are not sufficient.
6 When yanking into the unnamed registers several times, somehow make the
previous contents also available (like it's done for deleting). What
register names to use? g"1, g"2, etc.?
After doing "su" $HOME can be the old user's home, thus ~root/file is not
correct. Don't use it in the swap file.
@ -2684,10 +2691,6 @@ Problem with 'ts' set to 9 and 'showbreak' to ">>>". (Matthew Winn, 2007 Oct
In the swapfile dialog, add a H(elp) option that gives more info about what
each choice does. Similar to ":help swap-exists-choices"
try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
":tab help" always opens a new tab, while ":help" re-uses an existing window.
Would be more consistent when an existing tab is re-used. (Tony Mechelynck)
@ -3257,7 +3260,7 @@ Quickfix/Location List:
":grep" and ":helpgrep".
More generic solution: support a filter (e.g., by calling a function).
7 Add a command that goes back to the position from before jumping to the
first quickfix location. ":cbefore"?
first quickfix location.
Vi incompatibility:
- Try new POSIX tests, made after my comments. (Geoff Clare, 2005 April 7)
@ -3294,7 +3297,6 @@ Vi incompatibility:
7 The ":map" command output overwrites the command. Perhaps it should keep
the ":map" when it's used without arguments?
7 CTRL-L is not the end of a section? It is for Posix! Make it an option.
7 Implement 'prompt' option. Init to off when stdin is not a tty.
7 Add a way to send an email for a crashed edit session. Create a file when
making changes (containing name of the swap file), delete it when writing
the file. Supply a program that can check for crashed sessions (either
@ -3472,8 +3474,6 @@ GUI:
Solaris 2.6. (Marley)
9 On Solaris: Using a "-geometry" argument, bigger than the window where Vim
is started from, causes empty lines below the cmdline. (raf)
8 X11 GUI: When menu is disabled by excluding 'm' from 'guioptions', ALT key
should not be used to trigger a menu (like the Win32 version).
8 When setting 'langmenu', it should be effective immediately. Store both
the English and the translated text in the menu structure. Re-generate
the translation when 'langmenu' has changed.
@ -3512,10 +3512,6 @@ GUI:
When the "+0+0" is omitted it works.
8 When starting an external command, and 'guipty' set, BS and DEL are mixed
up. Set erase character somehow?
8 A dead circumflex followed by a space should give the '^' character
(Rommel). Look how xterm does this.
Also: Bednar has some code for dead key handling.
Also: Nedit 5.0.2 with USE_XMIM does it right. (Gaya)
8 The compose key doesn't work properly (Cepas). Both for Win32 and X11.
7 The cursor in an inactive window should be hollow. Currently it's not
visible.
@ -3612,17 +3608,8 @@ Macintosh:
"Small" problems:
- Can't disable terminal flow control, to enable the use of CTRL-S and
CTRL-Q. Add an option for it?
- When using e_secure in do_one_cmd() mention the command being executed,
otherwise it's not clear where it comes from.
- When the quickfix window is open and executing ":echo 'hello'" using the
Command-line window, the text is immediately removed by the redrawing.
(Michael Henry, 2008 Nov 1)
Generic solution: When redrawing while there is a message on the
cmdline, don't erase the display but draw over the existing text.
Other solution, redraw after closing the cmdline window, before executing
the command.
9 For Turkish vim_tolower() and vim_toupper() also need to use utf_
functions for characters below 0x80. (Sertacyildiz)
9 When the last edited file is a help file, using '0 in a new Vim doesn't
@ -4082,8 +4069,6 @@ Spell checking:
- Considering Hunspell 1.1.4:
What does MAXNGRAMSUGS do?
Is COMPLEXPREFIXES necessary when we have flags for affixes?
- Support spelling words in CamelCase as if they were two separate words.
Requires some option to enable it. (Timothy Knox)
- There is no Finnish spell checking file. For openoffice Voikko is now
used, which is based on Malaga: http://home.arcor.de/bjoern-beutel/malaga/
(Teemu Likonen)
@ -4458,8 +4443,6 @@ Vim script language:
7 Execute a function with standard option values. No need to save and
restore option values. Especially useful for new options. Problem: how
to avoid a performance penalty (esp. for string options)?
8 Add referring to key options with "&t_xx". Both for "echo &t_xx" and
":let &t_xx =". Useful for making portable mappings.
- range for ":exec", pass it on to the executed command. (Webb)
8 ":{range}source": source the lines from the current file.
You can already yank lines and use :@" to execute them.
@ -4690,8 +4673,6 @@ Messages:
- Delete message after new command has been entered and have waited for key.
Perhaps after ten seconds?
- Make message history available in "msg" variables: msg1, msg2, .. msg9.
8 When reading from stdin allow suppressing the "reading from stdin"
message.
9 Check handling of overwriting of messages and delays:
Very wrong: errors while redrawing cause endless loop.
When switching to another file and screen scrolls because of the long
@ -5979,9 +5960,6 @@ Registers:
8 Add put command that overwrites existing text. Should also work for
blocks. Useful to move text around in a table. Works like using "R ^R r"
for every line.
6 When yanking into the unnamed registers several times, somehow make the
previous contents also available (like it's done for deleting). What
register names to use? g"1, g"2, etc.?
- When appending to a register, also report the total resulting number of
lines. Or just say "99 more lines yanked", add the "more".
- When inserting a register in Insert mode with CTRL-R, don't insert comment

View File

@ -1,4 +1,4 @@
*usr_11.txt* For Vim version 8.2. Last change: 2020 Jan 17
*usr_11.txt* For Vim version 8.2. Last change: 2020 Jul 08
VIM USER MANUAL - by Bram Moolenaar
@ -256,7 +256,7 @@ O Open the file readonly. Use this when you just want to view the file and
E Edit the file anyway. Use this with caution! If the file is being edited
in another Vim, you might end up with two versions of the file. Vim will
try to warn you when this happens, but better be safe then sorry.
try to warn you when this happens, but better be safe than sorry.
R Recover the file from the swap file. Use this if you know that the swap
file contains changes that you want to recover.

View File

@ -434,7 +434,7 @@ redefined without changing the search pattern.
/\f\+
The "\f" items stands for file name characters. Thus this matches a sequence
The "\f" item stands for file name characters. Thus this matches a sequence
of characters that can be a file name.
Which characters can be part of a file name depends on the system you are
using. On MS-Windows, the backslash is included, on Unix it is not. This is

View File

@ -226,7 +226,7 @@ We will use "82" here, which is version 8.2.
This is all you need for the second method. Just launch the executable, and
follow the prompts.
For the first method you must chose one of the binary archives. These are
For the first method you must choose one of the binary archives. These are
available:
gvim82.zip The normal MS-Windows GUI version.

View File

@ -1,4 +1,4 @@
*various.txt* For Vim version 8.2. Last change: 2020 May 30
*various.txt* For Vim version 8.2. Last change: 2020 Jul 10
VIM REFERENCE MANUAL by Bram Moolenaar
@ -754,7 +754,7 @@ up mappings to simulate the commands that less supports. Otherwise, you can
still use the Vim commands.
This isn't perfect. For example, when viewing a short file Vim will still use
the whole screen. But it works good enough for most uses, and you get syntax
the whole screen. But it works well enough for most uses, and you get syntax
highlighting.
The "h" key will give you a short overview of the available commands.

View File

@ -7882,7 +7882,7 @@ Files: src/buffer.c, src/ex_cmds.c, src/fileio.c, src/globals.h,
Patch 6.1.221
Problem: Changing case may not work properly, depending on the current
locale.
Solution: Add the 'casemap' option to let the user chose how changing case
Solution: Add the 'casemap' option to let the user choose how changing case
is to be done.
Also fix lowering case when an UTF-8 character doesn't keep the
same byte length.

View File

@ -147,7 +147,7 @@ Se ":help search\-pattern" for tilg
{kommando} fortolkes som en Ex-kommando.
Hvis {kommando} indeholder mellemrum, s<> skal den omsluttes af
dobbelte citationstegn (det afh<66>nger af den skal der bruges).
Eksempel: Vim "+set si" main.c
Eksempel: vim "+set si" main.c
.br
Bem<EFBFBD>rk: Du kan bruge op til 10 "+"- eller "\-c"-kommandoer.
.TP

View File

@ -147,7 +147,7 @@ Se ":help search\-pattern" for tilgængelige søgemønstre.
{kommando} fortolkes som en Ex-kommando.
Hvis {kommando} indeholder mellemrum, så skal den omsluttes af
dobbelte citationstegn (det afhænger af den skal der bruges).
Eksempel: Vim "+set si" main.c
Eksempel: vim "+set si" main.c
.br
Bemærk: Du kan bruge op til 10 "+"- eller "\-c"-kommandoer.
.TP

View File

@ -156,7 +156,7 @@ Ex
{commande} est interpr<70>t<EFBFBD>e comme une commande Ex.
Si la {commande} contient des espaces, elle doit <20>tre entour<75>e
de doubles-apostrophes (cela d<>pend du shell utilis<69>).
Exemple : Vim "+set si" main.c
Exemple : vim "+set si" main.c
.br
Note : vous pouvez utiliser jusqu'<27> 10 commandes "+" ou "\-c".
.TP

View File

@ -156,7 +156,7 @@ Exécute {commande} après la lecture du premier fichier.
{commande} est interprétée comme une commande Ex.
Si la {commande} contient des espaces, elle doit être entourée
de doubles-apostrophes (cela dépend du shell utilisé).
Exemple : Vim "+set si" main.c
Exemple : vim "+set si" main.c
.br
Note : vous pouvez utiliser jusqu'à 10 commandes "+" ou "\-c".
.TP

View File

@ -150,7 +150,7 @@ primo file
{comando} <20> interpretato come un comando Ex.
Se il {comando} contiene spazi deve essere incluso fra doppi apici
(o altro delimitatore, a seconda della shell che si sta usando).
Esempio: Vim "+set si" main.c
Esempio: vim "+set si" main.c
.br
Note: Si possono avere fino a 10 comandi "+" o "\-c".
.TP

View File

@ -150,7 +150,7 @@ primo file è stato letto.
{comando} è interpretato come un comando Ex.
Se il {comando} contiene spazi deve essere incluso fra doppi apici
(o altro delimitatore, a seconda della shell che si sta usando).
Esempio: Vim "+set si" main.c
Esempio: vim "+set si" main.c
.br
Note: Si possono avere fino a 10 comandi "+" o "\-c".
.TP

View File

@ -150,7 +150,7 @@ wzorce wyszukiwania.
{polecenie} jest interpretowane jako polecenie Ex.
Je<EFBFBD>li {poleceni} zawiera bia<69>e znaki musi by<62> umieszczone w podw<64>jnych
cudzys<EFBFBD>owach (zale<6C>y to od u<>ywanej pow<6F>oki).
Przyk<EFBFBD>ad: Vim "+set si" main.c
Przyk<EFBFBD>ad: vim "+set si" main.c
.br
Uwaga: Mo<4D>na u<>y<EFBFBD> do 10 polece<63> "+" lub "\-c".
.TP

View File

@ -150,7 +150,7 @@ wzorce wyszukiwania.
{polecenie} jest interpretowane jako polecenie Ex.
Jeśli {poleceni} zawiera białe znaki musi być umieszczone w podwójnych
cudzysłowach (zależy to od używanej powłoki).
Przykład: Vim "+set si" main.c
Przykład: vim "+set si" main.c
.br
Uwaga: Można użyć do 10 poleceń "+" lub "\-c".
.TP

View File

@ -145,7 +145,7 @@ Kullan
{komut} bir Ex komutu olarak i<>letilir.
E<EFBFBD>er {komut} bo<62>luk i<>eriyorsa <20>ift t<>rnak i<>erisine al<61>nmal<61>d<EFBFBD>r (bu
kullan<EFBFBD>lan kabu<62>a ba<62>l<EFBFBD>d<EFBFBD>r).
<EFBFBD>rnek: Vim "+set si" main.c
<EFBFBD>rnek: vim "+set si" main.c
.br
Not: 10 taneye kadar "+" veya "\-c" komutu kullanabilirsiniz.
.TP

View File

@ -145,7 +145,7 @@ Kullanılabilir arama dizgileri için ":help search\-pattern" yazın.
{komut} bir Ex komutu olarak işletilir.
Eğer {komut} boşluk içeriyorsa çift tırnak içerisine alınmalıdır (bu
kullanılan kabuğa bağlıdır).
Örnek: Vim "+set si" main.c
Örnek: vim "+set si" main.c
.br
Not: 10 taneye kadar "+" veya "\-c" komutu kullanabilirsiniz.
.TP

View File

@ -146,7 +146,7 @@ See ":help search\-pattern" for the available search patterns.
{command} is interpreted as an Ex command.
If the {command} contains spaces it must be enclosed in double quotes (this
depends on the shell that is used).
Example: Vim "+set si" main.c
Example: vim "+set si" main.c
.br
Note: You can use up to 10 "+" or "\-c" commands.
.TP

View File

@ -110,7 +110,7 @@ OPTIONS
read. {command} is interpreted as an Ex command. If the
{command} contains spaces it must be enclosed in double
quotes (this depends on the shell that is used). Example:
Vim "+set si" main.c
vim "+set si" main.c
Note: You can use up to 10 "+" or "-c" commands.
-S {file} {file} will be sourced after the first file has been read.

View File

@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2020 Jun 21
*vim9.txt* For Vim version 8.2. Last change: 2020 Jul 25
VIM REFERENCE MANUAL by Bram Moolenaar
@ -64,15 +64,24 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
Comments starting with # ~
In Vim script comments normally start with double quote. That can also be the
start of a string, thus in many places it cannot be used. In Vim9 script a
comment can also start with #. In Vi this is a command to list text with
numbers, but you can also use `:number` for that. >
In legacy Vim script comments start with double quote. In Vim9 script
comments start with #. >
# declarations
let count = 0 # number of occurrences
To improve readability there must be a space between the command and the #
The reason is that a double quote can also be the start of a string. In many
places, especially halfway an expression with a line break, it's hard to tell
what the meaning is, since both a string and a comment can be followed by
arbitrary text. To avoid confusion only # comments are recognized. This is
the same as in shell scripts and Python programs.
In Vi # is a command to list text with numbers. In Vim9 script you can use
`:number` for that. >
101 number
To improve readability there must be a space between a command and the #
that starts a comment. Note that #{ is the start of a dictionary, therefore
it cannot start a comment.
it does not start a comment.
Vim9 functions ~
@ -85,7 +94,7 @@ The syntax is strict, to enforce code that is easy to read and understand.
Compilation is done when the function is first called, or when the
`:defcompile` command is encountered in the script where the function was
defined.
defined. `:disassemble` also compiles the function.
`:def` has no options like `:function` does: "range", "abort", "dict" or
"closure". A `:def` function always aborts on an error, does not get a range
@ -96,7 +105,7 @@ be used, type checking will then be done at runtime, like with legacy
functions.
Arguments are accessed by name, without "a:". There is no "a:" dictionary or
"a:000" list.
"a:000" list. Just like any other language.
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: >
@ -176,8 +185,9 @@ To intentionally avoid a variable being available later, a block can be used:
echo temp " Error!
An existing variable cannot be assigned to with `:let`, since that implies a
declaration. An exception is global variables: these can be both used with
and without `:let`, because there is no rule about where they are declared.
declaration. Global, window, tab, buffer and Vim variables can only be used
without `:let`, because they are are not really declared, they can also be
deleted with `:unlet`.
Variables cannot shadow previously defined variables.
Variables may shadow Ex commands, rename the variable if needed.
@ -186,12 +196,19 @@ Global variables and user defined functions must be prefixed with "g:", also
at the script level. >
vim9script
let script_local = 'text'
let g:global = 'value'
g:global = 'value'
let Funcref = g:ThatFunction
Since "&opt = value" is now assigning a value to option "opt", ":&" cannot be
used to repeat a `:substitute` command.
*E1092*
Declaring more than one variable at a time, using the unpack notation, is
currently not supported: >
let [v1, v2] = GetValues() # Error!
That is because the type needs to be inferred from the list item type, which
isn't that easy.
Omitting :call and :eval ~
@ -200,29 +217,29 @@ Functions can be called without `:call`: >
Using `:call` is still possible, but this is discouraged.
A method call without `eval` is possible, so long as the start is an
identifier or can't be an Ex command. It does NOT work for string constants: >
myList->add(123) " works
g:myList->add(123) " works
[1, 2, 3]->Process() " works
#{a: 1, b: 2}->Process() " works
{'a': 1, 'b': 2}->Process() " works
"foobar"->Process() " does NOT work
("foobar")->Process() " works
'foobar'->Process() " does NOT work
('foobar')->Process() " works
identifier or can't be an Ex command. Examples: >
myList->add(123)
g:myList->add(123)
[1, 2, 3]->Process()
#{a: 1, b: 2}->Process()
{'a': 1, 'b': 2}->Process()
"foobar"->Process()
("foobar")->Process()
'foobar'->Process()
('foobar')->Process()
In case there is ambiguity between a function name and an Ex command, use ":"
to make clear you want to use the Ex command. For example, there is both the
`:substitute` command and the `substitute()` function. When the line starts
with `substitute(` this will use the function, prepend a colon to use the
command instead: >
In rare case there is ambiguity between a function name and an Ex command, use
":" to make clear you want to use the Ex command. For example, there is both
the `:substitute` command and the `substitute()` function. When the line
starts with `substitute(` this will use the function. Prepend a colon to use
the command instead: >
:substitute(pattern (replacement (
Note that while variables need to be defined before they can be used,
functions can be called before being defined. This is required to be able
have cyclic dependencies between functions. It is slightly less efficient,
since the function has to be looked up by name. And a typo in the function
name will only be found when the call is executed.
name will only be found when the function is called.
Omitting function() ~
@ -257,27 +274,39 @@ Function call: >
arg2
)
For binary operators iin expressions not in [], {} or () a line break is
possible AFTER the operators. For example: >
let text = lead ..
middle ..
end
For binary operators in expressions not in [], {} or () a line break is
possible just before or after the operator. For example: >
let text = lead
.. middle
.. end
let total = start +
end -
correction
let result = positive ?
PosFunc(arg) :
NegFunc(arg)
let result = positive
? PosFunc(arg)
: NegFunc(arg)
A special case is "->" for function call chains, it can appear in the next
line: >
For a method call using "->" and a member using a dot, a line break is allowed
before it: >
let result = GetBuilder()
->BuilderSetWidth(333)
->BuilderSetHeight(777)
->BuilderBuild()
let result = MyDict
.member
Note that "enddef" cannot be used at the start of a continuation line, it ends
the current function.
< *E1050*
To make it possible for the operator at the start of the line to be
recognized, it is required to put a colon before a range. This will add
"start" and print: >
let result = start
+ print
Like this: >
let result = start + print
This will assign "start" and print a line: >
let result = start
:+ print
It is also possible to split a function header over multiple lines, in between
arguments: >
@ -286,15 +315,43 @@ arguments: >
separator = '-'
): string
Notes:
- "enddef" cannot be used at the start of a continuation line, it ends the
current function.
- No line break is allowed in the LHS of an assignment. Specifically when
unpacking a list |:let-unpack|. This is OK: >
[var1, var2] =
Func()
< This does not work: >
[var1,
var2] =
Func()
- No line break is allowed in between arguments of an `:echo`, `:execute` and
similar commands. This is OK: >
echo [1,
2] [3,
4]
< This does not work: >
echo [1, 2]
[3, 4]
- No line break is allowed in the arguments of a lambda, between the "{" and
"->". This is OK: >
filter(list, {k, v ->
v > 0})
< This does not work: >
filter(list, {k,
v -> v > 0})
No curly braces expansion ~
|curly-braces-names| cannot be used.
No :append, :change or :insert ~
No :xit, :append, :change or :insert ~
These commands are too quickly confused with local variable names.
These commands are too easily confused with local variable names. Instead of
`:x` or `:xit` you can use `:exit`.
Comparators ~
@ -310,7 +367,8 @@ Vim9 script enforces proper use of white space. This is no longer allowed: >
let var =234 " Error!
There must be white space before and after the "=": >
let var = 234 " OK
White space must also be put before the # that starts a comment: >
White space must also be put before the # that starts a comment after a
command: >
let var = 234# Error!
let var = 234 # OK
@ -360,6 +418,7 @@ The boolean operators "||" and "&&" do not change the value: >
0 || '' == ''
8 && 2 == 2
0 && 2 == 0
2 && 0 == 0
[] && 2 == []
When using `..` for string concatenation the arguments are always converted to
@ -370,6 +429,51 @@ string. >
In Vim9 script one can use "true" for v:true and "false" for v:false.
What to watch out for ~
*vim9-gotchas*
Vim9 was designed to be closer to often used programming languages, but at the
same time tries to support the legacy Vim commands. Some compromises had to
be made. Here is a summary of what might be unexpected.
Ex command ranges need to be prefixed with a colon. >
-> " legacy Vim: shifts the previous line to the right
->func() " Vim9: method call in continuation line
:-> " Vim9: shifts the previous line to the right
%s/a/b " legacy Vim: substitute on all lines
x = alongname
% another " Vim9: line continuation without a backslash
:%s/a/b " Vim9: substitute on all lines
'text'->func() " Vim9: method call
:'t " legacy Vim: jump to mark m
Functions defined with `:def` compile the whole function. Legacy functions
can bail out, and the following lines are not parsed: >
func Maybe()
if !has('feature')
return
endif
use-feature
endfunc
Vim9 functions are compiled as a whole: >
def Maybe()
if !has('feature')
return
endif
use-feature " May give compilation error
enddef
For a workaround, split it in two functions: >
func Maybe()
if has('feature')
call MaybyInner()
endif
endfunc
if has('feature')
def MaybeInner()
use-feature
enddef
endif
==============================================================================
3. New style functions *fast-functions*
@ -396,19 +500,20 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
When the caller omits an argument the {value} is used.
The function will be compiled into instructions when
called, or when `:defcompile` is used. Syntax and
type errors will be produced at that time.
called, or when `:disassemble` or `:defcompile` is
used. Syntax and type errors will be produced at that
time.
NOTE: It is possible to nest `:def` inside another
`:def`, but it is not possible to nest `:def` inside
`:function`, for backwards compatibility.
It is possible to nest `:def` inside another `:def` or
`:function` up to about 50 levels deep.
[!] is used as with `:function`. Note that in Vim9
script script-local functions cannot be deleted or
redefined later in the same script.
*:enddef*
:enddef End of a function defined with `:def`.
:enddef End of a function defined with `:def`. It should be on
a line by its own.
If the script the function is defined in is Vim9 script, then script-local
@ -428,6 +533,22 @@ prefix.
Note that for command line completion of {func} you
can prepend "s:" to find script-local functions.
Limitations ~
Local variables will not be visible to string evaluation. For example: >
def EvalString(): list<string>
let list = ['aa', 'bb', 'cc', 'dd']
return range(1, 2)->map('list[v:val]')
enddef
The map argument is a string expression, which is evaluated without the
function scope. Instead, use a lambda: >
def EvalString(): list<string>
let list = ['aa', 'bb', 'cc', 'dd']
return range(1, 2)->map({ _, v -> list[v] })
enddef
==============================================================================
4. Types *vim9-types*
@ -453,7 +574,7 @@ Not supported yet:
tuple<a: {type}, b: {type}, ...>
These types can be used in declarations, but no value will have this type:
{type}|{type}
{type}|{type} {not implemented yet}
void
any
@ -555,19 +676,15 @@ The original value of 'cpoptions' is restored at the end of the script.
Export ~
*:export* *:exp*
Exporting one item can be written as: >
Exporting an item can be written as: >
export const EXPORTED_CONST = 1234
export let someValue = ...
export def MyFunc() ...
export class MyClass ...
As this suggests, only constants, variables, `:def` functions and classes can
be exported.
be exported. {classes are not implemented yet}
Alternatively, an export statement can be used to export several already
defined (otherwise script-local) items: >
export {EXPORTED_CONST, someValue, MyFunc, MyClass}
<
*E1042*
`:export` can only be used in Vim9 script, at the script level.

View File

@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Jun 15
" Last Change: 2020 Jun 25
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@ -88,6 +88,9 @@ endif
" AHDL
au BufNewFile,BufRead *.tdf setf ahdl
" AIDL
au BufNewFile,BufRead *.aidl setf aidl
" AMPL
au BufNewFile,BufRead *.run setf ampl
@ -542,7 +545,7 @@ au BufNewFile,BufRead *.ecd setf ecd
au BufNewFile,BufRead *.e,*.E call dist#ft#FTe()
" Elinks configuration
au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks
au BufNewFile,BufRead elinks.conf setf elinks
" ERicsson LANGuage; Yaws is erlang too
au BufNewFile,BufRead *.erl,*.hrl,*.yaws setf erlang
@ -1134,8 +1137,17 @@ au BufNewFile,BufRead *.ora setf ora
" Packet filter conf
au BufNewFile,BufRead pf.conf setf pf
" Pacman Config (close enough to dosini)
au BufNewFile,BufRead */etc/pacman.conf setf dosini
" Pacman hooks
au BufNewFile,BufRead *.hook
\ if getline(1) == '[Trigger]' |
\ setf dosini |
\ endif
" Pam conf
au BufNewFile,BufRead */etc/pam.conf setf pamconf
au BufNewFile,BufRead */etc/pam.conf setf pamconf
" Pam environment
au BufNewFile,BufRead pam_env.conf,.pam_environment setf pamenv
@ -1655,8 +1667,9 @@ au BufNewFile,BufRead *.sil setf sil
au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf setf sysctl
" Systemd unit files
au BufNewFile,BufRead */systemd/*.{automount,mount,path,service,socket,swap,target,timer} setf systemd
au BufNewFile,BufRead */systemd/*.{automount,dnssd,link,mount,netdev,network,nspawn,path,service,slice,socket,swap,target,timer} setf systemd
" Systemd overrides
au BufNewFile,BufRead */etc/systemd/*.conf.d/*.conf setf systemd
au BufNewFile,BufRead */etc/systemd/system/*.d/*.conf setf systemd
au BufNewFile,BufRead */.config/systemd/user/*.d/*.conf setf systemd
" Systemd temp files

View File

@ -1,12 +1,17 @@
" Vim filetype plugin file
" Language: C++
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2001 Jan 15
" Last Change: 2020 Jul 26
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
" Behaves just like C
" Behaves mostly just like C
runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
" C++ uses templates with <things>
" Disabled, because it gives an error for typing an unmatched ">".
" set matchpairs+=<:>
" let b:undo_ftplugin ..= ' | setl matchpairs<'

View File

@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: Diff
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2005 Jul 27
" Last Change: 2020 Jul 18
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@ -13,3 +13,6 @@ let b:undo_ftplugin = "setl modeline<"
" Don't use modelines in a diff, they apply to the diffed file
setlocal nomodeline
" If there are comments they start with #
let &commentstring = "# %s"

View File

@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Jun 16
" Last Change: 2020 Jul 26
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@ -49,14 +49,14 @@ setlocal isk+=#
setlocal keywordprg=:help
" Set 'comments' to format dashed lists in comments
setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\"
setlocal com=sO:\"\ -,mO:\"\ \ ,sO:#\ -,mO:#\ \ ,eO:##,:\",:#
" Format comments to be up to 78 characters long
if &tw == 0
setlocal tw=78
endif
" Comments start with a double quote
" Comments start with a double quote; in Vim9 script # would also work
setlocal commentstring=\"%s
if !exists("no_plugin_maps") && !exists("no_vim_maps")
@ -83,7 +83,7 @@ endif
if exists("loaded_matchit")
let b:match_ignorecase = 0
let b:match_words =
\ '\<\%(fu\%[nction]\|def\)\>:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
\ '\<\%(fu\%[nction]\|def\)\>[^(]:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
\ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' .
\ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
\ '{:},' .

View File

@ -10,5 +10,5 @@ test:
VIMRUNTIME=$(VIMRUNTIME) $(VIM) --clean --not-a-term -u testdir/runtest.vim
clean:
clean testclean:
rm -f testdir/*.fail testdir/*.out

View File

@ -1,9 +1,8 @@
" Vim indent script for HTML
" Header: "{{{
" Maintainer: Bram Moolenaar
" Original Author: Andy Wokula <anwoku@yahoo.de>
" Last Change: 2020 Jun 18
" Version: 1.0
" Last Change: 2020 Jul 06
" Version: 1.0 "{{{
" Description: HTML indent script with cached state for faster indenting on a
" range of lines.
" Supports template systems through hooks.
@ -587,7 +586,7 @@ func! s:Alien3()
return eval(b:hi_js1indent)
endif
if b:hi_indent.scripttype == "javascript"
return GetJavascriptIndent()
return eval(b:hi_js1indent) + GetJavascriptIndent()
else
return -1
endif

View File

@ -2,6 +2,16 @@
" START_INDENT
<html>
<body>
<style>
div#d1 { color: red; }
div#d2 { color: green; }
</style>
<script>
var v1 = "v1";
var v2 = "v2";
</script>
<div>
<div>
text
@ -32,5 +42,25 @@ dt text
</dt>
</dl>
</body>
</html>
" END_INDENT
% START_INDENT
% INDENT_EXE let g:html_indent_style1 = "inc"
% INDENT_EXE let g:html_indent_script1 = "zero"
% INDENT_EXE call HtmlIndent_CheckUserSettings()
<html>
<body>
<style>
div#d1 { color: red; }
div#d2 { color: green; }
</style>
<script>
var v1 = "v1";
var v2 = "v2";
</script>
</body>
</html>
% END_INDENT

View File

@ -2,35 +2,65 @@
" START_INDENT
<div>
<div>
text
</div>
</div>
<html>
<body>
<style>
div#d1 { color: red; }
div#d2 { color: green; }
</style>
<script>
var v1 = "v1";
var v2 = "v2";
</script>
<div>
<div>
text
</div>
</div>
<div
class="foo bar">
text
</div>
<div
class="foo bar">
text
</div>
<div class="foo bar"
data="something">
text
</div>
<div class="foo bar"
data="something">
text
</div>
<div class="foo
bar">
text
</div>
<div class="foo
bar">
text
</div>
<dl>
<dd>
dd text
</dd>
<dt>
dt text
</dt>
</dl>
<dl>
<dd>
dd text
</dd>
<dt>
dt text
</dt>
</dl>
</body>
</html>
" END_INDENT
% START_INDENT
% INDENT_EXE let g:html_indent_style1 = "inc"
% INDENT_EXE let g:html_indent_script1 = "zero"
% INDENT_EXE call HtmlIndent_CheckUserSettings()
<html>
<body>
<style>
div#d1 { color: red; }
div#d2 { color: green; }
</style>
<script>
var v1 = "v1";
var v2 = "v2";
</script>
</body>
</html>
% END_INDENT

View File

@ -1,7 +1,7 @@
" Vim indent file
" Language: Vim script
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2019 Oct 31
" Last Change: 2020 Jul 19
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@ -11,6 +11,7 @@ let b:did_indent = 1
setlocal indentexpr=GetVimIndent()
setlocal indentkeys+==end,=},=else,=cat,=fina,=END,0\\,0=\"\\\
setlocal indentkeys-=0#
let b:undo_indent = "setl indentkeys< indentexpr<"

View File

@ -2,7 +2,7 @@
"
" Author: Bram Moolenaar
" Copyright: Vim license applies, see ":help license"
" Last Change: 2020 Jun 12
" Last Change: 2020 Jul 12
"
" WORK IN PROGRESS - Only the basics work
" Note: On MS-Windows you need a recent version of gdb. The one included with

23
runtime/syntax/aidl.vim Normal file
View File

@ -0,0 +1,23 @@
" Vim syntax file
" Language: aidl (Android Interface Definition Language)
" https://developer.android.com/guide/components/aidl
" Maintainer: Dominique Pelle <dominique.pelle@tomtom.com>
" LastChange: 2020/07/25
" Quit when a syntax file was already loaded.
if exists("b:current_syntax")
finish
endif
source <sfile>:p:h/java.vim
syn keyword aidlParamDir in out inout
syn keyword aidlKeyword oneway parcelable
" Needed for the 'in', 'out', 'inout' keywords to be highlighted.
syn cluster javaTop add=aidlParamDir
hi def link aidlParamDir StorageClass
hi def link aidlKeyword Keyword
let b:current_syntax = "aidl"

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
" Vim syntax file
" Language: TeX
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
" Last Change: Jun 07, 2020
" Version: 118
" Last Change: Jun 29, 2020
" Version: 119
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
"
" Notes: {{{1
@ -147,6 +147,11 @@ if exists("g:tex_nospell") && g:tex_nospell
else
let s:tex_nospell = 0
endif
if exists("g:tex_matchcheck")
let s:tex_matchcheck= g:tex_matchcheck
else
let s:tex_matchcheck= '[({[]'
endif
if exists("g:tex_excludematcher")
let s:tex_excludematcher= g:tex_excludematcher
else
@ -205,27 +210,41 @@ if !exists("g:tex_no_math")
endif
endif
" Try to flag {} and () mismatches: {{{1
" Try to flag {}, [], and () mismatches: {{{1
if s:tex_fast =~# 'm'
if !s:tex_no_error
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
if s:tex_matchcheck =~ '{'
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
endif
if s:tex_matchcheck =~ '\['
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
endif
else
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
if s:tex_matchcheck =~ '{'
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
endif
if s:tex_matchcheck =~ '\['
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
endif
endif
if !s:tex_nospell
syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
else
syn region texParen start="(" end=")" transparent contains=@texMatchGroup
if s:tex_matchcheck =~ '('
if !s:tex_nospell
syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
else
syn region texParen start="(" end=")" transparent contains=@texMatchGroup
endif
endif
endif
if !s:tex_no_error
syn match texError "[}\])]"
if s:tex_matchcheck =~ '('
syn match texError "[}\]]"
else
syn match texError "[}\])]"
endif
endif
if s:tex_fast =~# 'M'
if !exists("g:tex_no_math")
@ -756,7 +775,7 @@ if has("conceal") && &enc == 'utf-8'
\ ['ldots' , '…'],
\ ['le' , '≤'],
\ ['left|' , '|'],
\ ['left\|' , '‖'],
\ ['left\\|' , '‖'],
\ ['left(' , '('],
\ ['left\[' , '['],
\ ['left\\{' , '{'],

View File

@ -1,8 +1,8 @@
" Vim syntax file
" Language: Vim 8.0 script
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
" Last Change: Jun 01, 20200
" Version: 8.0-37
" Last Change: July 15, 2020
" Version: 8.0-41
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
" Automatically generated keyword lists: {{{1
@ -29,14 +29,14 @@ syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man N[ext] Over P[rint] Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Winbar XMLent XMLns
" vimOptions are caught only when contained in a vimSet {{{2
syn keyword vimOption contained acd ambw arshape background ballooneval bex bl brk buftype cf cinkeys cmdwinheight com completeslash cpoptions cscoperelative csre cursorcolumn delcombine digraph eadirection emo equalprg expandtab fdls fex fileignorecase fml foldlevel formatexpr gcr go guifontset helpheight history hlsearch imaf ims includeexpr infercase iskeyword keywordprg laststatus lispwords lrm magic maxfuncdepth menuitems mm modifiable mousemodel mzq numberwidth opfunc patchexpr pfn pp printfont pumwidth pythonthreehome re restorescreen ro rulerformat scl scs sft shellredir shiftwidth showmatch signcolumn smarttab sp spf srr startofline suffixes switchbuf ta tagfunc tbi term termwintype tgc titlelen toolbariconsize ttimeout ttymouse twt undofile varsofttabstop verbosefile viminfofile wak weirdinvert wig wildoptions winheight wm wrapscan
syn keyword vimOption contained ai anti autochdir backspace balloonevalterm bexpr bo browsedir casemap cfu cino cmp comments concealcursor cpp cscopetag cst cursorline dex dip eb emoji errorbells exrc fdm ff filetype fmr foldlevelstart formatlistpat gd gp guifontwide helplang hk ic imak imsearch incsearch insertmode isp km lazyredraw list ls makeef maxmapdepth mfd mmd modified mouses mzquantum nuw osfiletype patchmode ph preserveindent printheader pvh pyx readonly revins rop runtimepath scr sect sh shellslash shm showmode siso smc spc spl ss statusline suffixesadd sws tabline taglength tbidi termbidi terse tgst titleold top ttimeoutlen ttyscroll tx undolevels vartabstop vfile virtualedit warn wfh wildchar wim winminheight wmh write
syn keyword vimOption contained akm antialias autoindent backup balloonexpr bg bomb bs cb ch cinoptions cms commentstring conceallevel cpt cscopetagorder csto cursorlineopt dg dir ed enc errorfile fcl fdn ffs fillchars fo foldmarker formatoptions gdefault grepformat guiheadroom hf hkmap icon imc imsf inde is isprint kmp lbr listchars lsp makeencoding maxmem mh mmp more mouseshape mzschemedll odev pa path pheader previewheight printmbcharset pvp pyxversion redrawtime ri rs sb scroll sections shcf shelltemp shortmess showtabline sj smd spell splitbelow ssl stl sw sxe tabpagemax tagrelative tbis termencoding textauto thesaurus titlestring tpm ttm ttytype uc undoreload vb vi visualbell wb wfw wildcharm winaltkeys winminwidth wmnu writeany
syn keyword vimOption contained al ar autoread backupcopy bdir bh breakat bsdir cc charconvert cinw co compatible confirm crb cscopeverbose csverb cwh dict directory edcompatible encoding errorformat fcs fdo fic fixendofline foldclose foldmethod formatprg gfm grepprg guioptions hh hkmapp iconstring imcmdline imst indentexpr isf joinspaces kp lcs lm luadll makeprg maxmempattern mis mmt mouse mouset mzschemegcdll oft packpath pdev pi previewpopup printmbfont pvw qe regexpengine rightleft rtp sbo scrollbind secure shell shelltype shortname shq slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tags tbs termguicolors textmode tildeop tl tr tty tw udf updatecount vbs viewdir vop wc wh wildignore wincolor winptydll wmw writebackup
syn keyword vimOption contained aleph arab autowrite backupdir bdlay bin breakindent bsk ccv ci cinwords cocu complete copyindent cryptmethod csl cuc debug dictionary display ef endofline esckeys fdc fdt fileencoding fixeol foldcolumn foldminlines fp gfn gtl guipty hi hkp ignorecase imd imstatusfunc indentkeys isfname js langmap linebreak lmap lw mat maxmemtot mkspellmem mod mousef mousetime nf ofu para penc pm previewwindow printoptions pw qftf relativenumber rightleftcmd ru sbr scrollfocus sel shellcmdflag shellxescape showbreak si sm so spellfile spr st sts swapsync syn tag tagstack tc termwinkey textwidth timeout tm ts ttybuiltin twk udir updatetime vdir viewoptions vsts wcm whichwrap wildignorecase window winwidth wop writedelay
syn keyword vimOption contained allowrevins arabic autowriteall backupext belloff binary breakindentopt bt cd cin clipboard cole completefunc cot cscopepathcomp cspc cul deco diff dy efm eol et fde fen fileencodings fk foldenable foldnestmax fs gfs gtt guitablabel hid hl im imdisable imstyle indk isi key langmenu lines lnr lz matchpairs mco ml modeline mousefocus mp nrformats omnifunc paragraphs perldll pmbcs printdevice prompt pythondll quickfixtextfunc remap rl rubydll sc scrolljump selection shellpipe shellxquote showcmd sidescroll smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tal tcldll termwinscroll tf timeoutlen to tsl ttyfast tws ul ur ve vif vts wcr wi wildmenu winfixheight wiv wrap ws
syn keyword vimOption contained altkeymap arabicshape aw backupskip beval bk bri bufhidden cdpath cindent cm colorcolumn completeopt cp cscopeprg csprg culopt def diffexpr ea ei ep eventignore fdi fenc fileformat fkmap foldexpr foldopen fsync gfw guicursor guitabtooltip hidden hlg imactivatefunc imi inc inex isident keymap langnoremap linespace loadplugins ma matchtime mef mle modelineexpr mousehide mps nu opendevice paste pex pmbfn printencoding pt pythonhome quoteescape renderoptions rlc ruf scb scrolloff selectmode shellquote shiftround showfulltag sidescrolloff smartindent sol spellsuggest sr stal sua swf syntax tagcase tb tenc termwinsize tfu title toolbar tsr ttym twsl undodir ut verbose viminfo wa wd wic wildmode winfixwidth wiw wrapmargin ww
syn keyword vimOption contained ambiwidth ari awa balloondelay bevalterm bkc briopt buflisted cedit cink cmdheight columns completepopup cpo cscopequickfix csqf cursorbind define diffopt ead ek equalalways ex fdl fencs fileformats flp foldignore foldtext ft ghr guifont helpfile highlight hls imactivatekey iminsert include inf isk keymodel langremap lisp lpl macatsui maxcombine menc mls modelines mousem msm number operatorfunc pastetoggle pexpr popt printexpr pumheight pythonthreedll rdt report rnu ruler scf scrollopt sessionoptions
syn keyword vimOption contained acd ambw arshape background ballooneval bex bl brk buftype cf cinkeys cmdwinheight com completeslash cpoptions cscoperelative csre cursorcolumn delcombine digraph eadirection emo equalprg expandtab fdls fex fileignorecase fml foldlevel formatexpr gcr go guifontset helpheight history hlsearch imaf ims includeexpr infercase iskeyword keywordprg laststatus lispwords lrm magic maxfuncdepth menuitems mm modifiable mousemodel mzq numberwidth opfunc patchexpr pfn pp printfont pumwidth pythonthreehome re restorescreen ro rulerformat scl scs sft shellslash shortmess showtabline sj smd spell spl srr startofline suffixes switchbuf ta tagfunc tbi term termwintype tgc titlelen toolbariconsize ttimeout ttymouse twt undofile varsofttabstop verbosefile viminfofile wak weirdinvert wig wildoptions winheight wm wrapscan
syn keyword vimOption contained ai anti autochdir backspace balloonevalterm bexpr bo browsedir casemap cfu cino cmp comments concealcursor cpp cscopetag cst cursorline dex dip eb emoji errorbells exrc fdm ff filetype fmr foldlevelstart formatlistpat gd gp guifontwide helplang hk ic imak imsearch incsearch insertmode isp km lazyredraw list ls makeef maxmapdepth mfd mmd modified mouses mzquantum nuw osfiletype patchmode ph preserveindent printheader pvh pyx readonly revins rop runtimepath scr sect sh shelltemp shortname shq slm sn spellcapcheck splitbelow ss statusline suffixesadd sws tabline taglength tbidi termbidi terse tgst titleold top ttimeoutlen ttyscroll tx undolevels vartabstop vfile virtualedit warn wfh wildchar wim winminheight wmh write
syn keyword vimOption contained akm antialias autoindent backup balloonexpr bg bomb bs cb ch cinoptions cms commentstring conceallevel cpt cscopetagorder csto cursorlineopt dg dir ed enc errorfile fcl fdn ffs fillchars fo foldmarker formatoptions gdefault grepformat guiheadroom hf hkmap icon imc imsf inde is isprint kmp lbr listchars lsp makeencoding maxmem mh mmp more mouseshape mzschemedll odev pa path pheader previewheight printmbcharset pvp pyxversion redrawtime ri rs sb scroll sections shcf shelltype showbreak si sm so spellfile splitright ssl stl sw sxe tabpagemax tagrelative tbis termencoding textauto thesaurus titlestring tpm ttm ttytype uc undoreload vb vi visualbell wb wfw wildcharm winaltkeys winminwidth wmnu writeany
syn keyword vimOption contained al ar autoread backupcopy bdir bh breakat bsdir cc charconvert cinw co compatible confirm crb cscopeverbose csverb cwh dict directory edcompatible encoding errorformat fcs fdo fic fixendofline foldclose foldmethod formatprg gfm grepprg guioptions hh hkmapp iconstring imcmdline imst indentexpr isf joinspaces kp lcs lm luadll makeprg maxmempattern mis mmt mouse mouset mzschemegcdll oft packpath pdev pi previewpopup printmbfont pvw qe regexpengine rightleft rtp sbo scrollbind secure shell shellxescape showcmd sidescroll smartcase softtabstop spelllang spo ssop stmp swapfile sxq tabstop tags tbs termguicolors textmode tildeop tl tr tty tw udf updatecount vbs viewdir vop wc wh wildignore wincolor winptydll wmw writebackup
syn keyword vimOption contained aleph arab autowrite backupdir bdlay bin breakindent bsk ccv ci cinwords cocu complete copyindent cryptmethod csl cuc debug dictionary display ef endofline esckeys fdc fdt fileencoding fixeol foldcolumn foldminlines fp gfn gtl guipty hi hkp ignorecase imd imstatusfunc indentkeys isfname js langmap linebreak lmap lw mat maxmemtot mkspellmem mod mousef mousetime nf ofu para penc pm previewwindow printoptions pw qftf relativenumber rightleftcmd ru sbr scrollfocus sel shellcmdflag shellxquote showfulltag sidescrolloff smartindent sol spelloptions spr st sts swapsync syn tag tagstack tc termwinkey textwidth timeout tm ts ttybuiltin twk udir updatetime vdir viewoptions vsts wcm whichwrap wildignorecase window winwidth wop writedelay
syn keyword vimOption contained allowrevins arabic autowriteall backupext belloff binary breakindentopt bt cd cin clipboard cole completefunc cot cscopepathcomp cspc cul deco diff dy efm eol et fde fen fileencodings fk foldenable foldnestmax fs gfs gtt guitablabel hid hl im imdisable imstyle indk isi key langmenu lines lnr lz matchpairs mco ml modeline mousefocus mp nrformats omnifunc paragraphs perldll pmbcs printdevice prompt pythondll quickfixtextfunc remap rl rubydll sc scrolljump selection shellpipe shiftround showmatch signcolumn smarttab sp spellsuggest sps sta su swb synmaxcol tagbsearch tal tcldll termwinscroll tf timeoutlen to tsl ttyfast tws ul ur ve vif vts wcr wi wildmenu winfixheight wiv wrap ws
syn keyword vimOption contained altkeymap arabicshape aw backupskip beval bk bri bufhidden cdpath cindent cm colorcolumn completeopt cp cscopeprg csprg culopt def diffexpr ea ei ep eventignore fdi fenc fileformat fkmap foldexpr foldopen fsync gfw guicursor guitabtooltip hidden hlg imactivatefunc imi inc inex isident keymap langnoremap linespace loadplugins ma matchtime mef mle modelineexpr mousehide mps nu opendevice paste pex pmbfn printencoding pt pythonhome quoteescape renderoptions rlc ruf scb scrolloff selectmode shellquote shiftwidth showmode siso smc spc spf sr stal sua swf syntax tagcase tb tenc termwinsize tfu title toolbar tsr ttym twsl undodir ut verbose viminfo wa wd wic wildmode winfixwidth wiw wrapmargin ww
syn keyword vimOption contained ambiwidth ari awa balloondelay bevalterm bkc briopt buflisted cedit cink cmdheight columns completepopup cpo cscopequickfix csqf cursorbind define diffopt ead ek equalalways ex fdl fencs fileformats flp foldignore foldtext ft ghr guifont helpfile highlight hls imactivatekey iminsert include inf isk keymodel langremap lisp lpl macatsui maxcombine menc mls modelines mousem msm number operatorfunc pastetoggle pexpr popt printexpr pumheight pythonthreedll rdt report rnu ruler scf scrollopt sessionoptions shellredir shm
" vimOptions: These are the turn-off setting variants {{{2
syn keyword vimOption contained noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobevalterm nobk nobreakindent nocf nocindent nocopyindent nocscoperelative nocsre nocuc nocursorcolumn nodelcombine nodigraph noed noemo noeol noesckeys noexpandtab nofic nofixeol nofoldenable nogd nohid nohkmap nohls noicon noimc noimdisable noinfercase nojoinspaces nolangremap nolinebreak nolnr nolrm nomacatsui noml nomod nomodelineexpr nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscrollbind noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx noundofile novisualbell nowarn noweirdinvert nowfw nowildignorecase nowinfixheight nowiv nowrap nowrite nowritebackup
@ -66,8 +66,8 @@ syn keyword vimErrSetting contained bioskey biosk conskey consk autoprint beauti
" AutoCmd Events {{{2
syn case ignore
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave WinNew
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave WinNew
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre BufWinEnter
" Highlight commonly used Groupnames {{{2
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
@ -78,11 +78,11 @@ syn match vimHLGroup contained "Conceal"
syn case match
" Function Names {{{2
syn keyword vimFuncName contained abs appendbufline asin assert_fails assert_notmatch balloon_gettext bufadd bufname byteidx char2nr ch_evalexpr ch_log ch_readraw cindent complete_check cosh deepcopy diff_hlID eval exists feedkeys findfile fnamemodify foldtextresult get getchar getcmdtype getenv getftype getmarklist getqflist gettabwinvar getwinposy has histdel hostname inputdialog insert islocked job_setoptions js_decode len lispindent localtime maparg matchaddpos matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prop_add prop_type_add pum_getpos rand reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setline setreg sha256 sign_getplaced sign_unplace sort sound_stop srand strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setapi term_wait test_garbagecollect_soon test_null_dict test_null_string test_setmouse timer_info tolower trunc uniq wildmenumode win_execute win_gotoid winlayout winrestview winwidth
syn keyword vimFuncName contained acos argc assert_beeps assert_false assert_report balloon_show bufexists bufnr byteidxcomp ch_canread ch_evalraw ch_logfile ch_sendexpr clearmatches complete_info count delete echoraw eventhandler exp filereadable float2nr foldclosed foreground getbufinfo getcharmod getcmdwintype getfontname getimstatus getmatches getreg gettagstack getwinvar has_key histget iconv inputlist interrupt isnan job_start js_encode libcall list2str log mapcheck matcharg matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_clear prop_type_change pumvisible range reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcharsearch setloclist settabvar shellescape sign_jump sign_unplacelist sound_clear spellbadword state strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled term_list term_setkill test_alloc_fail test_getvalue test_null_function test_option_not_set test_settime timer_pause toupper type values winbufnr win_findbuf winheight winline winsaveview wordcount
syn keyword vimFuncName contained add argidx assert_equal assert_inrange assert_true balloon_split buflisted bufwinid call ch_close ch_getbufnr ch_open ch_sendraw col confirm cscope_connection deletebufline empty executable expand filewritable floor foldclosedend funcref getbufline getcharsearch getcompletion getfperm getjumplist getmousepos getregtype getwininfo glob haslocaldir histnr indent inputrestore invert items job_status json_decode libcallnr listener_add log10 mapset matchdelete max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_setcallback prop_find prop_type_delete py3eval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcmdpos setmatches settabwinvar shiftwidth sign_place simplify soundfold spellsuggest str2float strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_scrape term_setrestore test_autochdir test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile virtcol wincol win_getid win_id2tabwin winnr win_screenpos writefile
syn keyword vimFuncName contained and arglistid assert_equalfile assert_match atan browse bufload bufwinnr ceil ch_close_in ch_getjob ch_read ch_setoptions complete copy cursor did_filetype environ execute expandcmd filter fmod foldlevel function getbufvar getcmdline getcurpos getfsize getline getpid gettabinfo getwinpos glob2regpat hasmapto hlexists index inputsave isdirectory job_getchannel job_stop json_encode line listener_flush luaeval match matchend menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setinterrupt prop_list prop_type_get pyeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setenv setpos settagstack sign_define sign_placelist sin sound_playevent split str2list strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_sendkeys term_setsize test_feedinput test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree visualmode windowsversion win_gettype win_id2win winrestcmd win_splitmove xor
syn keyword vimFuncName contained append argv assert_exception assert_notequal atan2 browsedir bufloaded byte2line changenr chdir ch_info ch_readblob ch_status complete_add cos debugbreak diff_filler escape exepath extend finddir fnameescape foldtext garbagecollect getchangelist getcmdpos getcwd getftime getloclist getpos gettabvar getwinposx globpath histadd hlID input inputsecret isinf job_info join keys line2byte listener_remove map matchadd matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setprompt prop_remove prop_type_list pyxeval readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playfile sqrt str2nr strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_setansicolors term_start test_garbagecollect_now test_null_channel test_null_partial test_scrollbar test_void timer_stopall
syn keyword vimFuncName contained abs appendbufline asin assert_fails assert_notmatch balloon_gettext bufadd bufname byteidx char2nr ch_evalexpr ch_log ch_readraw cindent complete_check cosh deepcopy diff_hlID eval exists feedkeys findfile fnameescape foldtext garbagecollect getchangelist getcmdpos getcwd getftime getloclist getpos gettabinfo getwinpos glob2regpat hasmapto hlexists index inputsave isdirectory job_getchannel job_stop json_encode line listener_flush luaeval match matchend menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setinterrupt prop_list prop_type_get pyeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setenv setpos settagstack sign_define sign_placelist sin sound_playevent split str2list strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_ignore_error test_null_job test_override test_srand_seed timer_start tr undotree wildmenumode win_execute win_gotoid winlayout winrestview winwidth
syn keyword vimFuncName contained acos argc assert_beeps assert_false assert_report balloon_show bufexists bufnr byteidxcomp ch_canread ch_evalraw ch_logfile ch_sendexpr clearmatches complete_info count delete echoraw eventhandler exp filereadable flatten fnamemodify foldtextresult get getchar getcmdtype getenv getftype getmarklist getqflist gettabvar getwinposx globpath histadd hlID input inputsecret isinf job_info join keys line2byte listener_remove map matchadd matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setprompt prop_remove prop_type_list pyxeval readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playfile sqrt str2nr strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_null_blob test_null_list test_refcount test_unknown timer_stop trim uniq winbufnr win_findbuf winheight winline winsaveview wordcount
syn keyword vimFuncName contained add argidx assert_equal assert_inrange assert_true balloon_split buflisted bufwinid call ch_close ch_getbufnr ch_open ch_sendraw col confirm cscope_connection deletebufline empty executable expand filewritable float2nr foldclosed foreground getbufinfo getcharmod getcmdwintype getfontname getimstatus getmatches getreg gettabwinvar getwinposy has histdel hostname inputdialog insert islocked job_setoptions js_decode len lispindent localtime maparg matchaddpos matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prop_add prop_type_add pum_getpos rand reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setline setreg sha256 sign_getplaced sign_unplace sort sound_stop srand strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc values wincol win_getid win_id2tabwin winnr win_screenpos writefile
syn keyword vimFuncName contained and arglistid assert_equalfile assert_match atan browse bufload bufwinnr ceil ch_close_in ch_getjob ch_read ch_setoptions complete copy cursor did_filetype environ execute expandcmd filter floor foldclosedend funcref getbufline getcharsearch getcompletion getfperm getjumplist getmousepos getreginfo gettagstack getwinvar has_key histget iconv inputlist interrupt isnan job_start js_encode libcall list2str log mapcheck matcharg matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_clear prop_type_change pumvisible range reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcharsearch setloclist settabvar shellescape sign_jump sign_unplacelist sound_clear spellbadword state strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_dict test_null_string test_setmouse timer_info tolower type virtcol windowsversion win_gettype win_id2win winrestcmd win_splitmove xor
syn keyword vimFuncName contained append argv assert_exception assert_notequal atan2 browsedir bufloaded byte2line changenr chdir ch_info ch_readblob ch_status complete_add cos debugbreak diff_filler escape exepath extend finddir fmod foldlevel function getbufvar getcmdline getcurpos getfsize getline getpid getregtype getwininfo glob haslocaldir histnr indent inputrestore invert items job_status json_decode libcallnr listener_add log10 mapset matchdelete max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_setcallback prop_find prop_type_delete py3eval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcmdpos setmatches settabwinvar shiftwidth sign_place simplify soundfold spellsuggest str2float strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_function test_option_not_set test_settime timer_pause toupper undofile visualmode
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1
@ -295,6 +295,7 @@ syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentS
syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
" Vim9 comments - TODO: might be highlighted while they don't work
syn match vim9Comment excludenl +^#[^{].*$+ contains=@vimCommentGroup,vimCommentString
syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
@ -453,6 +454,9 @@ syn case match
syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncName,vimUserFunc,vimExecute
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation
" User Command Highlighting: {{{2
syn match vimUsrCmd '^\s*\zs\u\w*.*$'
" Errors And Warnings: {{{2
" ====================
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
@ -598,7 +602,7 @@ syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
syn match vimHiGuiRgb contained "#\x\{6}"
" Highlighting: hi group key=arg ... {{{2
syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
syn region vimHiKeyList contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||" contains=@vimHiCluster
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
syn match vimHiKeyError contained "\i\+="he=e-1
@ -607,6 +611,7 @@ syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
syn match vimHiStartStop contained "\c\(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
@ -629,7 +634,7 @@ syn match vimCtrlChar "[- -]"
" Beginners - Patterns that involve ^ {{{2
" =========
syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vim9LineComment +^[ \t:]*#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
syn match vimContinue "^\s*\\"
syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
@ -877,6 +882,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimError Error
hi def link vimFBVar vimVar
hi def link vimFgBgAttrib vimHiAttrib
hi def link vimHiCtermul vimHiTerm
hi def link vimFold Folded
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType

View File

@ -7,7 +7,7 @@
fasonita por priskribi sufi<66>ajn komandojn, por ke vi kapablu uzi Vim
kun sufi<66>a facileco.
La tempo bezonata por plenumi la kurson estas 25-30 minutoj, kaj dependas
La tempo bezonata por plenumi la kurson estas 30 minutoj, kaj dependas
de kiom da tempo estas uzata por eksperimenti.
ATENTU:
@ -100,7 +100,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
1. Movu la kursoron al la unua suba linio markita per --->.
2. Por igi la unuan linion sama kiel la dua, movu la kursoron sur la unuan
signon post kie la teksto estas enmetenda.
signon anta<EFBFBD> kie la teksto estas enmetenda.
3. Premu i kaj tajpu la bezonatajn aldonojn.
@ -200,7 +200,7 @@ Nun da
1. Premu <ESK> por certigi, ke vi estas en normala re<72>imo.
2. Movu la kursoron al la linio markita per --->.
2. Movu la kursoron al la suba linio markita per --->.
3. Movu la kursoron al la komenco de vorto, kiu forvi<76>endas.
@ -225,7 +225,7 @@ Nun da
1. Premu <ESK> por certigi, ke vi estas en normala re<72>imo.
2. Movu la kursoron sur la suban linion markita per --->.
2. Movu la kursoron al la suba linio markita per --->.
3. Movu la kursoron <20>e la fino de la <20>usta linio (POST la unua . ).
@ -296,10 +296,10 @@ RIMARKO: Premo de nur la movo en Normala re
1. Movu la kursoron <20>e la unua MAJUSKLA vorto en la linio markita per --->.
2. Tajpu d2w por forvi<76>i la du MAJUSKLAJN vortojn
2. Tajpu d2w por forvi<76>i la du MAJUSKLAJN vortojn.
3. Ripetu pa<70>ojn 1 <20>is 2 per malsama nombro por forvi<76>i la sinsekvajn
MAJUSKLAJN vortojn per unu komando
MAJUSKLAJN vortojn per unu komando.
---> Tiu AB CDE linio FGHI JK LMN OP de vortoj estas Q RS TUV purigita.
@ -379,7 +379,7 @@ RIMARKO: Premo de nur la movo en Normala re
** Tajpu p por meti tekston forvi<76>itan anta<74>e post la kursoro. **
1. Movu la kursoron <20>e la unua ---> suba linio.
1. Movu la kursoron <20>e la unua suba linio markita per --->.
2. Tajpu dd por forvi<76>i la linion kaj konservi <20>in ene de re<72>istro de Vim.
@ -652,7 +652,7 @@ RIMARKO: Se vi volus eliri el Vim kaj restartigi
la dosiero estus precize same kiel kopio de la instruilo kiam vi
konservis <20>in.
5. Nun forvi<76>u la dosieron tajpante (WINDOWS): :!del TESTO
5. Nun forvi<76>u la dosieron tajpante (VINDOZO): :!del TESTO
a<> (UNIKSO): :!rm TESTO
@ -713,7 +713,7 @@ RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple,
1. :!komando plenumas eksteran komandon.
Iuj utilaj ekzemploj estas:
(WINDOWS) (UNIKSO)
(VINDOZO) (UNIKSO)
:!dir :!ls - listigas dosierujon
:!del DOSIERNOMO :!rm DOSIERNOMO - forvi<76>as la dosieron DOSIERNOMO
@ -808,7 +808,7 @@ RIMARKO: Anstata
** Uzu la y operatoron por kopii tekston, kaj p por alglui <20>in **
1. Iru al la linio markita per ---> sube kaj poziciu la kursoron post "a)".
1. Iru al la suba linio markita per ---> kaj poziciu la kursoron post "a)".
2. Komencu la Viduman re<72>imon per v kaj movu la kursoron tuj anta<74> "unua".
@ -914,7 +914,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu ser
1. Ekredaktu la dosieron "vimrc". Tio dependas de via sistemo:
:e ~/.vimrc por Unikso
:e $VIM/_vimrc por Windows
:e $VIM/_vimrc por Vindozo
2. Nun legu la enhavon de la ekzempla "vimrc"
:r $VIMRUNTIME/vimrc_example.vim
@ -945,7 +945,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu ser
6. Nun aldonu spaceton kaj la komencon de ekzistanta nomo: :edit DOSI
7. Premu <TAB>. Vim kompletigos la nomon (se <20>i estas unika)
7. Premu d<TAB>. Vim kompletigos la nomon (se <20>i estas unika)
RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
<TAB>. Estas aparte utila por :help .
@ -986,6 +986,6 @@ RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
Esperantigita fare de Dominique Pell<6C>, 2008-04-01
Retpo<70>to: dominique.pelle@gmail.com
Lasta <20>an<61>o: 2018-12-02
Lasta <20>an<61>o: 2020-07-19
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -7,7 +7,7 @@
fasonita por priskribi sufiĉajn komandojn, por ke vi kapablu uzi Vim
kun sufiĉa facileco.
La tempo bezonata por plenumi la kurson estas 25-30 minutoj, kaj dependas
La tempo bezonata por plenumi la kurson estas 30 minutoj, kaj dependas
de kiom da tempo estas uzata por eksperimenti.
ATENTU:
@ -100,7 +100,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
1. Movu la kursoron al la unua suba linio markita per --->.
2. Por igi la unuan linion sama kiel la dua, movu la kursoron sur la unuan
signon post kie la teksto estas enmetenda.
signon antaŭ kie la teksto estas enmetenda.
3. Premu i kaj tajpu la bezonatajn aldonojn.
@ -200,7 +200,7 @@ Nun daŭrigu al la leciono 2.
1. Premu <ESK> por certigi, ke vi estas en normala reĝimo.
2. Movu la kursoron al la linio markita per --->.
2. Movu la kursoron al la suba linio markita per --->.
3. Movu la kursoron al la komenco de vorto, kiu forviŝendas.
@ -225,7 +225,7 @@ Nun daŭrigu al la leciono 2.
1. Premu <ESK> por certigi, ke vi estas en normala reĝimo.
2. Movu la kursoron sur la suban linion markita per --->.
2. Movu la kursoron al la suba linio markita per --->.
3. Movu la kursoron ĉe la fino de la ĝusta linio (POST la unua . ).
@ -296,10 +296,10 @@ RIMARKO: Premo de nur la movo en Normala reĝimo sen operatoro movos
1. Movu la kursoron ĉe la unua MAJUSKLA vorto en la linio markita per --->.
2. Tajpu d2w por forviŝi la du MAJUSKLAJN vortojn
2. Tajpu d2w por forviŝi la du MAJUSKLAJN vortojn.
3. Ripetu paŝojn 1 ĝis 2 per malsama nombro por forviŝi la sinsekvajn
MAJUSKLAJN vortojn per unu komando
MAJUSKLAJN vortojn per unu komando.
---> Tiu AB CDE linio FGHI JK LMN OP de vortoj estas Q RS TUV purigita.
@ -379,7 +379,7 @@ RIMARKO: Premo de nur la movo en Normala reĝimo sen operatoro movos
** Tajpu p por meti tekston forviŝitan antaŭe post la kursoro. **
1. Movu la kursoron ĉe la unua ---> suba linio.
1. Movu la kursoron ĉe la unua suba linio markita per --->.
2. Tajpu dd por forviŝi la linion kaj konservi ĝin ene de reĝistro de Vim.
@ -652,7 +652,7 @@ RIMARKO: Se vi volus eliri el Vim kaj restartigi ĝin denove per vim TESTO,
la dosiero estus precize same kiel kopio de la instruilo kiam vi
konservis ĝin.
5. Nun forviŝu la dosieron tajpante (WINDOWS): :!del TESTO
5. Nun forviŝu la dosieron tajpante (VINDOZO): :!del TESTO
aŭ (UNIKSO): :!rm TESTO
@ -713,7 +713,7 @@ RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple,
1. :!komando plenumas eksteran komandon.
Iuj utilaj ekzemploj estas:
(WINDOWS) (UNIKSO)
(VINDOZO) (UNIKSO)
:!dir :!ls - listigas dosierujon
:!del DOSIERNOMO :!rm DOSIERNOMO - forviŝas la dosieron DOSIERNOMO
@ -808,7 +808,7 @@ RIMARKO: Anstataŭiga reĝimo estas same kiel Enmeta reĝimo, sed ĉiu signo
** Uzu la y operatoron por kopii tekston, kaj p por alglui ĝin **
1. Iru al la linio markita per ---> sube kaj poziciu la kursoron post "a)".
1. Iru al la suba linio markita per ---> kaj poziciu la kursoron post "a)".
2. Komencu la Viduman reĝimon per v kaj movu la kursoron tuj antaŭ "unua".
@ -914,7 +914,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu serĉa komando, uzu \c
1. Ekredaktu la dosieron "vimrc". Tio dependas de via sistemo:
:e ~/.vimrc por Unikso
:e $VIM/_vimrc por Windows
:e $VIM/_vimrc por Vindozo
2. Nun legu la enhavon de la ekzempla "vimrc"
:r $VIMRUNTIME/vimrc_example.vim
@ -945,7 +945,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu serĉa komando, uzu \c
6. Nun aldonu spaceton kaj la komencon de ekzistanta nomo: :edit DOSI
7. Premu <TAB>. Vim kompletigos la nomon (se ĝi estas unika)
7. Premu d<TAB>. Vim kompletigos la nomon (se ĝi estas unika)
RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
<TAB>. Estas aparte utila por :help .
@ -986,6 +986,6 @@ RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
Esperantigita fare de Dominique Pellé, 2008-04-01
Retpoŝto: dominique.pelle@gmail.com
Lasta ŝanĝo: 2018-12-02
Lasta ŝanĝo: 2020-07-19
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -181,203 +181,4 @@ OS/2 support was removed in patch 7.4.1008
4. Atari MiNT
=============
[NOTE: this is quite old, it might not work anymore]
To compile Vim for MiNT you may either copy Make_mint.mak to Makefile or use
the Unix Makefile adapted for the MiNT configuration.
Now proceed as described in the Unix section.
Prerequisites:
You need a curses or termcap library that supports non-alphanumeric
termcap names. If you don't have any, link with termlib.o.
-----------------------------------------------------------------------------
The rest of this file is based on the INSTALL file that comes with GNU
autoconf 2.12. Not everything applies to Vim. Read Makefile too!
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.ac' is used to create `configure' by a program
called `autoconf'. You only need `configure.ac' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.
Atari MiNT support was removed in patch 8.2.1215.

View File

@ -744,15 +744,18 @@ OBJ = \
$(OUTDIR)/gui_xim.o \
$(OUTDIR)/hardcopy.o \
$(OUTDIR)/hashtab.o \
$(OUTDIR)/help.o \
$(OUTDIR)/highlight.o \
$(OUTDIR)/if_cscope.o \
$(OUTDIR)/indent.o \
$(OUTDIR)/insexpand.o \
$(OUTDIR)/json.o \
$(OUTDIR)/list.o \
$(OUTDIR)/locale.o \
$(OUTDIR)/main.o \
$(OUTDIR)/map.o \
$(OUTDIR)/mark.o \
$(OUTDIR)/match.o \
$(OUTDIR)/memfile.o \
$(OUTDIR)/memline.o \
$(OUTDIR)/menu.o \

View File

@ -1,56 +0,0 @@
#
# Makefile for Vim on MiNT vim:ts=8:sw=8:tw=78
#
# This is a wrapper around the Unix Makefile. It is configured to accompany
# the MiNT distribution of Vim.
#
# See "Makefile" for instructions how to run "make".
#
# BUT: Always run: "make -f Make_mint.mak config",
# and then: "make -f Make_mint.mak"!
# Otherwise the postprocessing won't get done.
#
### This Makefile has been successfully tested on these systems.
### Check the (*) column for remarks, listed below.
### Later code changes may cause small problems, otherwise Vim is supposed to
### compile and run without problems.
#system: configurations: version (*) tested by:
#------------- ------------------------ ------- - ----------
#MiNT 1.12.5 gcc gcc-2.6.1 3.29 Jens Felderhoff
#MiNT 1.12.6 gcc gcc-2.6.1 -GUI 4.6b Jens Felderhoff
#MiNT 1.12.6 gcc gcc-2.6.1 -GUI 4.6 Jens Felderhoff
# set this to the pathname prefix of your symbol link editor, i.e. if it is
# /usr/local/bin/sym-ld set:
#
SYMLDPREFIX = /usr/local/bin/sym-
#SYMLDPREFIX = /gnu/bin/sym-
POSTPROCESS = fixstk 20k $(VIMTARGET)
DBGPOSTPROCESS = fixstk 20k $(DBGTARGET)
DBGLDFLAGS = -B$(SYMLDPREFIX)
DBGTARGET = $(VIMTARGET).sym
# Default target is making the executable and then do the post processing
all: $(VIMTARGET) $(TOOLS)
$(POSTPROCESS)
debug: $(DBGTARGET)
$(DBGPOSTPROCESS)
#################### include the Unix Makefile ###############
include Makefile
### (M) MiNT with gcc 2.6.1 and gdb 3.5
CC = gcc -mint
CFLAGS = -g -O -Iproto
$(DBGTARGET): $(OBJ) version.c version.h
$(CC) -c $(ALL_CFLAGS) version.c
$(CC) $(LDFLAGS) $(DBGLDFLAGS) -o $(DBGTARGET) -g $(OBJ) \
version.o $(ALL_LIBS)

View File

@ -64,14 +64,17 @@ SRC = arabic.c \
gui_xim.c \
hardcopy.c \
hashtab.c \
help.c \
highlight.c \
indent.c \
insexpand.c \
json.c \
list.c \
locale.c \
main.c \
map.c \
mark.c \
match.c \
mbyte.c \
memfile.c \
memline.c \

View File

@ -766,15 +766,18 @@ OBJ = \
$(OUTDIR)\gui_xim.obj \
$(OUTDIR)\hardcopy.obj \
$(OUTDIR)\hashtab.obj \
$(OUTDIR)\help.obj \
$(OUTDIR)\highlight.obj \
$(OBJDIR)\if_cscope.obj \
$(OUTDIR)\indent.obj \
$(OUTDIR)\insexpand.obj \
$(OUTDIR)\json.obj \
$(OUTDIR)\list.obj \
$(OUTDIR)\locale.obj \
$(OUTDIR)\main.obj \
$(OUTDIR)\map.obj \
$(OUTDIR)\mark.obj \
$(OUTDIR)\match.obj \
$(OUTDIR)\mbyte.obj \
$(OUTDIR)\memfile.obj \
$(OUTDIR)\memline.obj \
@ -1607,6 +1610,8 @@ $(OUTDIR)/hardcopy.obj: $(OUTDIR) hardcopy.c $(INCL) version.h
$(OUTDIR)/hashtab.obj: $(OUTDIR) hashtab.c $(INCL)
$(OUTDIR)/help.obj: $(OUTDIR) help.c $(INCL)
$(OUTDIR)/highlight.obj: $(OUTDIR) highlight.c $(INCL)
$(OUTDIR)/indent.obj: $(OUTDIR) indent.c $(INCL)
@ -1665,12 +1670,16 @@ $(OUTDIR)/json.obj: $(OUTDIR) json.c $(INCL)
$(OUTDIR)/list.obj: $(OUTDIR) list.c $(INCL)
$(OUTDIR)/locale.obj: $(OUTDIR) locale.c $(INCL)
$(OUTDIR)/main.obj: $(OUTDIR) main.c $(INCL) $(CUI_INCL)
$(OUTDIR)/map.obj: $(OUTDIR) map.c $(INCL)
$(OUTDIR)/mark.obj: $(OUTDIR) mark.c $(INCL)
$(OUTDIR)/match.obj: $(OUTDIR) match.c $(INCL)
$(OUTDIR)/memfile.obj: $(OUTDIR) memfile.c $(INCL)
$(OUTDIR)/memline.obj: $(OUTDIR) memline.c $(INCL)
@ -1927,14 +1936,17 @@ proto.h: \
proto/gui_xim.pro \
proto/hardcopy.pro \
proto/hashtab.pro \
proto/help.pro \
proto/highlight.pro \
proto/indent.pro \
proto/insexpand.pro \
proto/json.pro \
proto/list.pro \
proto/locale.pro \
proto/main.pro \
proto/map.pro \
proto/mark.pro \
proto/match.pro \
proto/memfile.pro \
proto/memline.pro \
proto/menu.pro \

View File

@ -337,6 +337,7 @@ SRC = \
gui_xim.c \
hardcopy.c \
hashtab.c \
help.c \
highlight.c \
if_cscope.c \
if_xcmdsrv.c \
@ -344,9 +345,11 @@ SRC = \
insexpand.c \
json.c \
list.c \
locale.c \
main.c \
map.c \
mark.c \
match.c \
mbyte.c \
memfile.c \
memline.c \
@ -449,6 +452,7 @@ OBJ = \
gui_xim.obj \
hardcopy.obj \
hashtab.obj \
help.obj \
highlight.obj \
if_cscope.obj \
if_mzsch.obj \
@ -457,9 +461,11 @@ OBJ = \
insexpand.obj \
json.obj \
list.obj \
locale.obj \
main.obj \
map.obj \
mark.obj \
match.obj \
mbyte.obj \
memfile.obj \
memline.obj \
@ -832,6 +838,10 @@ hashtab.obj : hashtab.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
globals.h
help.obj : help.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
globals.h
highlight.obj : highlight.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
@ -857,6 +867,10 @@ list.obj : list.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
beval.h [.proto]gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
globals.h
locale.obj : locale.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
beval.h [.proto]gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
globals.h
main.obj : main.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h \
@ -867,6 +881,9 @@ map.obj : map.c vim.h [.auto]config.h feature.h os_unix.h \
mark.obj : mark.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h
match.obj : match.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h
memfile.obj : memfile.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \

View File

@ -1639,6 +1639,7 @@ BASIC_SRC = \
gui_xim.c \
hardcopy.c \
hashtab.c \
help.c \
highlight.c \
if_cscope.c \
if_xcmdsrv.c \
@ -1646,9 +1647,11 @@ BASIC_SRC = \
insexpand.c \
json.c \
list.c \
locale.c \
main.c \
map.c \
mark.c \
match.c \
mbyte.c \
memfile.c \
memline.c \
@ -1789,14 +1792,17 @@ OBJ_COMMON = \
objects/gui_xim.o \
objects/hardcopy.o \
objects/hashtab.o \
objects/help.o \
objects/highlight.o \
objects/if_cscope.o \
objects/if_xcmdsrv.o \
objects/indent.o \
objects/insexpand.o \
objects/list.o \
objects/locale.o \
objects/map.o \
objects/mark.o \
objects/match.o \
objects/mbyte.o \
objects/memline.o \
objects/menu.o \
@ -1956,6 +1962,7 @@ PRO_AUTO = \
gui_beval.pro \
hardcopy.pro \
hashtab.pro \
help.pro \
highlight.pro \
if_cscope.pro \
if_lua.pro \
@ -1968,9 +1975,11 @@ PRO_AUTO = \
insexpand.pro \
json.pro \
list.pro \
locale.pro \
main.pro \
map.pro \
mark.pro \
match.pro \
mbyte.pro \
memfile.pro \
memline.pro \
@ -2301,12 +2310,7 @@ test_libvterm:
# Run individual OLD style test.
# These do not depend on the executable, compile it when needed.
test1 \
test42 test44 test49 \
test52 test59 \
test70 \
test86 test87 \
test99:
test1 test49 test59:
cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
# Run individual NEW style test.
@ -3262,6 +3266,9 @@ objects/hardcopy.o: hardcopy.c
objects/hashtab.o: hashtab.c
$(CCC) -o $@ hashtab.c
objects/help.o: help.c
$(CCC) -o $@ help.c
objects/gui.o: gui.c
$(CCC) -o $@ gui.c
@ -3370,6 +3377,9 @@ objects/kword_test.o: kword_test.c
objects/list.o: list.c
$(CCC) -o $@ list.c
objects/locale.o: locale.c
$(CCC) -o $@ locale.c
objects/main.o: main.c
$(CCC) -o $@ main.c
@ -3379,6 +3389,9 @@ objects/map.o: map.c
objects/mark.o: mark.c
$(CCC) -o $@ mark.c
objects/match.o: match.c
$(CCC) -o $@ match.c
objects/memfile.o: memfile.c
$(CCC) -o $@ memfile.c
@ -3925,6 +3938,10 @@ objects/hashtab.o: hashtab.c vim.h protodef.h auto/config.h feature.h os_unix.h
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/help.o: help.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/highlight.o: highlight.c vim.h protodef.h auto/config.h feature.h \
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
@ -3953,6 +3970,10 @@ objects/list.o: list.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/locale.o: locale.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/main.o: main.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
@ -3965,6 +3986,10 @@ objects/mark.o: mark.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/match.o: match.c vim.h protodef.h auto/config.h feature.h \
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/mbyte.o: mbyte.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \

View File

@ -48,11 +48,14 @@ filepath.c | dealing with file names and paths
findfile.c | search for files in 'path'
fold.c | folding
getchar.c | getting characters and key mapping
help.c | vim help related functions
highlight.c | syntax highlighting
indent.c | text indentation
insexpand.c | Insert mode completion
mark.c | marks
locale.c | locale/language handling
map.c | mapping and abbreviations
mark.c | marks
match.c | highlight matching
mbyte.c | multi-byte character handling
memfile.c | storing lines for buffers in a swapfile
memline.c | storing lines for buffers in memory

6
src/auto/configure vendored
View File

@ -12106,7 +12106,7 @@ if test "x$olibs" = "x$LIBS"; then
$as_echo_n "checking for tgetent()... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int tgetent(char *, const char *);
int
main ()
{
@ -14143,8 +14143,8 @@ else
main() {
uint32_t nr1 = (uint32_t)-1;
uint32_t nr2 = (uint32_t)0xffffffffUL;
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
exit(0);
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
return 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :

View File

@ -285,7 +285,7 @@ general_beval_cb(BalloonEval *beval, int state UNUSED)
++textwinlock;
vim_free(result);
result = eval_to_string(bexpr, NULL, TRUE);
result = eval_to_string(bexpr, TRUE);
// Remove one trailing newline, it is added when the result was a
// list and it's hardly ever useful. If the user really wants a

View File

@ -1188,7 +1188,7 @@ do_bufdel(
if (addr_count == 2)
{
if (*arg) // both range and argument is not allowed
return _(e_trailing);
return ex_errmsg(e_trailing_arg, arg);
bnr = start_bnr;
}
else // addr_count == 1
@ -4094,7 +4094,7 @@ build_stl_str_hl(
tv.vval.v_number = wp->w_id;
set_var((char_u *)"g:statusline_winid", &tv, FALSE);
usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox);
usefmt = eval_to_string_safe(fmt + 2, use_sandbox);
if (usefmt == NULL)
usefmt = fmt;
@ -4229,12 +4229,19 @@ build_stl_str_hl(
}
if (n == curitem && group_start_userhl == group_end_userhl)
{
// empty group
p = t;
l = 0;
// do not use the highlighting from the removed group
for (n = groupitem[groupdepth] + 1; n < curitem; n++)
{
// do not use the highlighting from the removed group
if (item[n].type == Highlight)
item[n].type = Empty;
// adjust the start position of TabPage to the next
// item position
if (item[n].type == TabPage)
item[n].start = p;
}
}
}
if (l > item[groupitem[groupdepth]].maxwid)
@ -4434,7 +4441,7 @@ build_stl_str_hl(
if (curwin != save_curwin)
VIsual_active = FALSE;
str = eval_to_string_safe(p, &t, use_sandbox);
str = eval_to_string_safe(p, use_sandbox);
curwin = save_curwin;
curbuf = save_curbuf;

View File

@ -1101,27 +1101,6 @@ channel_open(
return channel;
}
/*
* Copy callback from "src" to "dest", incrementing the refcounts.
*/
static void
copy_callback(callback_T *dest, callback_T *src)
{
dest->cb_partial = src->cb_partial;
if (dest->cb_partial != NULL)
{
dest->cb_name = src->cb_name;
dest->cb_free_name = FALSE;
++dest->cb_partial->pt_refcount;
}
else
{
dest->cb_name = vim_strsave(src->cb_name);
dest->cb_free_name = TRUE;
func_ref(src->cb_name);
}
}
static void
free_set_callback(callback_T *cbp, callback_T *callback)
{

View File

@ -86,7 +86,7 @@ eval_client_expr_to_string(char_u *expr)
// to be typed. Do generate errors so that try/catch works.
++emsg_silent;
res = eval_to_string(expr, NULL, TRUE);
res = eval_to_string(expr, TRUE);
debug_break_level = save_dbl;
redir_off = save_ro;

View File

@ -494,18 +494,9 @@ ExpandOne(
void
ExpandInit(expand_T *xp)
{
xp->xp_pattern = NULL;
xp->xp_pattern_len = 0;
CLEAR_POINTER(xp);
xp->xp_backslash = XP_BS_NONE;
#ifndef BACKSLASH_IN_FILENAME
xp->xp_shell = FALSE;
#endif
xp->xp_numfiles = -1;
xp->xp_files = NULL;
#if defined(FEAT_EVAL)
xp->xp_arg = NULL;
#endif
xp->xp_line = NULL;
}
/*
@ -1099,6 +1090,15 @@ set_one_cmd_context(
arg = skipwhite(p);
// Skip over ++argopt argument
if ((ea.argt & EX_ARGOPT) && *arg != NUL && STRNCMP(arg, "++", 2) == 0)
{
p = arg;
while (*p && !vim_isspace(*p))
MB_PTR_ADV(p);
arg = skipwhite(p);
}
if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update)
{
if (*arg == '>') // append
@ -1146,14 +1146,6 @@ set_one_cmd_context(
arg = skipwhite(arg);
}
// Skip over ++argopt argument
if ((ea.argt & EX_ARGOPT) && *arg != NUL && STRNCMP(arg, "++", 2) == 0)
{
p = arg;
while (*p && !vim_isspace(*p))
MB_PTR_ADV(p);
arg = skipwhite(p);
}
// Check for '|' to separate commands and '"' to start comments.
// Don't do this for ":read !cmd" and ":write !cmd".
@ -1886,62 +1878,6 @@ expand_cmdline(
return EXPAND_OK;
}
#ifdef FEAT_MULTI_LANG
/*
* Cleanup matches for help tags:
* Remove "@ab" if the top of 'helplang' is "ab" and the language of the first
* tag matches it. Otherwise remove "@en" if "en" is the only language.
*/
static void
cleanup_help_tags(int num_file, char_u **file)
{
int i, j;
int len;
char_u buf[4];
char_u *p = buf;
if (p_hlg[0] != NUL && (p_hlg[0] != 'e' || p_hlg[1] != 'n'))
{
*p++ = '@';
*p++ = p_hlg[0];
*p++ = p_hlg[1];
}
*p = NUL;
for (i = 0; i < num_file; ++i)
{
len = (int)STRLEN(file[i]) - 3;
if (len <= 0)
continue;
if (STRCMP(file[i] + len, "@en") == 0)
{
// Sorting on priority means the same item in another language may
// be anywhere. Search all items for a match up to the "@en".
for (j = 0; j < num_file; ++j)
if (j != i && (int)STRLEN(file[j]) == len + 3
&& STRNCMP(file[i], file[j], len + 1) == 0)
break;
if (j == num_file)
// item only exists with @en, remove it
file[i][len] = NUL;
}
}
if (*buf != NUL)
for (i = 0; i < num_file; ++i)
{
len = (int)STRLEN(file[i]) - 3;
if (len <= 0)
continue;
if (STRCMP(file[i] + len, buf) == 0)
{
// remove the default language
file[i][len] = NUL;
}
}
}
#endif
/*
* Function given to ExpandGeneric() to obtain the possible arguments of the
* ":behave {mswin,xterm}" command.
@ -2480,7 +2416,7 @@ expand_shellcmd(
# if defined(FEAT_EVAL)
/*
* Call "user_expand_func()" to invoke a user defined Vim script function and
* return the result (either a string or a List).
* return the result (either a string, a List or NULL).
*/
static void *
call_user_expand_func(

View File

@ -705,7 +705,7 @@ ex_history(exarg_T *eap)
else
{
*end = i;
emsg(_(e_trailing));
semsg(_(e_trailing_arg), arg);
return;
}
}
@ -717,7 +717,7 @@ ex_history(exarg_T *eap)
end = arg;
if (!get_list_range(&end, &hisidx1, &hisidx2) || *end != NUL)
{
emsg(_(e_trailing));
semsg(_(e_trailing_arg), end);
return;
}

View File

@ -3510,7 +3510,7 @@ fi
if test "x$olibs" = "x$LIBS"; then
AC_MSG_CHECKING([for tgetent()])
AC_TRY_LINK([],
AC_TRY_LINK([int tgetent(char *, const char *);],
[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
AC_MSG_RESULT(yes),
AC_MSG_ERROR([NOT FOUND!
@ -4151,8 +4151,8 @@ AC_TRY_RUN([
main() {
uint32_t nr1 = (uint32_t)-1;
uint32_t nr2 = (uint32_t)0xffffffffUL;
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
exit(0);
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
return 0;
}],
AC_MSG_RESULT(ok),
AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),

View File

@ -105,7 +105,7 @@ do_debug(char_u *cmd)
vim_free(debug_newval);
debug_newval = NULL;
}
sname = estack_sfile();
sname = estack_sfile(FALSE);
if (sname != NULL)
msg((char *)sname);
vim_free(sname);
@ -344,7 +344,7 @@ do_checkbacktracelevel(void)
}
else
{
char_u *sname = estack_sfile();
char_u *sname = estack_sfile(FALSE);
int max = get_maxbacktrace_level(sname);
if (debug_backtrace_level > max)
@ -365,7 +365,7 @@ do_showbacktrace(char_u *cmd)
int i = 0;
int max;
sname = estack_sfile();
sname = estack_sfile(FALSE);
max = get_maxbacktrace_level(sname);
if (sname != NULL)
{

View File

@ -787,13 +787,15 @@ get_literal_key(char_u **arg, typval_T *tv)
/*
* Allocate a variable for a Dictionary and fill it from "*arg".
* "*arg" points to the "{".
* "literal" is TRUE for #{key: val}
* Return OK or FAIL. Returns NOTDONE for {expr}.
*/
int
eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
{
int evaluate = flags & EVAL_EVALUATE;
int evaluate = evalarg == NULL ? FALSE
: evalarg->eval_flags & EVAL_EVALUATE;
dict_T *d = NULL;
typval_T tvkey;
typval_T tv;
@ -801,7 +803,8 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
dictitem_T *item;
char_u *start = skipwhite(*arg + 1);
char_u buf[NUMBUFLEN];
int vim9script = current_sctx.sc_version == SCRIPT_VERSION_VIM9;
int vim9script = in_vim9script();
int had_comma;
/*
* First check if it's not a curly-braces thing: {expr}.
@ -812,7 +815,7 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
*/
if (!vim9script && *start != '}')
{
if (eval1(&start, &tv, 0) == FAIL) // recursive!
if (eval1(&start, &tv, NULL) == FAIL) // recursive!
return FAIL;
if (*start == '}')
return NOTDONE;
@ -827,12 +830,12 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
tvkey.v_type = VAR_UNKNOWN;
tv.v_type = VAR_UNKNOWN;
*arg = skipwhite(*arg + 1);
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
while (**arg != '}' && **arg != NUL)
{
if ((literal
? get_literal_key(arg, &tvkey)
: eval1(arg, &tvkey, flags)) == FAIL) // recursive!
: eval1(arg, &tvkey, evalarg)) == FAIL) // recursive!
goto failret;
if (**arg != ':')
@ -852,9 +855,15 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
goto failret;
}
}
if (vim9script && (*arg)[1] != NUL && !VIM_ISWHITE((*arg)[1]))
{
semsg(_(e_white_after), ":");
clear_tv(&tvkey);
goto failret;
}
*arg = skipwhite(*arg + 1);
if (eval1(arg, &tv, flags) == FAIL) // recursive!
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
if (eval1(arg, &tv, evalarg) == FAIL) // recursive!
{
if (evaluate)
clear_tv(&tvkey);
@ -882,15 +891,28 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
}
clear_tv(&tvkey);
// the comma must come after the value
had_comma = **arg == ',';
if (had_comma)
{
if (vim9script && (*arg)[1] != NUL && !VIM_ISWHITE((*arg)[1]))
{
semsg(_(e_white_after), ",");
goto failret;
}
*arg = skipwhite(*arg + 1);
}
// the "}" can be on the next line
*arg = skipwhite_and_linebreak(*arg, evalarg);
if (**arg == '}')
break;
if (**arg != ',')
if (!had_comma)
{
if (evaluate)
semsg(_(e_missing_dict_comma), *arg);
goto failret;
}
*arg = skipwhite(*arg + 1);
}
if (**arg != '}')

View File

@ -35,73 +35,7 @@ static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
*/
static digr_T digraphdefault[] =
#ifdef __MINT__
/*
* ATARI digraphs
*/
{{'C', ',', 128}, // ~@ XX
{'u', '"', 129}, // 
{'e', '\'', 130}, // ‚
{'a', '^', 131}, // ƒ
{'a', '"', 132}, // „
{'a', '`', 133}, // …
{'a', '@', 134}, // †
{'c', ',', 135}, // ~G XX
{'e', '^', 136}, // ~H XX
{'e', '"', 137}, // ‰
{'e', '`', 138}, // Š
{'i', '"', 139}, // ‹
{'i', '^', 140}, // Œ
{'i', '`', 141}, // 
{'A', '"', 142}, // Ž
{'A', '@', 143}, // 
{'E', '\'', 144}, // 
{'a', 'e', 145}, // ‘
{'A', 'E', 146}, // ’
{'o', '^', 147}, // “
{'o', '"', 148}, // ”
{'o', '`', 149}, // •
{'u', '^', 150}, // –
{'u', '`', 151}, // —
{'y', '"', 152}, // ˜
{'O', '"', 153}, // ™
{'U', '"', 154}, // š
{'c', '|', 155}, // ›
{'$', '$', 156}, // œ
{'Y', '-', 157}, // ~] XX
{'s', 's', 158}, // ž
{'f', 'f', 159}, // Ÿ
{'a', '\'', 160}, //  
{'i', '\'', 161}, // ¡
{'o', '\'', 162}, // ¢
{'u', '\'', 163}, // £
{'n', '~', 164}, // ¤
{'N', '~', 165}, // ¥
{'a', 'a', 166}, // ¦
{'o', 'o', 167}, // §
{'~', '?', 168}, // ¨
{'-', 'a', 169}, // ©
{'a', '-', 170}, // ª
{'1', '2', 171}, // «
{'1', '4', 172}, // ¬
{'~', '!', 173}, // ­
{'<', '<', 174}, // ®
{'>', '>', 175}, // ¯
{'j', 'u', 230}, // æ
{'o', '/', 237}, // í
{'+', '-', 241}, // ñ
{'>', '=', 242}, // ò
{'<', '=', 243}, // ó
{':', '-', 246}, // ö
{'~', '~', 247}, // ÷
{'~', 'o', 248}, // ø
{'2', '2', 253}, // ý
{NUL, NUL, NUL}
};
#else // !__MINT__
# ifdef HPUX_DIGRAPHS
#ifdef HPUX_DIGRAPHS
/*
* different HPUX digraphs
*/
@ -203,9 +137,9 @@ static digr_T digraphdefault[] =
{NUL, NUL, NUL}
};
# else // !HPUX_DIGRAPHS
#else // !HPUX_DIGRAPHS
# ifdef EBCDIC
# ifdef EBCDIC
/*
* EBCDIC - ISO digraphs
@ -315,8 +249,8 @@ static digr_T digraphdefault[] =
{NUL, NUL, NUL}
};
# else
# ifdef OLD_DIGRAPHS
# else // EBCDIC
# ifdef OLD_DIGRAPHS
/*
* digraphs compatible with Vim 5.x
@ -423,7 +357,7 @@ static digr_T digraphdefault[] =
{'y', '"', 255}, // x XX
{NUL, NUL, NUL}
};
# else // OLD_DIGRAPHS
# else // OLD_DIGRAPHS
/*
* digraphs for Unicode from RFC1345
@ -509,7 +443,7 @@ static digr_T digraphdefault[] =
{'P', 'M', 0x9e},
{'A', 'C', 0x9f},
{'N', 'S', 0xa0},
#define DG_START_LATIN 0xa1
# define DG_START_LATIN 0xa1
{'!', 'I', 0xa1},
{'~', '!', 0xa1}, // ¡ Vim 5.x compatible
{'C', 't', 0xa2},
@ -658,7 +592,7 @@ static digr_T digraphdefault[] =
{'y', ':', 0xff},
{'y', '"', 0xff}, // x XX Vim 5.x compatible
# define USE_UNICODE_DIGRAPHS
# define USE_UNICODE_DIGRAPHS
{'A', '-', 0x0100},
{'a', '-', 0x0101},
@ -833,7 +767,7 @@ static digr_T digraphdefault[] =
{'\'', '0', 0x02da},
{'\'', ';', 0x02db},
{'\'', '"', 0x02dd},
#define DG_START_GREEK 0x0386
# define DG_START_GREEK 0x0386
{'A', '%', 0x0386},
{'E', '%', 0x0388},
{'Y', '%', 0x0389},
@ -915,7 +849,7 @@ static digr_T digraphdefault[] =
{'p', '3', 0x03e1},
{'\'', '%', 0x03f4},
{'j', '3', 0x03f5},
#define DG_START_CYRILLIC 0x0401
# define DG_START_CYRILLIC 0x0401
{'I', 'O', 0x0401},
{'D', '%', 0x0402},
{'G', '%', 0x0403},
@ -1020,7 +954,7 @@ static digr_T digraphdefault[] =
{'c', '3', 0x0481},
{'G', '3', 0x0490},
{'g', '3', 0x0491},
#define DG_START_HEBREW 0x05d0
# define DG_START_HEBREW 0x05d0
{'A', '+', 0x05d0},
{'B', '+', 0x05d1},
{'G', '+', 0x05d2},
@ -1048,7 +982,7 @@ static digr_T digraphdefault[] =
{'R', '+', 0x05e8},
{'S', 'h', 0x05e9},
{'T', '+', 0x05ea},
#define DG_START_ARABIC 0x060c
# define DG_START_ARABIC 0x060c
{',', '+', 0x060c},
{';', '+', 0x061b},
{'?', '+', 0x061f},
@ -1111,7 +1045,7 @@ static digr_T digraphdefault[] =
{'7', 'a', 0x06f7},
{'8', 'a', 0x06f8},
{'9', 'a', 0x06f9},
#define DG_START_LATIN_EXTENDED 0x1e02
# define DG_START_LATIN_EXTENDED 0x1e02
{'B', '.', 0x1e02},
{'b', '.', 0x1e03},
{'B', '_', 0x1e06},
@ -1206,7 +1140,7 @@ static digr_T digraphdefault[] =
{'y', '2', 0x1ef7},
{'Y', '?', 0x1ef8},
{'y', '?', 0x1ef9},
#define DG_START_GREEK_EXTENDED 0x1f00
# define DG_START_GREEK_EXTENDED 0x1f00
{';', '\'', 0x1f00},
{',', '\'', 0x1f01},
{';', '!', 0x1f02},
@ -1215,7 +1149,7 @@ static digr_T digraphdefault[] =
{'?', ',', 0x1f05},
{'!', ':', 0x1f06},
{'?', ':', 0x1f07},
#define DG_START_PUNCTUATION 0x2002
# define DG_START_PUNCTUATION 0x2002
{'1', 'N', 0x2002},
{'1', 'M', 0x2003},
{'3', 'M', 0x2004},
@ -1254,7 +1188,7 @@ static digr_T digraphdefault[] =
{':', 'X', 0x203b},
{'\'', '-', 0x203e},
{'/', 'f', 0x2044},
#define DG_START_SUB_SUPER 0x2070
# define DG_START_SUB_SUPER 0x2070
{'0', 'S', 0x2070},
{'4', 'S', 0x2074},
{'5', 'S', 0x2075},
@ -1283,7 +1217,7 @@ static digr_T digraphdefault[] =
{'=', 's', 0x208c},
{'(', 's', 0x208d},
{')', 's', 0x208e},
#define DG_START_CURRENCY 0x20a4
# define DG_START_CURRENCY 0x20a4
{'L', 'i', 0x20a4},
{'P', 't', 0x20a7},
{'W', '=', 0x20a9},
@ -1291,7 +1225,7 @@ static digr_T digraphdefault[] =
{'E', 'u', 0x20ac}, // euro
{'=', 'R', 0x20bd}, // rouble
{'=', 'P', 0x20bd}, // rouble
#define DG_START_OTHER1 0x2103
# define DG_START_OTHER1 0x2103
{'o', 'C', 0x2103},
{'c', 'o', 0x2105},
{'o', 'F', 0x2109},
@ -1314,7 +1248,7 @@ static digr_T digraphdefault[] =
{'3', '8', 0x215c},
{'5', '8', 0x215d},
{'7', '8', 0x215e},
#define DG_START_ROMAN 0x2160
# define DG_START_ROMAN 0x2160
{'1', 'R', 0x2160},
{'2', 'R', 0x2161},
{'3', 'R', 0x2162},
@ -1339,7 +1273,7 @@ static digr_T digraphdefault[] =
{'a', 'r', 0x2179},
{'b', 'r', 0x217a},
{'c', 'r', 0x217b},
#define DG_START_ARROWS 0x2190
# define DG_START_ARROWS 0x2190
{'<', '-', 0x2190},
{'-', '!', 0x2191},
{'-', '>', 0x2192},
@ -1349,7 +1283,7 @@ static digr_T digraphdefault[] =
{'<', '=', 0x21d0},
{'=', '>', 0x21d2},
{'=', '=', 0x21d4},
#define DG_START_MATH 0x2200
# define DG_START_MATH 0x2200
{'F', 'A', 0x2200},
{'d', 'P', 0x2202},
{'T', 'E', 0x2203},
@ -1407,7 +1341,7 @@ static digr_T digraphdefault[] =
{'.', 'P', 0x22c5},
{':', '3', 0x22ee},
{'.', '3', 0x22ef},
#define DG_START_TECHNICAL 0x2302
# define DG_START_TECHNICAL 0x2302
{'E', 'h', 0x2302},
{'<', '7', 0x2308},
{'>', '7', 0x2309},
@ -1420,7 +1354,7 @@ static digr_T digraphdefault[] =
{'I', 'l', 0x2321},
{'<', '/', 0x2329},
{'/', '>', 0x232a},
#define DG_START_OTHER2 0x2423
# define DG_START_OTHER2 0x2423
{'V', 's', 0x2423},
{'1', 'h', 0x2440},
{'3', 'h', 0x2441},
@ -1439,7 +1373,7 @@ static digr_T digraphdefault[] =
{'7', '.', 0x248e},
{'8', '.', 0x248f},
{'9', '.', 0x2490},
#define DG_START_DRAWING 0x2500
# define DG_START_DRAWING 0x2500
{'h', 'h', 0x2500},
{'H', 'H', 0x2501},
{'v', 'v', 0x2502},
@ -1490,7 +1424,7 @@ static digr_T digraphdefault[] =
{'V', 'H', 0x254b},
{'F', 'D', 0x2571},
{'B', 'D', 0x2572},
#define DG_START_BLOCK 0x2580
# define DG_START_BLOCK 0x2580
{'T', 'B', 0x2580},
{'L', 'B', 0x2584},
{'F', 'B', 0x2588},
@ -1499,7 +1433,7 @@ static digr_T digraphdefault[] =
{'.', 'S', 0x2591},
{':', 'S', 0x2592},
{'?', 'S', 0x2593},
#define DG_START_SHAPES 0x25a0
# define DG_START_SHAPES 0x25a0
{'f', 'S', 0x25a0},
{'O', 'S', 0x25a1},
{'R', 'O', 0x25a2},
@ -1533,7 +1467,7 @@ static digr_T digraphdefault[] =
{'I', 'c', 0x25d9},
{'F', 'd', 0x25e2},
{'B', 'd', 0x25e3},
#define DG_START_SYMBOLS 0x2605
# define DG_START_SYMBOLS 0x2605
{'*', '2', 0x2605},
{'*', '1', 0x2606},
{'<', 'H', 0x261c},
@ -1553,11 +1487,11 @@ static digr_T digraphdefault[] =
{'M', 'b', 0x266d},
{'M', 'x', 0x266e},
{'M', 'X', 0x266f},
#define DG_START_DINGBATS 0x2713
# define DG_START_DINGBATS 0x2713
{'O', 'K', 0x2713},
{'X', 'X', 0x2717},
{'-', 'X', 0x2720},
#define DG_START_CJK_SYMBOLS 0x3000
# define DG_START_CJK_SYMBOLS 0x3000
{'I', 'S', 0x3000},
{',', '_', 0x3001},
{'.', '_', 0x3002},
@ -1581,7 +1515,7 @@ static digr_T digraphdefault[] =
{'(', 'I', 0x3016},
{')', 'I', 0x3017},
{'-', '?', 0x301c},
#define DG_START_HIRAGANA 0x3041
# define DG_START_HIRAGANA 0x3041
{'A', '5', 0x3041},
{'a', '5', 0x3042},
{'I', '5', 0x3043},
@ -1670,7 +1604,7 @@ static digr_T digraphdefault[] =
{'0', '5', 0x309c},
{'*', '5', 0x309d},
{'+', '5', 0x309e},
#define DG_START_KATAKANA 0x30a1
# define DG_START_KATAKANA 0x30a1
{'a', '6', 0x30a1},
{'A', '6', 0x30a2},
{'i', '6', 0x30a3},
@ -1765,7 +1699,7 @@ static digr_T digraphdefault[] =
{'-', '6', 0x30fc},
{'*', '6', 0x30fd},
{'+', '6', 0x30fe},
#define DG_START_BOPOMOFO 0x3105
# define DG_START_BOPOMOFO 0x3105
{'b', '4', 0x3105},
{'p', '4', 0x3106},
{'m', '4', 0x3107},
@ -1805,7 +1739,7 @@ static digr_T digraphdefault[] =
{'v', '4', 0x312a},
{'n', 'G', 0x312b},
{'g', 'n', 0x312c},
#define DG_START_OTHER3 0x3220
# define DG_START_OTHER3 0x3220
{'1', 'c', 0x3220},
{'2', 'c', 0x3221},
{'3', 'c', 0x3222},
@ -1826,10 +1760,9 @@ static digr_T digraphdefault[] =
{NUL, NUL, NUL}
};
# endif // OLD_DIGRAPHS
# endif // EBCDIC
# endif // !HPUX_DIGRAPHS
#endif // !__MINT__
# endif // OLD_DIGRAPHS
# endif // EBCDIC
#endif // !HPUX_DIGRAPHS
/*
* handle digraphs after typing a character

View File

@ -967,7 +967,7 @@ win_line(
for (;;)
{
#if defined(FEAT_CONCEAL) || defined(FEAT_SEARCH_EXTRA)
int has_match_conc = 0; // match wants to conceal
int has_match_conc = 0; // match wants to conceal
#endif
#ifdef FEAT_CONCEAL
int did_decrement_ptr = FALSE;
@ -1334,6 +1334,11 @@ win_line(
&screen_search_hl, &has_match_conc,
&match_conc, did_line_attr, lcs_eol_one);
ptr = line + v; // "line" may have been changed
// Do not allow a conceal over EOL otherwise EOL will be missed
// and bad things happen.
if (*ptr == NUL)
has_match_conc = 0;
}
#endif
@ -2353,13 +2358,14 @@ win_line(
{
char_attr = conceal_attr;
if ((prev_syntax_id != syntax_seqnr || has_match_conc > 1)
&& (syn_get_sub_char() != NUL || match_conc
|| wp->w_p_cole == 1)
&& (syn_get_sub_char() != NUL
|| (has_match_conc && match_conc)
|| wp->w_p_cole == 1)
&& wp->w_p_cole != 3)
{
// First time at this concealed item: display one
// character.
if (match_conc)
if (has_match_conc && match_conc)
c = match_conc;
else if (syn_get_sub_char() != NUL)
c = syn_get_sub_char();

File diff suppressed because it is too large Load Diff

View File

@ -347,6 +347,52 @@ ret_first_arg(int argcount, type_T **argtypes)
return &t_void;
}
/*
* Used for getqflist(): returns list if there is no argument, dict if there is
* one.
*/
static type_T *
ret_list_or_dict_0(int argcount, type_T **argtypes UNUSED)
{
if (argcount > 0)
return &t_dict_any;
return &t_list_dict_any;
}
/*
* Used for getloclist(): returns list if there is one argument, dict if there
* are two.
*/
static type_T *
ret_list_or_dict_1(int argcount, type_T **argtypes UNUSED)
{
if (argcount > 1)
return &t_dict_any;
return &t_list_dict_any;
}
static type_T *
ret_argv(int argcount, type_T **argtypes UNUSED)
{
// argv() returns list of strings
if (argcount == 0)
return &t_list_string;
// argv(0) returns a string, but argv(-1] returns a list
return &t_any;
}
static type_T *
ret_remove(int argcount UNUSED, type_T **argtypes)
{
if (argtypes[0]->tt_type == VAR_LIST
|| argtypes[0]->tt_type == VAR_DICT)
return argtypes[0]->tt_member;
if (argtypes[0]->tt_type == VAR_BLOB)
return &t_number;
return &t_any;
}
static type_T *ret_f_function(int argcount, type_T **argtypes);
/*
@ -417,14 +463,14 @@ static funcentry_T global_functions[] =
{
{"abs", 1, 1, FEARG_1, ret_any, FLOAT_FUNC(f_abs)},
{"acos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_acos)},
{"add", 2, 2, FEARG_1, ret_any, f_add},
{"add", 2, 2, FEARG_1, ret_first_arg, f_add},
{"and", 2, 2, FEARG_1, ret_number, f_and},
{"append", 2, 2, FEARG_LAST, ret_number, f_append},
{"appendbufline", 3, 3, FEARG_LAST, ret_number, f_appendbufline},
{"append", 2, 2, FEARG_2, ret_number, f_append},
{"appendbufline", 3, 3, FEARG_3, ret_number, f_appendbufline},
{"argc", 0, 1, 0, ret_number, f_argc},
{"argidx", 0, 0, 0, ret_number, f_argidx},
{"arglistid", 0, 2, 0, ret_number, f_arglistid},
{"argv", 0, 2, 0, ret_any, f_argv},
{"argv", 0, 2, 0, ret_argv, f_argv},
{"asin", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_asin)},
{"assert_beeps", 1, 2, FEARG_1, ret_number, f_assert_beeps},
{"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal},
@ -509,7 +555,7 @@ static funcentry_T global_functions[] =
{"complete_check", 0, 0, 0, ret_number, f_complete_check},
{"complete_info", 0, 1, FEARG_1, ret_dict_any, f_complete_info},
{"confirm", 1, 4, FEARG_1, ret_number, f_confirm},
{"copy", 1, 1, FEARG_1, ret_any, f_copy},
{"copy", 1, 1, FEARG_1, ret_first_arg, f_copy},
{"cos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cos)},
{"cosh", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cosh)},
{"count", 2, 4, FEARG_1, ret_number, f_count},
@ -522,7 +568,7 @@ static funcentry_T global_functions[] =
NULL
#endif
},
{"deepcopy", 1, 2, FEARG_1, ret_any, f_deepcopy},
{"deepcopy", 1, 2, FEARG_1, ret_first_arg, f_deepcopy},
{"delete", 1, 2, FEARG_1, ret_number, f_delete},
{"deletebufline", 2, 3, FEARG_1, ret_number, f_deletebufline},
{"did_filetype", 0, 0, 0, ret_number, f_did_filetype},
@ -541,12 +587,12 @@ static funcentry_T global_functions[] =
{"exp", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_exp)},
{"expand", 1, 3, FEARG_1, ret_any, f_expand},
{"expandcmd", 1, 1, FEARG_1, ret_string, f_expandcmd},
{"extend", 2, 3, FEARG_1, ret_any, f_extend},
{"extend", 2, 3, FEARG_1, ret_first_arg, f_extend},
{"feedkeys", 1, 2, FEARG_1, ret_void, f_feedkeys},
{"file_readable", 1, 1, FEARG_1, ret_number, f_filereadable}, // obsolete
{"filereadable", 1, 1, FEARG_1, ret_number, f_filereadable},
{"filewritable", 1, 1, FEARG_1, ret_number, f_filewritable},
{"filter", 2, 2, FEARG_1, ret_any, f_filter},
{"filter", 2, 2, FEARG_1, ret_first_arg, f_filter},
{"finddir", 1, 3, FEARG_1, ret_string, f_finddir},
{"findfile", 1, 3, FEARG_1, ret_string, f_findfile},
{"flatten", 1, 2, FEARG_1, ret_list_any, f_flatten},
@ -565,7 +611,7 @@ static funcentry_T global_functions[] =
{"function", 1, 3, FEARG_1, ret_f_function, f_function},
{"garbagecollect", 0, 1, 0, ret_void, f_garbagecollect},
{"get", 2, 3, FEARG_1, ret_any, f_get},
{"getbufinfo", 0, 1, 0, ret_list_dict_any, f_getbufinfo},
{"getbufinfo", 0, 1, FEARG_1, ret_list_dict_any, f_getbufinfo},
{"getbufline", 2, 3, FEARG_1, ret_list_string, f_getbufline},
{"getbufvar", 2, 3, FEARG_1, ret_any, f_getbufvar},
{"getchangelist", 0, 1, FEARG_1, ret_list_any, f_getchangelist},
@ -588,13 +634,13 @@ static funcentry_T global_functions[] =
{"getimstatus", 0, 0, 0, ret_number, f_getimstatus},
{"getjumplist", 0, 2, FEARG_1, ret_list_any, f_getjumplist},
{"getline", 1, 2, FEARG_1, ret_f_getline, f_getline},
{"getloclist", 1, 2, 0, ret_list_dict_any, f_getloclist},
{"getloclist", 1, 2, 0, ret_list_or_dict_1, f_getloclist},
{"getmarklist", 0, 1, FEARG_1, ret_list_dict_any, f_getmarklist},
{"getmatches", 0, 1, 0, ret_list_dict_any, f_getmatches},
{"getmousepos", 0, 0, 0, ret_dict_number, f_getmousepos},
{"getpid", 0, 0, 0, ret_number, f_getpid},
{"getpos", 1, 1, FEARG_1, ret_list_number, f_getpos},
{"getqflist", 0, 1, 0, ret_list_dict_any, f_getqflist},
{"getqflist", 0, 1, 0, ret_list_or_dict_0, f_getqflist},
{"getreg", 0, 3, FEARG_1, ret_string, f_getreg},
{"getreginfo", 0, 1, FEARG_1, ret_dict_any, f_getreginfo},
{"getregtype", 0, 1, FEARG_1, ret_string, f_getregtype},
@ -632,7 +678,7 @@ static funcentry_T global_functions[] =
{"inputrestore", 0, 0, 0, ret_number, f_inputrestore},
{"inputsave", 0, 0, 0, ret_number, f_inputsave},
{"inputsecret", 1, 2, FEARG_1, ret_string, f_inputsecret},
{"insert", 2, 3, FEARG_1, ret_any, f_insert},
{"insert", 2, 3, FEARG_1, ret_first_arg, f_insert},
{"interrupt", 0, 0, 0, ret_void, f_interrupt},
{"invert", 1, 1, FEARG_1, ret_number, f_invert},
{"isdirectory", 1, 1, FEARG_1, ret_number, f_isdirectory},
@ -791,12 +837,12 @@ static funcentry_T global_functions[] =
{"remote_peek", 1, 2, FEARG_1, ret_number, f_remote_peek},
{"remote_read", 1, 2, FEARG_1, ret_string, f_remote_read},
{"remote_send", 2, 3, FEARG_1, ret_string, f_remote_send},
{"remote_startserver", 1, 1, FEARG_1, ret_void, f_remote_startserver},
{"remove", 2, 3, FEARG_1, ret_any, f_remove},
{"remote_startserver", 1, 1, FEARG_1, ret_void, f_remote_startserver},
{"remove", 2, 3, FEARG_1, ret_remove, f_remove},
{"rename", 2, 2, FEARG_1, ret_number, f_rename},
{"repeat", 2, 2, FEARG_1, ret_any, f_repeat},
{"repeat", 2, 2, FEARG_1, ret_first_arg, f_repeat},
{"resolve", 1, 1, FEARG_1, ret_string, f_resolve},
{"reverse", 1, 1, FEARG_1, ret_any, f_reverse},
{"reverse", 1, 1, FEARG_1, ret_first_arg, f_reverse},
{"round", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_round)},
{"rubyeval", 1, 1, FEARG_1, ret_any,
#ifdef FEAT_RUBY
@ -1145,7 +1191,9 @@ internal_func_ret_type(int idx, int argcount, type_T **argtypes)
/*
* Check the argument count to use for internal function "idx".
* Returns OK or FAIL;
* Returns -1 for failure, 0 if no method base accepted, 1 if method base is
* first argument, 2 if method base is second argument, etc. 9 if method base
* is last argument.
*/
int
check_internal_func(int idx, int argcount)
@ -1158,14 +1206,14 @@ check_internal_func(int idx, int argcount)
else if (argcount > global_functions[idx].f_max_argc)
res = FCERR_TOOMANY;
else
return OK;
return global_functions[idx].f_argtype;
name = internal_func_name(idx);
if (res == FCERR_TOOMANY)
semsg(_(e_toomanyarg), name);
else
semsg(_(e_toofewarg), name);
return FAIL;
return -1;
}
int
@ -2084,7 +2132,7 @@ f_eval(typval_T *argvars, typval_T *rettv)
s = skipwhite(s);
p = s;
if (s == NULL || eval1(&s, rettv, EVAL_EVALUATE) == FAIL)
if (s == NULL || eval1(&s, rettv, &EVALARG_EVALUATE) == FAIL)
{
if (p != NULL && !aborting())
semsg(_(e_invexpr2), p);
@ -2093,7 +2141,7 @@ f_eval(typval_T *argvars, typval_T *rettv)
rettv->vval.v_number = 0;
}
else if (*s != NUL)
emsg(_(e_trailing));
semsg(_(e_trailing_arg), s);
}
/*
@ -2300,7 +2348,7 @@ f_exists(typval_T *argvars, typval_T *rettv)
}
else if (*p == '&' || *p == '+') // option
{
n = (get_option_tv(&p, NULL, TRUE) == OK);
n = (eval_option(&p, NULL, TRUE) == OK);
if (*skipwhite(p) != NUL)
n = FALSE; // trailing garbage
}
@ -5065,7 +5113,7 @@ f_islocked(typval_T *argvars, typval_T *rettv)
if (end != NULL && lv.ll_name != NULL)
{
if (*end != NUL)
emsg(_(e_trailing));
semsg(_(e_trailing_arg), end);
else
{
if (lv.ll_tv == NULL)
@ -6272,7 +6320,7 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
list = (list_T *)get_reg_contents(regname, GREG_EXPR_SRC | GREG_LIST);
if (list == NULL)
return;
dict_add_list(dict, "regcontents", list);
(void)dict_add_list(dict, "regcontents", list);
buf[0] = NUL;
buf[1] = NUL;
@ -6285,12 +6333,12 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
reglen + 1);
break;
}
dict_add_string(dict, (char *)"regtype", buf);
(void)dict_add_string(dict, (char *)"regtype", buf);
buf[0] = get_register_name(get_unname_register());
buf[1] = NUL;
if (regname == '"')
dict_add_string(dict, (char *)"points_to", buf);
(void)dict_add_string(dict, (char *)"points_to", buf);
else
{
dictitem_T *item = dictitem_alloc((char_u *)"isunnamed");
@ -6300,7 +6348,7 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
item->di_tv.v_type = VAR_SPECIAL;
item->di_tv.vval.v_number = regname == buf[0]
? VVAL_TRUE : VVAL_FALSE;
dict_add(dict, item);
(void)dict_add(dict, item);
}
}
}
@ -7811,9 +7859,9 @@ f_split(typval_T *argvars, typval_T *rettv)
pat = (char_u *)"[\\x01- ]\\+";
if (rettv_list_alloc(rettv) == FAIL)
return;
goto theend;
if (typeerr)
return;
goto theend;
regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
if (regmatch.regprog != NULL)
@ -7850,6 +7898,7 @@ f_split(typval_T *argvars, typval_T *rettv)
vim_regfree(regmatch.regprog);
}
theend:
p_cpo = save_cpo;
}

View File

@ -435,7 +435,7 @@ eval_spell_expr(char_u *badword, char_u *expr)
if (p_verbose == 0)
++emsg_off;
if (eval1(&p, &rettv, EVAL_EVALUATE) == OK)
if (eval1(&p, &rettv, &EVALARG_EVALUATE) == OK)
{
if (rettv.v_type != VAR_LIST)
clear_tv(&rettv);
@ -592,7 +592,7 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
p = skiptowhite(marker);
if (*skipwhite(p) != NUL && *skipwhite(p) != '"')
{
emsg(_(e_trailing));
semsg(_(e_trailing_arg), p);
return NULL;
}
*p = NUL;
@ -698,12 +698,13 @@ ex_let(exarg_T *eap)
int i;
int var_count = 0;
int semicolon = 0;
char_u op[2];
char_u op[4];
char_u *argend;
int first = TRUE;
int concat;
int has_assign;
int flags = eap->cmdidx == CMD_const ? LET_IS_CONST : 0;
int vim9script = in_vim9script();
// detect Vim9 assignment without ":let" or ":const"
if (eap->arg == eap->cmd)
@ -725,11 +726,11 @@ ex_let(exarg_T *eap)
// ":let" without "=": list variables
if (*arg == '[')
emsg(_(e_invarg));
else if (expr[0] == '.')
emsg(_("E985: .= is not supported with script version 2"));
else if (expr[0] == '.' && expr[1] == '=')
emsg(_("E985: .= is not supported with script version >= 2"));
else if (!ends_excmd2(eap->cmd, arg))
{
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
if (vim9script)
{
// Vim9 declaration ":let var: type"
arg = vim9_declare_scriptvar(eap, arg);
@ -774,7 +775,8 @@ ex_let(exarg_T *eap)
}
else
{
int eval_flags;
evalarg_T evalarg;
int len = 1;
rettv.v_type = VAR_UNKNOWN;
i = FAIL;
@ -787,29 +789,49 @@ ex_let(exarg_T *eap)
if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
{
op[0] = *expr; // +=, -=, *=, /=, %= or .=
++len;
if (expr[0] == '.' && expr[1] == '.') // ..=
{
++expr;
++len;
}
}
expr = skipwhite(expr + 2);
expr += 2;
}
else
expr = skipwhite(expr + 1);
++expr;
if (vim9script && (!VIM_ISWHITE(*argend) || !VIM_ISWHITE(*expr)))
{
vim_strncpy(op, expr - len, len);
semsg(_(e_white_both), op);
i = FAIL;
}
expr = skipwhite(expr);
if (eap->skip)
++emsg_skip;
eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
i = eval0(expr, &rettv, &eap->nextcmd, eval_flags);
CLEAR_FIELD(evalarg);
evalarg.eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
if (getline_equal(eap->getline, eap->cookie, getsourceline))
{
evalarg.eval_getline = eap->getline;
evalarg.eval_cookie = eap->cookie;
}
i = eval0(expr, &rettv, eap, &evalarg);
if (eap->skip)
--emsg_skip;
clear_evalarg(&evalarg, eap);
}
if (eap->skip)
{
if (i != FAIL)
clear_tv(&rettv);
--emsg_skip;
}
else if (i != FAIL)
{
(void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
flags, op);
flags, op);
clear_tv(&rettv);
}
}
@ -985,13 +1007,13 @@ skip_var_one(char_u *arg, int include_type)
return arg + 2;
end = find_name_end(*arg == '$' || *arg == '&' ? arg + 1 : arg,
NULL, NULL, FNE_INCL_BR | FNE_CHECK_START);
if (include_type && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
if (include_type && in_vim9script())
{
// "a: type" is declaring variable "a" with a type, not "a:".
if (end == arg + 2 && end[-1] == ':')
--end;
if (*end == ':')
end = skip_type(skipwhite(end + 1));
end = skip_type(skipwhite(end + 1), FALSE);
}
return end;
}
@ -1091,7 +1113,7 @@ list_arg_vars(exarg_T *eap, char_u *arg, int *first)
if (!VIM_ISWHITE(*arg) && !ends_excmd(*arg))
{
emsg_severe = TRUE;
emsg(_(e_trailing));
semsg(_(e_trailing_arg), arg);
break;
}
}
@ -1116,14 +1138,14 @@ list_arg_vars(exarg_T *eap, char_u *arg, int *first)
{
if (tofree != NULL)
name = tofree;
if (get_var_tv(name, len, &tv, NULL, TRUE, FALSE) == FAIL)
if (eval_variable(name, len, &tv, NULL, TRUE, FALSE) == FAIL)
error = TRUE;
else
{
// handle d.key, l[idx], f(expr)
arg_subsc = arg;
if (handle_subscript(&arg, &tv, EVAL_EVALUATE, TRUE,
name, &name) == FAIL)
if (handle_subscript(&arg, &tv, &EVALARG_EVALUATE, TRUE)
== FAIL)
error = TRUE;
else
{
@ -1204,8 +1226,7 @@ ex_let_one(
emsg(_("E996: Cannot lock an environment variable"));
return NULL;
}
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
&& (flags & LET_NO_COMMAND) == 0)
if (in_vim9script() && (flags & LET_NO_COMMAND) == 0)
{
vim9_declare_error(arg);
return NULL;
@ -1468,7 +1489,7 @@ ex_unletlock(
if (name_end != NULL)
{
emsg_severe = TRUE;
emsg(_(e_trailing));
semsg(_(e_trailing_arg), name_end);
}
if (!(eap->skip || error))
clear_lval(&lv);
@ -1568,8 +1589,7 @@ do_unlet(char_u *name, int forceit)
dict_T *d;
dictitem_T *di;
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
&& check_vim9_unlet(name) == FAIL)
if (in_vim9script() && check_vim9_unlet(name) == FAIL)
return FAIL;
ht = find_var_ht(name, &varname);
@ -2357,7 +2377,7 @@ set_cmdarg(exarg_T *eap, char_u *oldarg)
* Return OK or FAIL. If OK is returned "rettv" must be cleared.
*/
int
get_var_tv(
eval_variable(
char_u *name,
int len, // length of "name"
typval_T *rettv, // NULL when only checking existence
@ -2367,6 +2387,7 @@ get_var_tv(
{
int ret = OK;
typval_T *tv = NULL;
int foundFunc = FALSE;
dictitem_T *v;
int cc;
@ -2383,8 +2404,7 @@ get_var_tv(
*dip = v;
}
if (tv == NULL && (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|| STRNCMP(name, "s:", 2) == 0))
if (tv == NULL && (in_vim9script() || STRNCMP(name, "s:", 2) == 0))
{
imported_T *import;
char_u *p = STRNCMP(name, "s:", 2) == 0 ? name + 2 : name;
@ -2394,21 +2414,36 @@ get_var_tv(
// imported variable from another script
if (import != NULL)
{
scriptitem_T *si = SCRIPT_ITEM(import->imp_sid);
svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data)
if (import->imp_funcname != NULL)
{
foundFunc = TRUE;
if (rettv != NULL)
{
rettv->v_type = VAR_FUNC;
rettv->vval.v_string = vim_strsave(import->imp_funcname);
}
}
else
{
scriptitem_T *si = SCRIPT_ITEM(import->imp_sid);
svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data)
+ import->imp_var_vals_idx;
tv = sv->sv_tv;
tv = sv->sv_tv;
}
}
}
if (tv == NULL)
if (!foundFunc)
{
if (rettv != NULL && verbose)
semsg(_(e_undefvar), name);
ret = FAIL;
if (tv == NULL)
{
if (rettv != NULL && verbose)
semsg(_(e_undefvar), name);
ret = FAIL;
}
else if (rettv != NULL)
copy_tv(tv, rettv);
}
else if (rettv != NULL)
copy_tv(tv, rettv);
name[len] = cc;
@ -2610,7 +2645,7 @@ find_var_ht(char_u *name, char_u **varname)
return ht; // local variable
// in Vim9 script items at the script level are script-local
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
if (in_vim9script())
{
ht = get_script_local_ht();
if (ht != NULL)
@ -2844,7 +2879,7 @@ set_var(
typval_T *tv,
int copy) // make copy of value in "tv"
{
set_var_const(name, NULL, tv, copy, 0);
set_var_const(name, NULL, tv, copy, LET_NO_COMMAND);
}
/*
@ -2873,7 +2908,7 @@ set_var_const(
}
is_script_local = ht == get_script_local_ht();
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
if (in_vim9script()
&& !is_script_local
&& (flags & LET_NO_COMMAND) == 0
&& name[1] == ':')
@ -2902,8 +2937,7 @@ set_var_const(
return;
}
if (is_script_local
&& current_sctx.sc_version == SCRIPT_VERSION_VIM9)
if (is_script_local && in_vim9script())
{
if ((flags & LET_NO_COMMAND) == 0)
{
@ -2999,7 +3033,7 @@ set_var_const(
if (flags & LET_IS_CONST)
di->di_flags |= DI_FLAGS_LOCK;
if (is_script_local && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
if (is_script_local && in_vim9script())
{
scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
@ -3198,7 +3232,7 @@ getwinvar(
done = TRUE;
}
}
else if (get_option_tv(&varname, rettv, 1) == OK)
else if (eval_option(&varname, rettv, 1) == OK)
// window-local-option
done = TRUE;
}
@ -3334,12 +3368,11 @@ var_exists(char_u *var)
{
if (tofree != NULL)
name = tofree;
n = (get_var_tv(name, len, &tv, NULL, FALSE, TRUE) == OK);
n = (eval_variable(name, len, &tv, NULL, FALSE, TRUE) == OK);
if (n)
{
// handle d.key, l[idx], f(expr)
n = (handle_subscript(&var, &tv, EVAL_EVALUATE,
FALSE, name, &name) == OK);
n = (handle_subscript(&var, &tv, &EVALARG_EVALUATE, FALSE) == OK);
if (n)
clear_tv(&tv);
}
@ -3365,8 +3398,7 @@ static char_u *redir_varname = NULL;
int
var_redir_start(char_u *name, int append)
{
int save_emsg;
int err;
int called_emsg_before;
typval_T tv;
// Catch a bad name early.
@ -3399,9 +3431,9 @@ var_redir_start(char_u *name, int append)
clear_lval(redir_lval);
if (redir_endp != NULL && *redir_endp != NUL)
// Trailing characters are present after the variable name
emsg(_(e_trailing));
semsg(_(e_trailing_arg), redir_endp);
else
emsg(_(e_invarg));
semsg(_(e_invarg2), name);
redir_endp = NULL; // don't store a value, only cleanup
var_redir_stop();
return FAIL;
@ -3409,8 +3441,7 @@ var_redir_start(char_u *name, int append)
// check if we can write to the variable: set it to or append an empty
// string
save_emsg = did_emsg;
did_emsg = FALSE;
called_emsg_before = called_emsg;
tv.v_type = VAR_STRING;
tv.vval.v_string = (char_u *)"";
if (append)
@ -3418,9 +3449,7 @@ var_redir_start(char_u *name, int append)
else
set_var_lval(redir_lval, redir_endp, &tv, TRUE, 0, (char_u *)"=");
clear_lval(redir_lval);
err = did_emsg;
did_emsg |= save_emsg;
if (err)
if (called_emsg > called_emsg_before)
{
redir_endp = NULL; // don't store a value, only cleanup
var_redir_stop();
@ -3602,7 +3631,7 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
done = TRUE;
}
}
else if (get_option_tv(&varname, rettv, TRUE) == OK)
else if (eval_option(&varname, rettv, TRUE) == OK)
// buffer-local-option
done = TRUE;
@ -3833,6 +3862,27 @@ set_callback(callback_T *dest, callback_T *src)
dest->cb_partial = src->cb_partial;
}
/*
* Copy callback from "src" to "dest", incrementing the refcounts.
*/
void
copy_callback(callback_T *dest, callback_T *src)
{
dest->cb_partial = src->cb_partial;
if (dest->cb_partial != NULL)
{
dest->cb_name = src->cb_name;
dest->cb_free_name = FALSE;
++dest->cb_partial->pt_refcount;
}
else
{
dest->cb_name = vim_strsave(src->cb_name);
dest->cb_free_name = TRUE;
func_ref(src->cb_name);
}
}
/*
* Unref/free "callback" returned by get_callback() or set_callback().
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -996,505 +996,3 @@ ex_checktime(exarg_T *eap)
}
no_check_timestamps = save_no_check_timestamps;
}
#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
&& (defined(FEAT_EVAL) || defined(FEAT_MULTI_LANG))
# define HAVE_GET_LOCALE_VAL
static char_u *
get_locale_val(int what)
{
char_u *loc;
// Obtain the locale value from the libraries.
loc = (char_u *)setlocale(what, NULL);
# ifdef MSWIN
if (loc != NULL)
{
char_u *p;
// setocale() returns something like "LC_COLLATE=<name>;LC_..." when
// one of the values (e.g., LC_CTYPE) differs.
p = vim_strchr(loc, '=');
if (p != NULL)
{
loc = ++p;
while (*p != NUL) // remove trailing newline
{
if (*p < ' ' || *p == ';')
{
*p = NUL;
break;
}
++p;
}
}
}
# endif
return loc;
}
#endif
#ifdef MSWIN
/*
* On MS-Windows locale names are strings like "German_Germany.1252", but
* gettext expects "de". Try to translate one into another here for a few
* supported languages.
*/
static char_u *
gettext_lang(char_u *name)
{
int i;
static char *(mtable[]) = {
"afrikaans", "af",
"czech", "cs",
"dutch", "nl",
"german", "de",
"english_united kingdom", "en_GB",
"spanish", "es",
"french", "fr",
"italian", "it",
"japanese", "ja",
"korean", "ko",
"norwegian", "no",
"polish", "pl",
"russian", "ru",
"slovak", "sk",
"swedish", "sv",
"ukrainian", "uk",
"chinese_china", "zh_CN",
"chinese_taiwan", "zh_TW",
NULL};
for (i = 0; mtable[i] != NULL; i += 2)
if (STRNICMP(mtable[i], name, STRLEN(mtable[i])) == 0)
return (char_u *)mtable[i + 1];
return name;
}
#endif
#if defined(FEAT_MULTI_LANG) || defined(PROTO)
/*
* Return TRUE when "lang" starts with a valid language name.
* Rejects NULL, empty string, "C", "C.UTF-8" and others.
*/
static int
is_valid_mess_lang(char_u *lang)
{
return lang != NULL && ASCII_ISALPHA(lang[0]) && ASCII_ISALPHA(lang[1]);
}
/*
* Obtain the current messages language. Used to set the default for
* 'helplang'. May return NULL or an empty string.
*/
char_u *
get_mess_lang(void)
{
char_u *p;
# ifdef HAVE_GET_LOCALE_VAL
# if defined(LC_MESSAGES)
p = get_locale_val(LC_MESSAGES);
# else
// This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
// may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME
// and LC_MONETARY may be set differently for a Japanese working in the
// US.
p = get_locale_val(LC_COLLATE);
# endif
# else
p = mch_getenv((char_u *)"LC_ALL");
if (!is_valid_mess_lang(p))
{
p = mch_getenv((char_u *)"LC_MESSAGES");
if (!is_valid_mess_lang(p))
p = mch_getenv((char_u *)"LANG");
}
# endif
# ifdef MSWIN
p = gettext_lang(p);
# endif
return is_valid_mess_lang(p) ? p : NULL;
}
#endif
// Complicated #if; matches with where get_mess_env() is used below.
#if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
&& defined(LC_MESSAGES))) \
|| ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
&& !defined(LC_MESSAGES))
/*
* Get the language used for messages from the environment.
*/
static char_u *
get_mess_env(void)
{
char_u *p;
p = mch_getenv((char_u *)"LC_ALL");
if (p == NULL || *p == NUL)
{
p = mch_getenv((char_u *)"LC_MESSAGES");
if (p == NULL || *p == NUL)
{
p = mch_getenv((char_u *)"LANG");
if (p != NULL && VIM_ISDIGIT(*p))
p = NULL; // ignore something like "1043"
# ifdef HAVE_GET_LOCALE_VAL
if (p == NULL || *p == NUL)
p = get_locale_val(LC_CTYPE);
# endif
}
}
return p;
}
#endif
#if defined(FEAT_EVAL) || defined(PROTO)
/*
* Set the "v:lang" variable according to the current locale setting.
* Also do "v:lc_time"and "v:ctype".
*/
void
set_lang_var(void)
{
char_u *loc;
# ifdef HAVE_GET_LOCALE_VAL
loc = get_locale_val(LC_CTYPE);
# else
// setlocale() not supported: use the default value
loc = (char_u *)"C";
# endif
set_vim_var_string(VV_CTYPE, loc, -1);
// When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
// back to LC_CTYPE if it's empty.
# if defined(HAVE_GET_LOCALE_VAL) && defined(LC_MESSAGES)
loc = get_locale_val(LC_MESSAGES);
# else
loc = get_mess_env();
# endif
set_vim_var_string(VV_LANG, loc, -1);
# ifdef HAVE_GET_LOCALE_VAL
loc = get_locale_val(LC_TIME);
# endif
set_vim_var_string(VV_LC_TIME, loc, -1);
# ifdef HAVE_GET_LOCALE_VAL
loc = get_locale_val(LC_COLLATE);
# else
// setlocale() not supported: use the default value
loc = (char_u *)"C";
# endif
set_vim_var_string(VV_COLLATE, loc, -1);
}
#endif
#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
/*
* ":language": Set the language (locale).
*/
void
ex_language(exarg_T *eap)
{
char *loc;
char_u *p;
char_u *name;
int what = LC_ALL;
char *whatstr = "";
# ifdef LC_MESSAGES
# define VIM_LC_MESSAGES LC_MESSAGES
# else
# define VIM_LC_MESSAGES 6789
# endif
name = eap->arg;
// Check for "messages {name}", "ctype {name}" or "time {name}" argument.
// Allow abbreviation, but require at least 3 characters to avoid
// confusion with a two letter language name "me" or "ct".
p = skiptowhite(eap->arg);
if ((*p == NUL || VIM_ISWHITE(*p)) && p - eap->arg >= 3)
{
if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0)
{
what = VIM_LC_MESSAGES;
name = skipwhite(p);
whatstr = "messages ";
}
else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0)
{
what = LC_CTYPE;
name = skipwhite(p);
whatstr = "ctype ";
}
else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0)
{
what = LC_TIME;
name = skipwhite(p);
whatstr = "time ";
}
else if (STRNICMP(eap->arg, "collate", p - eap->arg) == 0)
{
what = LC_COLLATE;
name = skipwhite(p);
whatstr = "collate ";
}
}
if (*name == NUL)
{
# ifndef LC_MESSAGES
if (what == VIM_LC_MESSAGES)
p = get_mess_env();
else
# endif
p = (char_u *)setlocale(what, NULL);
if (p == NULL || *p == NUL)
p = (char_u *)"Unknown";
smsg(_("Current %slanguage: \"%s\""), whatstr, p);
}
else
{
# ifndef LC_MESSAGES
if (what == VIM_LC_MESSAGES)
loc = "";
else
# endif
{
loc = setlocale(what, (char *)name);
# if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
// Make sure strtod() uses a decimal point, not a comma.
setlocale(LC_NUMERIC, "C");
# endif
}
if (loc == NULL)
semsg(_("E197: Cannot set language to \"%s\""), name);
else
{
# ifdef HAVE_NL_MSG_CAT_CNTR
// Need to do this for GNU gettext, otherwise cached translations
// will be used again.
extern int _nl_msg_cat_cntr;
++_nl_msg_cat_cntr;
# endif
// Reset $LC_ALL, otherwise it would overrule everything.
vim_setenv((char_u *)"LC_ALL", (char_u *)"");
if (what != LC_TIME && what != LC_COLLATE)
{
// Tell gettext() what to translate to. It apparently doesn't
// use the currently effective locale. Also do this when
// FEAT_GETTEXT isn't defined, so that shell commands use this
// value.
if (what == LC_ALL)
{
vim_setenv((char_u *)"LANG", name);
// Clear $LANGUAGE because GNU gettext uses it.
vim_setenv((char_u *)"LANGUAGE", (char_u *)"");
# ifdef MSWIN
// Apparently MS-Windows printf() may cause a crash when
// we give it 8-bit text while it's expecting text in the
// current locale. This call avoids that.
setlocale(LC_CTYPE, "C");
# endif
}
if (what != LC_CTYPE)
{
char_u *mname;
# ifdef MSWIN
mname = gettext_lang(name);
# else
mname = name;
# endif
vim_setenv((char_u *)"LC_MESSAGES", mname);
# ifdef FEAT_MULTI_LANG
set_helplang_default(mname);
# endif
}
}
# ifdef FEAT_EVAL
// Set v:lang, v:lc_time, v:collate and v:ctype to the final result.
set_lang_var();
# endif
# ifdef FEAT_TITLE
maketitle();
# endif
}
}
}
static char_u **locales = NULL; // Array of all available locales
static int did_init_locales = FALSE;
/*
* Return an array of strings for all available locales + NULL for the
* last element. Return NULL in case of error.
*/
static char_u **
find_locales(void)
{
garray_T locales_ga;
char_u *loc;
char_u *locale_list;
# ifdef MSWIN
size_t len = 0;
# endif
// Find all available locales by running command "locale -a". If this
// doesn't work we won't have completion.
# ifndef MSWIN
locale_list = get_cmd_output((char_u *)"locale -a",
NULL, SHELL_SILENT, NULL);
# else
// Find all available locales by examining the directories in
// $VIMRUNTIME/lang/
{
int options = WILD_SILENT|WILD_USE_NL|WILD_KEEP_ALL;
expand_T xpc;
char_u *p;
ExpandInit(&xpc);
xpc.xp_context = EXPAND_DIRECTORIES;
locale_list = ExpandOne(&xpc, (char_u *)"$VIMRUNTIME/lang/*",
NULL, options, WILD_ALL);
ExpandCleanup(&xpc);
if (locale_list == NULL)
// Add a dummy input, that will be skipped lated but we need to
// have something in locale_list so that the C locale is added at
// the end.
locale_list = vim_strsave((char_u *)".\n");
p = locale_list;
// find the last directory delimiter
while (p != NULL && *p != NUL)
{
if (*p == '\n')
break;
if (*p == '\\')
len = p - locale_list;
p++;
}
}
# endif
if (locale_list == NULL)
return NULL;
ga_init2(&locales_ga, sizeof(char_u *), 20);
// Transform locale_list string where each locale is separated by "\n"
// into an array of locale strings.
loc = (char_u *)strtok((char *)locale_list, "\n");
while (loc != NULL)
{
int ignore = FALSE;
# ifdef MSWIN
if (len > 0)
loc += len + 1;
// skip locales with a dot (which indicates the charset)
if (vim_strchr(loc, '.') != NULL)
ignore = TRUE;
# endif
if (!ignore)
{
if (ga_grow(&locales_ga, 1) == FAIL)
break;
loc = vim_strsave(loc);
if (loc == NULL)
break;
((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
}
loc = (char_u *)strtok(NULL, "\n");
}
# ifdef MSWIN
// Add the C locale
if (ga_grow(&locales_ga, 1) == OK)
((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] =
vim_strsave((char_u *)"C");
# endif
vim_free(locale_list);
if (ga_grow(&locales_ga, 1) == FAIL)
{
ga_clear(&locales_ga);
return NULL;
}
((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
return (char_u **)locales_ga.ga_data;
}
/*
* Lazy initialization of all available locales.
*/
static void
init_locales(void)
{
if (!did_init_locales)
{
did_init_locales = TRUE;
locales = find_locales();
}
}
# if defined(EXITFREE) || defined(PROTO)
void
free_locales(void)
{
int i;
if (locales != NULL)
{
for (i = 0; locales[i] != NULL; i++)
vim_free(locales[i]);
VIM_CLEAR(locales);
}
}
# endif
/*
* Function given to ExpandGeneric() to obtain the possible arguments of the
* ":language" command.
*/
char_u *
get_lang_arg(expand_T *xp UNUSED, int idx)
{
if (idx == 0)
return (char_u *)"messages";
if (idx == 1)
return (char_u *)"ctype";
if (idx == 2)
return (char_u *)"time";
if (idx == 3)
return (char_u *)"collate";
init_locales();
if (locales == NULL)
return NULL;
return locales[idx - 4];
}
/*
* Function given to ExpandGeneric() to obtain the available locales.
*/
char_u *
get_locales(expand_T *xp UNUSED, int idx)
{
init_locales();
if (locales == NULL)
return NULL;
return locales[idx];
}
#endif

View File

@ -25,7 +25,6 @@ static char_u *do_one_cmd(char_u **, int, cstack_T *, char_u *(*fgetline)(int, v
static char_u *do_one_cmd(char_u **, int, char_u *(*fgetline)(int, void *, int, int), void *cookie);
static int if_level = 0; // depth in :if
#endif
static void free_cmdmod(void);
static void append_command(char_u *cmd);
#ifndef FEAT_MENU
@ -629,6 +628,7 @@ do_cmdline(
cstack_T cstack; // conditional stack
garray_T lines_ga; // keep lines for ":while"/":for"
int current_line = 0; // active line in lines_ga
int current_line_before = 0;
char_u *fname = NULL; // function or script name
linenr_T *breakpoint = NULL; // ptr to breakpoint field in cookie
int *dbg_tick = NULL; // ptr to dbg_tick field in cookie
@ -851,27 +851,6 @@ do_cmdline(
}
# endif
}
if (cstack.cs_looplevel > 0)
{
// Inside a while/for loop we need to store the lines and use them
// again. Pass a different "fgetline" function to do_one_cmd()
// below, so that it stores lines in or reads them from
// "lines_ga". Makes it possible to define a function inside a
// while/for loop.
cmd_getline = get_loop_line;
cmd_cookie = (void *)&cmd_loop_cookie;
cmd_loop_cookie.lines_gap = &lines_ga;
cmd_loop_cookie.current_line = current_line;
cmd_loop_cookie.getline = fgetline;
cmd_loop_cookie.cookie = cookie;
cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
}
else
{
cmd_getline = fgetline;
cmd_cookie = cookie;
}
#endif
// 2. If no line given, get an allocated line with fgetline().
@ -929,21 +908,44 @@ do_cmdline(
#ifdef FEAT_EVAL
/*
* Save the current line when inside a ":while" or ":for", and when
* the command looks like a ":while" or ":for", because we may need it
* later. When there is a '|' and another command, it is stored
* separately, because we need to be able to jump back to it from an
* Inside a while/for loop, and when the command looks like a ":while"
* or ":for", the line is stored, because we may need it later when
* looping.
*
* When there is a '|' and another command, it is stored separately,
* because we need to be able to jump back to it from an
* :endwhile/:endfor.
*
* Pass a different "fgetline" function to do_one_cmd() below,
* that it stores lines in or reads them from "lines_ga". Makes it
* possible to define a function inside a while/for loop and handles
* line continuation.
*/
if (current_line == lines_ga.ga_len
&& (cstack.cs_looplevel || has_loop_cmd(next_cmdline)))
if ((cstack.cs_looplevel > 0 || has_loop_cmd(next_cmdline)))
{
if (store_loop_line(&lines_ga, next_cmdline) == FAIL)
cmd_getline = get_loop_line;
cmd_cookie = (void *)&cmd_loop_cookie;
cmd_loop_cookie.lines_gap = &lines_ga;
cmd_loop_cookie.current_line = current_line;
cmd_loop_cookie.getline = fgetline;
cmd_loop_cookie.cookie = cookie;
cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
// Save the current line when encountering it the first time.
if (current_line == lines_ga.ga_len
&& store_loop_line(&lines_ga, next_cmdline) == FAIL)
{
retval = FAIL;
break;
}
current_line_before = current_line;
}
else
{
cmd_getline = fgetline;
cmd_cookie = cookie;
}
did_endif = FALSE;
#endif
@ -1078,7 +1080,7 @@ do_cmdline(
else if (cstack.cs_lflags & CSL_HAD_LOOP)
{
cstack.cs_lflags &= ~CSL_HAD_LOOP;
cstack.cs_line[cstack.cs_idx] = current_line - 1;
cstack.cs_line[cstack.cs_idx] = current_line_before;
}
}
@ -1515,7 +1517,7 @@ getline_cookie(
{
#ifdef FEAT_EVAL
char_u *(*gp)(int, void *, int, int);
struct loop_cookie *cp;
struct loop_cookie *cp;
// When "fgetline" is "get_loop_line()" use the "cookie" to find the
// cookie that's originally used to obtain the lines. This may be nested
@ -1533,6 +1535,41 @@ getline_cookie(
#endif
}
#if defined(FEAT_EVAL) || defined(PROT)
/*
* Get the next line source line without advancing.
*/
char_u *
getline_peek(
char_u *(*fgetline)(int, void *, int, int) UNUSED,
void *cookie) // argument for fgetline()
{
char_u *(*gp)(int, void *, int, int);
struct loop_cookie *cp;
wcmd_T *wp;
// When "fgetline" is "get_loop_line()" use the "cookie" to find the
// cookie that's originally used to obtain the lines. This may be nested
// several levels.
gp = fgetline;
cp = (struct loop_cookie *)cookie;
while (gp == get_loop_line)
{
if (cp->current_line + 1 < cp->lines_gap->ga_len)
{
// executing lines a second time, use the stored copy
wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line + 1;
return wp->line;
}
gp = cp->getline;
cp = cp->cookie;
}
if (gp == getsourceline)
return source_nextline(cp);
return NULL;
}
#endif
/*
* Helper function to apply an offset for buffer commands, i.e. ":bdelete",
@ -1612,6 +1649,16 @@ current_tab_nr(tabpage_T *tab)
return nr;
}
static int
comment_start(char_u *p, int starts_with_colon UNUSED)
{
#ifdef FEAT_EVAL
if (in_vim9script())
return p[0] == '#' && p[1] != '{' && !starts_with_colon;
#endif
return *p == '"';
}
# define CURRENT_WIN_NR current_win_nr(curwin)
# define LAST_WIN_NR current_win_nr(NULL)
# define CURRENT_TAB_NR current_tab_nr(curtab)
@ -1661,8 +1708,10 @@ do_one_cmd(
int save_reg_executing = reg_executing;
int ni; // set when Not Implemented
char_u *cmd;
int starts_with_colon = FALSE;
#ifdef FEAT_EVAL
int starts_with_colon;
int may_have_range;
int vim9script = in_vim9script();
#endif
CLEAR_FIELD(ea);
@ -1723,13 +1772,28 @@ do_one_cmd(
* We need the command to know what kind of range it uses.
*/
cmd = ea.cmd;
ea.cmd = skip_range(ea.cmd, NULL);
#ifdef FEAT_EVAL
// In Vim9 script a colon is required before the range.
may_have_range = !vim9script || starts_with_colon;
if (may_have_range)
#endif
ea.cmd = skip_range(ea.cmd, NULL);
if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
ea.cmd = skipwhite(ea.cmd + 1);
#ifdef FEAT_EVAL
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9 && !starts_with_colon)
if (vim9script && !starts_with_colon)
{
if (ea.cmd == cmd + 1 && *cmd == '$')
// should be "$VAR = val"
--ea.cmd;
else if (ea.cmd > cmd)
{
emsg(_(e_colon_required));
goto doend;
}
p = find_ex_command(&ea, NULL, lookup_scriptvar, NULL);
}
else
#endif
p = find_ex_command(&ea, NULL, NULL, NULL);
@ -1815,8 +1879,11 @@ do_one_cmd(
}
ea.cmd = cmd;
if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
goto doend;
#ifdef FEAT_EVAL
if (may_have_range)
#endif
if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
goto doend;
/*
* 5. Parse the command.
@ -1833,12 +1900,8 @@ do_one_cmd(
* If we got a line, but no command, then go to the line.
* If we find a '|' or '\n' we set ea.nextcmd.
*/
if (*ea.cmd == NUL || *ea.cmd == '"'
#ifdef FEAT_EVAL
|| (*ea.cmd == '#' && ea.cmd[1] != '{'
&& !starts_with_colon && in_vim9script())
#endif
|| (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
if (*ea.cmd == NUL || comment_start(ea.cmd, starts_with_colon)
|| (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
{
/*
* strange vi behaviour:
@ -2002,12 +2065,22 @@ do_one_cmd(
goto doend;
}
if (text_locked() && !(ea.argt & EX_CMDWIN)
&& !IS_USER_CMDIDX(ea.cmdidx))
if (!IS_USER_CMDIDX(ea.cmdidx))
{
// Command not allowed when editing the command line.
errormsg = _(get_text_locked_msg());
goto doend;
#ifdef FEAT_CMDWIN
if (cmdwin_type != 0 && !(ea.argt & EX_CMDWIN))
{
// Command not allowed in the command line window
errormsg = _(e_cmdwin);
goto doend;
}
#endif
if (text_locked() && !(ea.argt & EX_LOCK_OK))
{
// Command not allowed when text is locked
errormsg = _(get_text_locked_msg());
goto doend;
}
}
// Disallow editing another buffer when "curbuf_lock" is set.
@ -2172,7 +2245,7 @@ do_one_cmd(
ea.do_ecmd_cmd = getargcmd(&ea.arg);
/*
* Check for '|' to separate commands and '"' to start comments.
* Check for '|' to separate commands and '"' or '#' to start comments.
* Don't do this for ":read !cmd" and ":write !cmd".
*/
if ((ea.argt & EX_TRLBAR) && !ea.usefilter)
@ -2337,7 +2410,7 @@ do_one_cmd(
&& *ea.arg != '"' && (*ea.arg != '|' || (ea.argt & EX_TRLBAR) == 0))
{
// no arguments allowed but there is something
errormsg = _(e_trailing);
errormsg = ex_errmsg(e_trailing_arg, ea.arg);
goto doend;
}
@ -2511,7 +2584,7 @@ do_one_cmd(
ea.errmsg = NULL;
(cmdnames[ea.cmdidx].cmd_func)(&ea);
if (ea.errmsg != NULL)
errormsg = _(ea.errmsg);
errormsg = ea.errmsg;
}
#ifdef FEAT_EVAL
@ -2566,32 +2639,10 @@ doend:
? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
#endif
if (ea.verbose_save >= 0)
p_verbose = ea.verbose_save;
free_cmdmod();
undo_cmdmod(&ea, save_msg_scroll);
cmdmod = save_cmdmod;
reg_executing = save_reg_executing;
if (ea.save_msg_silent != -1)
{
// messages could be enabled for a serious error, need to check if the
// counters don't become negative
if (!did_emsg || msg_silent > ea.save_msg_silent)
msg_silent = ea.save_msg_silent;
emsg_silent -= ea.did_esilent;
if (emsg_silent < 0)
emsg_silent = 0;
// Restore msg_scroll, it's set by file I/O commands, even when no
// message is actually displayed.
msg_scroll = save_msg_scroll;
// "silent reg" or "silent echo x" inside "redir" leaves msg_col
// somewhere in the line. Put it back in the first column.
if (redirecting())
msg_col = 0;
}
#ifdef HAVE_SANDBOX
if (ea.did_sandbox)
--sandbox;
@ -2602,6 +2653,7 @@ doend:
#ifdef FEAT_EVAL
--ex_nesting_level;
vim_free(ea.cmdline_tofree);
#endif
return ea.nextcmd;
@ -2610,6 +2662,20 @@ doend:
#pragma optimize( "", on )
#endif
static char ex_error_buf[MSG_BUF_LEN];
/*
* Return an error message with argument included.
* Uses a static buffer, only the last error will be kept.
* "msg" will be translated, caller should use N_().
*/
char *
ex_errmsg(char *msg, char_u *arg)
{
vim_snprintf(ex_error_buf, MSG_BUF_LEN, _(msg), arg);
return ex_error_buf;
}
/*
* Parse and skip over command modifiers:
* - update eap->cmd
@ -2627,7 +2693,8 @@ doend:
int
parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
{
char_u *p;
char_u *p;
int starts_with_colon = FALSE;
CLEAR_FIELD(cmdmod);
eap->verbose_save = -1;
@ -2637,7 +2704,11 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
for (;;)
{
while (*eap->cmd == ' ' || *eap->cmd == '\t' || *eap->cmd == ':')
{
if (*eap->cmd == ':')
starts_with_colon = TRUE;
++eap->cmd;
}
// in ex mode, an empty line works like :+
if (*eap->cmd == NUL && exmode_active
@ -2651,7 +2722,7 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
}
// ignore comment and empty lines
if (*eap->cmd == '"')
if (comment_start(eap->cmd, starts_with_colon))
return FAIL;
if (*eap->cmd == NUL)
{
@ -2727,6 +2798,11 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
if (*p == NUL || ends_excmd(*p))
break;
}
#ifdef FEAT_EVAL
// Avoid that "filter(arg)" is recognized.
if (in_vim9script() && !VIM_ISWHITE(*p))
break;
#endif
if (skip_only)
p = skip_vimgrep_pat(p, NULL, NULL);
else
@ -2881,11 +2957,14 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
}
/*
* Free contents of "cmdmod".
* Undo and free contents of "cmdmod".
*/
static void
free_cmdmod(void)
void
undo_cmdmod(exarg_T *eap, int save_msg_scroll)
{
if (eap->verbose_save >= 0)
p_verbose = eap->verbose_save;
if (cmdmod.save_ei != NULL)
{
// Restore 'eventignore' to the value before ":noautocmd".
@ -2896,6 +2975,25 @@ free_cmdmod(void)
if (cmdmod.filter_regmatch.regprog != NULL)
vim_regfree(cmdmod.filter_regmatch.regprog);
if (eap->save_msg_silent != -1)
{
// messages could be enabled for a serious error, need to check if the
// counters don't become negative
if (!did_emsg || msg_silent > eap->save_msg_silent)
msg_silent = eap->save_msg_silent;
emsg_silent -= eap->did_esilent;
if (emsg_silent < 0)
emsg_silent = 0;
// Restore msg_scroll, it's set by file I/O commands, even when no
// message is actually displayed.
msg_scroll = save_msg_scroll;
// "silent reg" or "silent echo x" inside "redir" leaves msg_col
// somewhere in the line. Put it back in the first column.
if (redirecting())
msg_col = 0;
}
}
/*
@ -3173,36 +3271,88 @@ find_ex_command(
* "lvar = value", "lvar(arg)", "[1, 2 3]->Func()"
*/
p = eap->cmd;
if (lookup != NULL && (*p == '('
|| ((p = to_name_const_end(eap->cmd)) > eap->cmd && *p != NUL)))
if (lookup != NULL)
{
int oplen;
int heredoc;
// Skip over first char for "&opt = val", "$ENV = val" and "@r = val".
char_u *pskip = (*eap->cmd == '&' || *eap->cmd == '$'
|| *eap->cmd == '@') ? eap->cmd + 1 : eap->cmd;
// "funcname(" is always a function call.
// "varname[]" is an expression.
// "g:varname" is an expression.
// "varname->expr" is an expression.
// "(..." is an expression.
if (*p == '('
|| *p == '['
|| p[1] == ':'
|| (*p == '-' && p[1] == '>'))
if (vim_strchr((char_u *)"{('[", *p) != NULL
|| ((p = to_name_const_end(pskip)) > eap->cmd && *p != NUL))
{
eap->cmdidx = CMD_eval;
return eap->cmd;
}
int oplen;
int heredoc;
if (
// "(..." is an expression.
// "funcname(" is always a function call.
*p == '('
|| (p == eap->cmd
? (
// "{..." is an dict expression.
*eap->cmd == '{'
// "'string'->func()" is an expression.
|| *eap->cmd == '\''
// "g:varname" is an expression.
|| eap->cmd[1] == ':'
)
: (
// "varname[]" is an expression.
*p == '['
// "varname->func()" is an expression.
|| (*p == '-' && p[1] == '>')
// "varname.expr" is an expression.
|| (*p == '.' && ASCII_ISALPHA(p[1]))
)))
{
eap->cmdidx = CMD_eval;
return eap->cmd;
}
// "[...]->Method()" is a list expression, but "[a, b] = Func()" is
// an assignment.
// If there is no line break inside the "[...]" then "p" is
// advanced to after the "]" by to_name_const_end(): check if a "="
// follows.
// If "[...]" has a line break "p" still points at the "[" and it
// can't be an assignment.
if (*eap->cmd == '[')
{
p = to_name_const_end(eap->cmd);
if (p == eap->cmd || *skipwhite(p) != '=')
{
eap->cmdidx = CMD_eval;
return eap->cmd;
}
if (p > eap->cmd && *skipwhite(p) == '=')
{
eap->cmdidx = CMD_let;
return eap->cmd;
}
}
oplen = assignment_len(skipwhite(p), &heredoc);
if (oplen > 0)
{
// Recognize an assignment if we recognize the variable name:
// "g:var = expr"
// "var = expr" where "var" is a local var name.
if (((p - eap->cmd) > 2 && eap->cmd[1] == ':')
|| lookup(eap->cmd, p - eap->cmd, cctx) != NULL)
oplen = assignment_len(skipwhite(p), &heredoc);
if (oplen > 0)
{
eap->cmdidx = CMD_let;
if (((p - eap->cmd) > 2 && eap->cmd[1] == ':')
|| *eap->cmd == '&'
|| *eap->cmd == '$'
|| *eap->cmd == '@'
|| lookup(eap->cmd, p - eap->cmd, cctx) != NULL)
{
eap->cmdidx = CMD_let;
return eap->cmd;
}
}
// Recognize using a type for a w:, b:, t: or g: variable:
// "w:varname: number = 123".
if (eap->cmd[1] == ':' && *p == ':')
{
eap->cmdidx = CMD_eval;
return eap->cmd;
}
}
@ -3446,7 +3596,7 @@ excmd_get_argt(cmdidx_T idx)
* Backslashed delimiters after / or ? will be skipped, and commands will
* not be expanded between /'s and ?'s or after "'".
*
* Also skip white space and ":" characters.
* Also skip white space and ":" characters after the range.
* Returns the "cmd" pointer advanced to beyond the range.
*/
char_u *
@ -3885,7 +4035,8 @@ get_flags(exarg_T *eap)
ex_ni(exarg_T *eap)
{
if (!eap->skip)
eap->errmsg = N_("E319: Sorry, the command is not available in this version");
eap->errmsg =
_("E319: Sorry, the command is not available in this version");
}
#ifdef HAVE_EX_SCRIPT_NI
@ -4437,14 +4588,20 @@ separate_nextcmd(exarg_T *eap)
// Check for '"': start of comment or '|': next command
// :@" and :*" do not start a comment!
// :redir @" doesn't either.
else if ((*p == '"' && !(eap->argt & EX_NOTRLCOM)
&& ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
|| p != eap->arg)
&& (eap->cmdidx != CMD_redir
|| p != eap->arg + 1 || p[-1] != '@'))
else if ((*p == '"'
#ifdef FEAT_EVAL
|| (*p == '#' && in_vim9script()
&& p[1] != '{' && p > eap->cmd && VIM_ISWHITE(p[-1]))
&& !in_vim9script()
#endif
&& !(eap->argt & EX_NOTRLCOM)
&& ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
|| p != eap->arg)
&& (eap->cmdidx != CMD_redir
|| p != eap->arg + 1 || p[-1] != '@'))
#ifdef FEAT_EVAL
|| (*p == '#'
&& in_vim9script()
&& p[1] != '{'
&& p > eap->cmd && VIM_ISWHITE(p[-1]))
#endif
|| *p == '|' || *p == '\n')
{
@ -4637,7 +4794,7 @@ ex_autocmd(exarg_T *eap)
if (secure)
{
secure = 2;
eap->errmsg = e_curdir;
eap->errmsg = _(e_curdir);
}
else if (eap->cmdidx == CMD_autocmd)
do_autocmd(eap->arg, eap->forceit);
@ -4688,7 +4845,7 @@ ex_buffer(exarg_T *eap)
if (ERROR_IF_ANY_POPUP_WINDOW)
return;
if (*eap->arg)
eap->errmsg = e_trailing;
eap->errmsg = ex_errmsg(e_trailing_arg, eap->arg);
else
{
if (eap->addr_count == 0) // default is current buffer
@ -4783,11 +4940,13 @@ ex_blast(exarg_T *eap)
int
ends_excmd(int c)
{
int comment_char = '"';
#ifdef FEAT_EVAL
if (c == '#')
return in_vim9script();
if (in_vim9script())
comment_char = '#';
#endif
return (c == NUL || c == '|' || c == '"' || c == '\n');
return (c == NUL || c == '|' || c == comment_char || c == '\n');
}
/*
@ -4799,11 +4958,14 @@ ends_excmd2(char_u *cmd_start UNUSED, char_u *cmd)
{
int c = *cmd;
if (c == NUL || c == '|' || c == '\n')
return TRUE;
#ifdef FEAT_EVAL
if (c == '#' && cmd[1] != '{' && (cmd == cmd_start || VIM_ISWHITE(cmd[-1])))
return in_vim9script();
if (in_vim9script())
return c == '#' && cmd[1] != '{'
&& (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
#endif
return (c == NUL || c == '|' || c == '"' || c == '\n');
return c == '"';
}
#if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA) || defined(FEAT_EVAL) \
@ -4905,7 +5067,7 @@ ex_colorscheme(exarg_T *eap)
if (expr != NULL)
{
++emsg_off;
p = eval_to_string(expr, NULL, FALSE);
p = eval_to_string(expr, FALSE);
--emsg_off;
vim_free(expr);
}
@ -5170,6 +5332,13 @@ ex_win_close(
int need_hide;
buf_T *buf = win->w_buffer;
// Never close the autocommand window.
if (win == aucmd_win)
{
emsg(_(e_autocmd_close));
return;
}
need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
if (need_hide && !buf_hide(buf) && !forceit)
{
@ -5243,7 +5412,7 @@ get_tabpage_arg(exarg_T *eap)
|| tab_number > LAST_TAB_NR)
{
// No numbers as argument.
eap->errmsg = e_invarg;
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
goto theend;
}
}
@ -5255,7 +5424,7 @@ get_tabpage_arg(exarg_T *eap)
|| tab_number == 0)
{
// No numbers as argument.
eap->errmsg = e_invarg;
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
goto theend;
}
tab_number = tab_number * relative + tabpage_index(curtab);
@ -5263,13 +5432,13 @@ get_tabpage_arg(exarg_T *eap)
--tab_number;
}
if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR)
eap->errmsg = e_invarg;
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
}
else if (eap->addr_count > 0)
{
if (unaccept_arg0 && eap->line2 == 0)
{
eap->errmsg = e_invrange;
eap->errmsg = _(e_invrange);
tab_number = 0;
}
else
@ -5279,7 +5448,7 @@ get_tabpage_arg(exarg_T *eap)
{
--tab_number;
if (tab_number < unaccept_arg0)
eap->errmsg = e_invarg;
eap->errmsg = _(e_invrange);
}
}
}
@ -5531,6 +5700,10 @@ ex_stop(exarg_T *eap)
static void
ex_exit(exarg_T *eap)
{
#ifdef FEAT_EVAL
if (not_in_vim9(eap) == FAIL)
return;
#endif
#ifdef FEAT_CMDWIN
if (cmdwin_type != 0)
{
@ -5792,7 +5965,7 @@ ex_recover(exarg_T *eap)
static void
ex_wrongmodifier(exarg_T *eap)
{
eap->errmsg = e_invcmd;
eap->errmsg = _(e_invcmd);
}
/*
@ -5975,7 +6148,7 @@ ex_tabnext(exarg_T *eap)
|| tab_number == 0)
{
// No numbers as argument.
eap->errmsg = e_invarg;
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
return;
}
}
@ -5988,7 +6161,7 @@ ex_tabnext(exarg_T *eap)
tab_number = eap->line2;
if (tab_number < 1)
{
eap->errmsg = e_invrange;
eap->errmsg = _(e_invrange);
return;
}
}
@ -6376,7 +6549,7 @@ do_exedit(
static void
ex_nogui(exarg_T *eap)
{
eap->errmsg = e_nogvim;
eap->errmsg = _(e_nogvim);
}
#endif
@ -6938,7 +7111,12 @@ ex_wincmd(exarg_T *eap)
eap->nextcmd = check_nextcmd(p);
p = skipwhite(p);
if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
if (*p != NUL && *p != (
#ifdef FEAT_EVAL
in_vim9script() ? '#' :
#endif
'"')
&& eap->nextcmd == NULL)
emsg(_(e_invarg));
else if (!eap->skip)
{
@ -7583,7 +7761,7 @@ ex_mark(exarg_T *eap)
if (*eap->arg == NUL) // No argument?
emsg(_(e_argreq));
else if (eap->arg[1] != NUL) // more than one character?
emsg(_(e_trailing));
semsg(_(e_trailing_arg), eap->arg);
else
{
pos = curwin->w_cursor; // save curwin->w_cursor
@ -7947,7 +8125,7 @@ ex_findpat(exarg_T *eap)
// Check for trailing illegal characters
if (!ends_excmd2(eap->arg, p))
eap->errmsg = e_trailing;
eap->errmsg = ex_errmsg(e_trailing_arg, p);
else
eap->nextcmd = check_nextcmd(p);
}
@ -8108,8 +8286,10 @@ find_cmdline_var(char_u *src, int *usedlen)
#define SPEC_SFILE (SPEC_CFILE + 1)
"<slnum>", // ":so" file line number
#define SPEC_SLNUM (SPEC_SFILE + 1)
"<stack>", // call stack
#define SPEC_STACK (SPEC_SLNUM + 1)
"<afile>", // autocommand file name
#define SPEC_AFILE (SPEC_SLNUM + 1)
#define SPEC_AFILE (SPEC_STACK + 1)
"<abuf>", // autocommand buffer number
#define SPEC_ABUF (SPEC_AFILE + 1)
"<amatch>", // autocommand match name
@ -8360,10 +8540,13 @@ eval_vars(
break;
case SPEC_SFILE: // file name for ":so" command
result = estack_sfile();
case SPEC_STACK: // call stack
result = estack_sfile(spec_idx == SPEC_SFILE);
if (result == NULL)
{
*errormsg = _("E498: no :source file name to substitute for \"<sfile>\"");
*errormsg = spec_idx == SPEC_SFILE
? _("E498: no :source file name to substitute for \"<sfile>\"")
: _("E489: no call stack to substitute for \"<stack>\"");
return NULL;
}
resultbuf = result; // remember allocated string

View File

@ -290,7 +290,7 @@ cause_errthrow(
// Get the source name and lnum now, it may change before
// reaching do_errthrow().
elem->sfile = estack_sfile();
elem->sfile = estack_sfile(FALSE);
elem->slnum = SOURCING_LNUM;
}
}
@ -549,7 +549,7 @@ throw_exception(void *value, except_type_T type, char_u *cmdname)
}
else
{
excp->throw_name = estack_sfile();
excp->throw_name = estack_sfile(FALSE);
if (excp->throw_name == NULL)
excp->throw_name = vim_strsave((char_u *)"");
if (excp->throw_name == NULL)
@ -895,10 +895,14 @@ report_discard_pending(int pending, void *value)
ex_eval(exarg_T *eap)
{
typval_T tv;
evalarg_T evalarg;
if (eval0(eap->arg, &tv, &eap->nextcmd, eap->skip ? 0 : EVAL_EVALUATE)
== OK)
fill_evalarg_from_eap(&evalarg, eap, eap->skip);
if (eval0(eap->arg, &tv, eap, &evalarg) == OK)
clear_tv(&tv);
clear_evalarg(&evalarg, eap);
}
/*
@ -913,7 +917,7 @@ ex_if(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_idx == CSTACK_LEN - 1)
eap->errmsg = N_("E579: :if nesting too deep");
eap->errmsg = _("E579: :if nesting too deep");
else
{
++cstack->cs_idx;
@ -926,7 +930,7 @@ ex_if(exarg_T *eap)
skip = did_emsg || got_int || did_throw || (cstack->cs_idx > 0
&& !(cstack->cs_flags[cstack->cs_idx - 1] & CSF_ACTIVE));
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
result = eval_to_bool(eap->arg, &error, eap, skip);
if (!skip && !error)
{
@ -949,7 +953,7 @@ ex_endif(exarg_T *eap)
if (eap->cstack->cs_idx < 0
|| (eap->cstack->cs_flags[eap->cstack->cs_idx]
& (CSF_WHILE | CSF_FOR | CSF_TRY)))
eap->errmsg = N_(e_endif_without_if);
eap->errmsg = _(e_endif_without_if);
else
{
/*
@ -993,20 +997,20 @@ ex_else(exarg_T *eap)
{
if (eap->cmdidx == CMD_else)
{
eap->errmsg = N_(e_else_without_if);
eap->errmsg = _(e_else_without_if);
return;
}
eap->errmsg = N_(e_elseif_without_if);
eap->errmsg = _(e_elseif_without_if);
skip = TRUE;
}
else if (cstack->cs_flags[cstack->cs_idx] & CSF_ELSE)
{
if (eap->cmdidx == CMD_else)
{
eap->errmsg = N_("E583: multiple :else");
eap->errmsg = _("E583: multiple :else");
return;
}
eap->errmsg = N_("E584: :elseif after :else");
eap->errmsg = _("E584: :elseif after :else");
skip = TRUE;
}
@ -1038,7 +1042,7 @@ ex_else(exarg_T *eap)
if (eap->cmdidx == CMD_elseif)
{
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
result = eval_to_bool(eap->arg, &error, eap, skip);
// When throwing error exceptions, we want to throw always the first
// of several errors in a row. This is what actually happens when
@ -1072,7 +1076,7 @@ ex_while(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_idx == CSTACK_LEN - 1)
eap->errmsg = N_("E585: :while/:for nesting too deep");
eap->errmsg = _("E585: :while/:for nesting too deep");
else
{
/*
@ -1100,11 +1104,20 @@ ex_while(exarg_T *eap)
/*
* ":while bool-expr"
*/
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
result = eval_to_bool(eap->arg, &error, eap, skip);
}
else
{
void *fi;
void *fi;
evalarg_T evalarg;
CLEAR_FIELD(evalarg);
evalarg.eval_flags = skip ? 0 : EVAL_EVALUATE;
if (getline_equal(eap->getline, eap->cookie, getsourceline))
{
evalarg.eval_getline = eap->getline;
evalarg.eval_cookie = eap->cookie;
}
/*
* ":for var in list-expr"
@ -1115,11 +1128,14 @@ ex_while(exarg_T *eap)
// previously evaluated list.
fi = cstack->cs_forinfo[cstack->cs_idx];
error = FALSE;
// the "in expr" is not used, skip over it
skip_for_lines(fi, &evalarg);
}
else
{
// Evaluate the argument and get the info in a structure.
fi = eval_for_line(eap->arg, &error, &eap->nextcmd, skip);
fi = eval_for_line(eap->arg, &error, eap, &evalarg);
cstack->cs_forinfo[cstack->cs_idx] = fi;
}
@ -1134,6 +1150,7 @@ ex_while(exarg_T *eap)
free_for_info(fi);
cstack->cs_forinfo[cstack->cs_idx] = NULL;
}
clear_evalarg(&evalarg, eap);
}
/*
@ -1169,7 +1186,7 @@ ex_continue(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
eap->errmsg = N_(e_continue);
eap->errmsg = _(e_continue);
else
{
// Try to find the matching ":while". This might stop at a try
@ -1207,7 +1224,7 @@ ex_break(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
eap->errmsg = N_(e_break);
eap->errmsg = _(e_break);
else
{
// Inactivate conditionals until the matching ":while" or a try
@ -1247,7 +1264,7 @@ ex_endwhile(exarg_T *eap)
}
if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
eap->errmsg = err;
eap->errmsg = _(err);
else
{
fl = cstack->cs_flags[cstack->cs_idx];
@ -1263,9 +1280,9 @@ ex_endwhile(exarg_T *eap)
if (!(fl & (CSF_WHILE | CSF_FOR)))
{
if (!(fl & CSF_TRY))
eap->errmsg = e_endif;
eap->errmsg = _(e_endif);
else if (fl & CSF_FINALLY)
eap->errmsg = e_endtry;
eap->errmsg = _(e_endtry);
// Try to find the matching ":while" and report what's missing.
for (idx = cstack->cs_idx; idx > 0; --idx)
{
@ -1274,7 +1291,7 @@ ex_endwhile(exarg_T *eap)
{
// Give up at a try conditional not in its finally clause.
// Ignore the ":endwhile"/":endfor".
eap->errmsg = err;
eap->errmsg = _(err);
return;
}
if (fl & csf)
@ -1319,7 +1336,7 @@ ex_throw(exarg_T *eap)
char_u *value;
if (*arg != NUL && *arg != '|' && *arg != '\n')
value = eval_to_string_skip(arg, &eap->nextcmd, eap->skip);
value = eval_to_string_skip(arg, eap, eap->skip);
else
{
emsg(_(e_argreq));
@ -1430,7 +1447,7 @@ ex_try(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_idx == CSTACK_LEN - 1)
eap->errmsg = N_("E601: :try nesting too deep");
eap->errmsg = _("E601: :try nesting too deep");
else
{
++cstack->cs_idx;
@ -1509,7 +1526,7 @@ ex_catch(exarg_T *eap)
if (cstack->cs_trylevel <= 0 || cstack->cs_idx < 0)
{
eap->errmsg = e_catch;
eap->errmsg = _(e_catch);
give_up = TRUE;
}
else
@ -1528,7 +1545,7 @@ ex_catch(exarg_T *eap)
{
// Give up for a ":catch" after ":finally" and ignore it.
// Just parse.
eap->errmsg = N_("E604: :catch after :finally");
eap->errmsg = _("E604: :catch after :finally");
give_up = TRUE;
}
else
@ -1571,7 +1588,7 @@ ex_catch(exarg_T *eap)
if (end != NULL && *end != NUL
&& !ends_excmd2(end, skipwhite(end + 1)))
{
emsg(_(e_trailing));
semsg(_(e_trailing_arg), end);
return;
}
@ -1668,7 +1685,7 @@ ex_finally(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_trylevel <= 0 || cstack->cs_idx < 0)
eap->errmsg = e_finally;
eap->errmsg = _(e_finally);
else
{
if (!(cstack->cs_flags[cstack->cs_idx] & CSF_TRY))
@ -1688,7 +1705,7 @@ ex_finally(exarg_T *eap)
if (cstack->cs_flags[idx] & CSF_FINALLY)
{
// Give up for a multiple ":finally" and ignore it.
eap->errmsg = e_finally_dup;
eap->errmsg = _(e_finally_dup);
return;
}
rewind_conditionals(cstack, idx, CSF_WHILE | CSF_FOR,
@ -1797,7 +1814,7 @@ ex_endtry(exarg_T *eap)
cstack_T *cstack = eap->cstack;
if (cstack->cs_trylevel <= 0 || cstack->cs_idx < 0)
eap->errmsg = e_no_endtry;
eap->errmsg = _(e_no_endtry);
else
{
/*
@ -2259,10 +2276,10 @@ cleanup_conditionals(
get_end_emsg(cstack_T *cstack)
{
if (cstack->cs_flags[cstack->cs_idx] & CSF_WHILE)
return e_endwhile;
return _(e_endwhile);
if (cstack->cs_flags[cstack->cs_idx] & CSF_FOR)
return e_endfor;
return e_endif;
return _(e_endfor);
return _(e_endif);
}

View File

@ -13,7 +13,7 @@
#include "vim.h"
#if defined(__TANDEM) || defined(__MINT__)
#if defined(__TANDEM)
# include <limits.h> // for SSIZE_MAX
#endif
#if defined(UNIX) && defined(FEAT_EVAL)
@ -52,10 +52,14 @@ filemess(
if (msg_silent != 0)
return;
msg_add_fname(buf, name); // put file name in IObuff with quotes
// If it's extremely long, truncate it.
if (STRLEN(IObuff) > IOSIZE - 80)
IObuff[IOSIZE - 80] = NUL;
STRCAT(IObuff, s);
if (STRLEN(IObuff) > IOSIZE - 100)
IObuff[IOSIZE - 100] = NUL;
// Avoid an over-long translation to cause trouble.
STRNCAT(IObuff, s, 99);
/*
* For the first message may have to start a new line.
* For further ones overwrite the previous one, reset msg_scroll before
@ -3035,13 +3039,13 @@ msg_add_lines(
*p++ = ' ';
if (shortmess(SHM_LINES))
vim_snprintf((char *)p, IOSIZE - (p - IObuff),
"%ldL, %lldC", lnum, (varnumber_T)nchars);
"%ldL, %lldB", lnum, (varnumber_T)nchars);
else
{
sprintf((char *)p, NGETTEXT("%ld line, ", "%ld lines, ", lnum), lnum);
p += STRLEN(p);
vim_snprintf((char *)p, IOSIZE - (p - IObuff),
NGETTEXT("%lld character", "%lld characters", nchars),
NGETTEXT("%lld byte", "%lld bytes", nchars),
(varnumber_T)nchars);
}
}

View File

@ -3083,7 +3083,7 @@ expand_backtick(
#ifdef FEAT_EVAL
if (*cmd == '=') // `={expr}`: Expand expression
buffer = eval_to_string(cmd + 1, &p, TRUE);
buffer = eval_to_string(cmd + 1, TRUE);
else
#endif
buffer = get_cmd_output(cmd, NULL,
@ -3813,8 +3813,13 @@ gen_expand_wildcards(
vim_free(p);
}
// When returning FAIL the array must be freed here.
if (retval == FAIL)
ga_clear(&ga);
*num_file = ga.ga_len;
*file = (ga.ga_data != NULL) ? (char_u **)ga.ga_data : (char_u **)"";
*file = (ga.ga_data != NULL) ? (char_u **)ga.ga_data
: (char_u **)_("no matches");
recursive = FALSE;

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