Compare commits

...

319 Commits

Author SHA1 Message Date
Bram Moolenaar
81a4cf469a patch 8.2.1645: GTK3: icons become broken images when resized
Problem:    GTK3: icons become broken images when resized.
Solution:   Use gtk_image_new_from_icon_name(). (closes #6916)
            Fix compiler warnings.
2020-09-09 19:05:13 +02:00
Bram Moolenaar
ba7c0d7b4c patch 8.2.1644: Vim9: cannot assign 1 and 0 to bool at script level
Problem:    Vim9: cannot assign 1 and 0 to bool at script level.
Solution:   Add the TTFLAG_BOOL_OK flag to the type. Fix name of test
            function.
2020-09-09 18:54:42 +02:00
Bram Moolenaar
96f8f499ce patch 8.2.1643: Vim9: :defcompile compiles dead functions
Problem:    Vim9: :defcompile compiles dead functions.
Solution:   Skip over dead functions.
2020-09-09 17:08:51 +02:00
Bram Moolenaar
4507f6ada5 patch 8.2.1642: otions test fails
Problem:    Otions test fails.
Solution:   Correct call to OptionG().
2020-09-09 15:10:52 +02:00
Bram Moolenaar
29a86ffee7 patch 8.2.1641: Vim9: cannot use 0 or 1 where a bool is expected
Problem:    Vim9: cannot use 0 or 1 where a bool is expected.
Solution:   Allow using 0 and 1 for a bool type. (closes #6903)
2020-09-09 14:55:31 +02:00
Bram Moolenaar
f842cd9e28 patch 8.2.1640: Amiga: missing header for getgrgid()
Problem:    Amiga: missing header for getgrgid().
Solution:   Add the grp.h header. (Ola Söder, closes #6906)
2020-09-09 13:01:27 +02:00
Bram Moolenaar
64075b0ab1 patch 8.2.1639: options window cannot be translated
Problem:    Options window cannot be translated.
Solution:   Get the translation for "local to" texts once and use them in many
            places. Fix that 'whichwrap' is not a local option. (issue #6800)
2020-09-09 12:56:30 +02:00
Bram Moolenaar
8e9be208ea patch 8.2.1638: leaking memory when popup filter function can't be called
Problem:    Leaking memory when popup filter function can't be called.
Solution:   Don't return too soon.
2020-09-08 22:55:26 +02:00
Bram Moolenaar
c3516f7e45 patch 8.2.1637: Vim9: :put ={expr} does not work inside :def function
Problem:    Vim9: :put ={expr} does not work inside :def function.
Solution:   Add ISN_PUT. (closes #6397)
2020-09-08 22:45:35 +02:00
Bram Moolenaar
6defa7bf0a patch 8.2.1636: get stuck if a popup filter causes an error
Problem:    Get stuck if a popup filter causes an error.
Solution:   Check whether the function can be called and does not cause an
            error.  (closes #6902)
2020-09-08 22:06:44 +02:00
Bram Moolenaar
57ad94c5a9 patch 8.2.1635: no digraph for 0x2022 BULLET
Problem:    No digraph for 0x2022 BULLET.
Solution:   Use "oo". (Hans Ginzel, closes #6904)
2020-09-08 19:06:30 +02:00
Bram Moolenaar
1c6737b20a Update runtime files. 2020-09-07 22:18:52 +02:00
Bram Moolenaar
9c929713b7 patch 8.2.1634: loop to handle keys for the command line is too long
Problem:    Loop to handle keys for the command line is too long.
Solution:   Move a few more parts to separate functions. (Yegappan Lakshmanan,
            closes #6895)
2020-09-07 22:05:28 +02:00
Bram Moolenaar
e83cca2911 patch 8.2.1633: some error messages are internal but do not use iemsg()
Problem:    Some error messages are internal but do not use iemsg().
Solution:   Use iemsg(). (Dominique Pellé, closes #6894)
2020-09-07 18:53:21 +02:00
Bram Moolenaar
44d6652d56 patch 8.2.1632: not checking the context of test_fails()
Problem:    Not checking the context of test_fails().
Solution:   Add the line number and context arguments.  Give error if
            assert_fails() argument types are wrong.
2020-09-06 22:26:57 +02:00
Bram Moolenaar
9bd5d879c2 patch 8.2.1631: test_fails() does not check the context of the line number
Problem:    test_fails() does not check the context of the line number.
Solution:   Use another argument to specify the context of the line number.
2020-09-06 21:47:48 +02:00
Bram Moolenaar
c98cdb3bc9 patch 8.2.1630: terminal test fails
Problem:    Terminal test fails.
Solution:   Correct argument to term_start().  Correct error number.
2020-09-06 21:13:00 +02:00
Bram Moolenaar
63969ef07e patch 8.2.1629: test fails without terminal feature
Problem:    Test fails without terminal feature.
Solution:   Check for terminal feature.
2020-09-06 20:06:59 +02:00
Bram Moolenaar
418155def2 patch 8.2.1628: Vim9: cannot pass "true" to timer_paused()
Problem:    Vim9: cannot pass "true" to timer_paused().
Solution:   Use tv_get_bool(). (closes #6891)
2020-09-06 18:39:38 +02:00
Bram Moolenaar
ad30470610 patch 8.2.1627: Vim9: cannot pass "true" to submatch/term_gettty/term_start
Problem:    Vim9: cannot pass "true" to submatch(), term_gettty() and
            term_start()
Solution:   Use tv_get_bool_chk(). (closes #6888, closes #6890, closes #6889)
2020-09-06 18:22:53 +02:00
Bram Moolenaar
707be5f352 patch 8.2.1626: test for strchars() fails with different error number
Problem:    Test for strchars() fails with different error number.
Solution:   Adjust the error number.
2020-09-06 17:13:44 +02:00
Bram Moolenaar
30d6413782 patch 8.2.1625: compiler warning for use of fptr_T
Problem:    Compiler warning for use of fptr_T.
Solution:   Make the type less strict.
2020-09-06 17:09:12 +02:00
Bram Moolenaar
3986b94b09 patch 8.2.1624: Vim9: cannot pass "true" to split(), str2nr() and strchars()
Problem:    Vim9: cannot pass "true" to split(), str2nr() and strchars().
Solution:   Use tv_get_bool_chk(). (closes #6884, closes #6885, closes #6886)
2020-09-06 16:09:04 +02:00
Bram Moolenaar
d2c617055a patch 8.2.1623: Vim9: using :call where it is not needed
Problem:    Vim9: using :call where it is not needed.
Solution:   Remove :call. (closes #6892)
2020-09-06 15:58:36 +02:00
Bram Moolenaar
2f3cd2e4ec patch 8.2.1622: loop to handle keys for the command line is too long
Problem:    Loop to handle keys for the command line is too long.
Solution:   Move code to functions. (Yegappan Lakshmanan, closes #6880)
2020-09-06 15:54:00 +02:00
Bram Moolenaar
8a0dcf4330 patch 8.2.1621: crash when using submatch(0, 1) in substitute()
Problem:    Crash when using submatch(0, 1) in substitute().
Solution:   Increment reference count. (closes #6887)
2020-09-06 15:14:45 +02:00
Bram Moolenaar
4140c4f3ff patch 8.2.1620: searchcount() test fails
Problem:    searchcount() test fails.
Solution:   Restore default flag value.
2020-09-05 23:16:00 +02:00
Bram Moolenaar
7c27f337bf patch 8.2.1619: Vim9: cannot pass "true" to spellsuggest()
Problem:    Vim9: cannot pass "true" to spellsuggest().
Solution:   Use tv_get_bool_chk(). (closes #6883)
2020-09-05 22:45:55 +02:00
Bram Moolenaar
401f0c0798 patch 8.2.1618: Vim9: cannot pass "true" to setloclist()
Problem:    Vim9: cannot pass "true" to setloclist().
Solution:   Use dict_get_bool(). (closes #6882)
2020-09-05 22:37:39 +02:00
Bram Moolenaar
4b9bd692bd patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Problem:    Vim9: cannot pass "true" to win_splitmove().
Solution:   Use dict_get_bool(). (closes #6862)  Alphabetize test functions.
2020-09-05 21:57:53 +02:00
Bram Moolenaar
fcb6d7082d patch 8.2.1616: Vim9: cannot pass "true" to synID()
Problem:    Vim9: cannot pass "true" to synID().
Solution:   Use tv_get_bool_chk(). (closes #6860)
2020-09-05 21:41:56 +02:00
Bram Moolenaar
30788d3d37 patch 8.2.1615: Vim9: cannot pass "true" to searchdecl()
Problem:    Vim9: cannot pass "true" to searchdecl().
Solution:   use tv_get_bool_chk(). (closes #6881)
2020-09-05 21:35:16 +02:00
Bram Moolenaar
597aaac9d2 patch 8.2.1614: Vim9: cannot pass "true" to searchcount()
Problem:    Vim9: cannot pass "true" to searchcount().
Solution:   Use tv_get_bool_chk(). (closes #6854)
2020-09-05 21:21:16 +02:00
Bram Moolenaar
fa2e38df76 patch 8.2.1613: Vim9: cannot pass "true" to prop_type_add()
Problem:    Vim9: cannot pass "true" to prop_type_add().
Solution:   Use tv_get_bool(). (closes #6850)
2020-09-05 21:00:00 +02:00
Bram Moolenaar
a5a40c5696 patch 8.2.1612: Vim9: cannot pass "true" to prop_remove()
Problem:    Vim9: cannot pass "true" to prop_remove().
Solution:   Use dict_get_bool(). (closes #6853)
2020-09-05 20:50:49 +02:00
Bram Moolenaar
ed6a430fae patch 8.2.1611: Vim9: cannot pass "true" to nr2char()
Problem:    Vim9: cannot pass "true" to nr2char().
Solution:   use tv_get_bool_chk(). (closes #6878)
2020-09-05 20:29:41 +02:00
Bram Moolenaar
a48f786787 patch 8.2.1610: Vim9: cannot pass "true" to list2str() and str2list()
Problem:    Vim9: cannot pass "true" to list2str() and str2list().
Solution:   Use tv_get_bool_chk(). (closes #6877)
2020-09-05 20:16:57 +02:00
Bram Moolenaar
7918238528 patch 8.2.1609: Vim9: test fails when build without +channel
Problem:    Vim9: test fails when build without +channel.
Solution:   Add check for +channel. (closes #6879)
2020-09-05 20:06:33 +02:00
Bram Moolenaar
15183b41c4 patch 8.2.1608: Vim9: getchar() test fails with GUI
Problem:    Vim9: getchar() test fails with GUI.
Solution:   Avoid that getchar(0) gets stuck on K_IGNORE.
2020-09-05 19:59:39 +02:00
Bram Moolenaar
636c5d5399 patch 8.2.1607: Vim9: getchar() test fails on MS-Windows
Problem:    Vim9: getchar() test fails on MS-Windows.
Solution:   First consume any available input.
2020-09-05 18:48:57 +02:00
Bram Moolenaar
04637e243d patch 8.2.1606: Vim9: cannot use "true" with has()
Problem:    Vim9: cannot use "true" with has().
Solution:   Use tv_get_bool(). (closes #6876)
2020-09-05 18:45:29 +02:00
Bram Moolenaar
b02628b8a2 patch 8.2.1605: default maintainer on github is wrong
Problem:    Defyyyyyyyyyyyyyyyyyyyyyyyub is wrong.
Solution:   Use Bram's account.
2020-09-05 18:40:44 +02:00
Bram Moolenaar
d217a87755 patch 8.2.1604: Vim9: cannot use "true" with getcompletion()
Problem:    Vim9: cannot use "true" with getcompletion().
Solution:   use tv_get_bool_chk(). (closes #6875)
2020-09-05 18:31:33 +02:00
Bram Moolenaar
c08cc72947 patch 8.2.1603: Vim9: cannot use "true" with getchar()
Problem:    Vim9: cannot use "true" with getchar().
Solution:   use tv_get_bool_chk(). (closes #6874)
2020-09-05 17:51:23 +02:00
Bram Moolenaar
036c2cf719 patch 8.2.1602: Vim9: cannot use 'true" with getbufinfo()
Problem:    Vim9: cannot use 'true" with getbufinfo().
Solution:   Use dict_get_bool(). (closes #6873)
2020-09-05 17:37:07 +02:00
Bram Moolenaar
2df4731042 patch 8.2.1601: Vim9: cannot use 'true" with garbagecollect()
Problem:    Vim9: cannot use 'true" with garbagecollect().
Solution:   Use tv_get_bool(). (closes #6871)
2020-09-05 17:30:44 +02:00
Bram Moolenaar
44b4a246b6 patch 8.2.1600: Vim9: cannot use "true" with deepcopy()
Problem:    Vim9: cannot use "true" with deepcopy().
Solution:   Use tv_get_bool_chk(). (closes #6867)
2020-09-05 17:18:28 +02:00
Bram Moolenaar
59941cbd80 patch 8.2.1599: missing line end when skipping a long line with :cgetfile
Problem:    Missing line end when skipping a long line with :cgetfile.
Solution:   Fix off-by-one error. (closes #6870)
2020-09-05 17:03:40 +02:00
Bram Moolenaar
2ce14589f2 patch 8.2.1598: starting a hidden terminal resizes the current window
Problem:    Starting a hidden terminal resizes the current window.
Solution:   Do not resize the current window for a hidden terminal.
            (closes #6872)
2020-09-05 16:08:49 +02:00
Bram Moolenaar
8b5866ded6 patch 8.2.1597: the channel source file is too big
Problem:    The channel source file is too big.
Solution:   Move job related code to a new source file.
2020-09-05 15:48:51 +02:00
Bram Moolenaar
7dfc5ce7cf patch 8.2.1596: using win_screenpos('.') in tests works but is wrong
Problem:    Using win_screenpos('.') in tests works but is wrong.
Solution:   Use win_screenpos(0).
2020-09-05 15:05:30 +02:00
Bram Moolenaar
86394aa972 patch 8.2.1595: cannot easily see what Vim sends to the terminal
Problem:    Cannot easily see what Vim sends to the terminal.
Solution:   Write output to the channel log if it contains terminal control
            sequences.  Avoid warnings for tputs() argument.
2020-09-05 14:27:24 +02:00
Bram Moolenaar
cf8aa6448b patch 8.2.1594: pull requests on github do not notify a maintainer
Problem:    Pull requests on github do not notify a maintainer.
Solution:   Add a CODEOWNERS file with a few initial entries.
2020-09-05 13:48:58 +02:00
Bram Moolenaar
e2e4075fad patch 8.2.1593: tests do not check the error number properly
Problem:    Tests do not check the error number properly.0
Solution:   Add a colon after the error number. (closes #6869)
2020-09-04 21:18:46 +02:00
Bram Moolenaar
24f7750ffa patch 8.2.1592: Vim9: passing "true" to char2nr() fails
Problem:    Vim9: passing "true" to char2nr() fails.
Solution:   Use tv_get_bool_chk(). (closes #6865)
2020-09-04 19:50:57 +02:00
Bram Moolenaar
c05d1c043a patch 8.2.1591: using winheight('.') in tests works but is wrong
Problem:    Using winheight('.') in tests works but is wrong.
Solution:   Use winheight(0). (issue #6863)
2020-09-04 18:38:06 +02:00
Bram Moolenaar
fe136c9a85 patch 8.2.1590: Vim9: bufnr() doesn't take "true" argument
Problem:    Vim9: bufnr() doesn't take "true" argument.
Solution:   use tv_get_bool_chk(). (closes #6863)
2020-09-04 18:35:26 +02:00
Bram Moolenaar
b936b79424 patch 8.2.1589: term_start() options for size are overruled by 'termwinsize'
Problem:    Term_start() options for size are overruled by 'termwinsize'.
            (Sergey Vlasov)
Solution:   Set 'termwinsize' to the specified size.
2020-09-04 18:34:09 +02:00
Bram Moolenaar
077cc7aa0e patch 8.2.1588: cannot read back the prompt of a prompt buffer
Problem:    Cannot read back the prompt of a prompt buffer.
Solution:   Add prompt_getprompt(). (Ben Jackson, closes #6851)
2020-09-04 16:35:35 +02:00
Bram Moolenaar
eadee486c7 patch 8.2.1587: loop for handling keys for the command line is too long
Problem:    Loop for handling keys for the command line is too long.
Solution:   Move wild menu handling to separate functions. (Yegappan
            Lakshmanan, closes #6856)
2020-09-04 15:37:31 +02:00
Bram Moolenaar
fe6dce8739 patch 8.2.1586: :resize command not fully tested
Problem:    :resize command not fully tested.
Solution:   Add a couple of tests. (Dominique Pellé, closes #6857)
2020-09-04 14:41:21 +02:00
Bram Moolenaar
fa57335e53 patch 8.2.1585: messages in globals.h not translated
Problem:    Messages in globals.h not translated, xgettext on MS-Windows not
            fully supported.
Solution:   Add globals.h to list of input files.  Update MS-Windows makefiles
            to improve message translations. (Ken Takata, closes #6858)
2020-09-04 13:53:00 +02:00
Bram Moolenaar
eb24556df3 patch 8.2.1584: Vim9: cannot use "true" for "skipstart" in prop_find()
Problem:    Vim9: cannot use "true" for "skipstart" in prop_find().
Solution:   Use dict_get_bool() instead of tv_get_number(). (closes #6852)
2020-09-03 22:33:44 +02:00
Bram Moolenaar
18eedfa40b patch 8.2.1583: MS-Windows: cannot easily measure code coverage
Problem:    MS-Windows: cannot easily measure code coverage.
Solution:   Add the COVERAGE option. (Ken Takata, closes #6842)
2020-09-03 19:50:05 +02:00
Bram Moolenaar
7ca86fe8dc patch 8.2.1582: the channel log does not show typed text
Problem:    The channel log does not show typed text.
Solution:   Add raw typed text to the log file.
2020-09-03 19:25:11 +02:00
Bram Moolenaar
1f42f5a675 patch 8.2.1581: using line() for global popup window doesn't work
Problem:    Using line() for global popup window doesn't work.
Solution:   Set tabpage to "curtab". (closes #6847)
2020-09-03 18:52:24 +02:00
Bram Moolenaar
a60053b8f4 patch 8.2.1580: wildmenu does not work properly
Problem:    Wildmenu does not work properly.
Solution:   Do not call may_do_incsearch_highlighting() if completion is in
            progress.
2020-09-03 16:50:13 +02:00
Bram Moolenaar
5b5aa11801 patch 8.2.1579: reports from asan are not optimal
Problem:    Reports from asan are not optimal.
Solution:   Use clang with ubsan. (James McCoy, closes #6811)
2020-09-03 16:05:04 +02:00
Bram Moolenaar
62f93f4ec9 patch 8.2.1578: Vim9: popup_clear() does not take "true" as argument
Problem:    Vim9: popup_clear() does not take "true" as argument.
Solution:   Use tv_get_bool(). (closes #6826)
2020-09-02 22:33:24 +02:00
Bram Moolenaar
04d594b9c1 patch 8.2.1577: Vim9: hasmapto()/mapcheck()/maparg() do nottake "true" arg
Problem:    Vim9: hasmapto(), mapcheck() and maparg() do not take "true" as
            argument.
Solution:   Use tv_get_bool(). (closes #6822, closes #6824)
2020-09-02 22:25:35 +02:00
Bram Moolenaar
6c553f9c04 patch 8.2.1576: Vim9: index() does not take "true" as argument
Problem:    Vim9: index() does not take "true" as argument.
Solution:   Use tv_get_bool_chk(). (closes #6823)
2020-09-02 22:10:34 +02:00
Bram Moolenaar
f966ce5ea2 patch 8.2.1575: Vim9: globpath() doesnot take "true" as argument
Problem:    Vim9: globpath() doesnot take "true" as argument.
Solution:   Use tv_get_bool_chk(). (closes #6821)
2020-09-02 21:57:07 +02:00
Bram Moolenaar
5892ea1511 patch 8.2.1574: Vim9: glob() doesnot take "true" as argument
Problem:    Vim9: glob() doesnot take "true" as argument.
Solution:   Use tv_get_bool_chk(). (closes #6821)
2020-09-02 21:53:11 +02:00
Bram Moolenaar
67ff97ded7 patch 8.2.1573: Vim9: getreg() does not take "true" as argument
Problem:    Vim9: getreg() does not take "true" as argument.
Solution:   Use tv_get_bool_chk().  (closes #6820)
2020-09-02 21:45:54 +02:00
Bram Moolenaar
551d25e765 patch 8.2.1572: Vim9: expand() does not take "true" as argument
Problem:    Vim9: expand() does not take "true" as argument.
Solution:   Use tv_get_bool_chk().  (closes #6819)
2020-09-02 21:37:56 +02:00
Bram Moolenaar
119f557230 patch 8.2.1571: Vim9: count() third argument cannot be "true"
Problem:    Vim9: count() third argument cannot be "true".
Solution:   use tv_get_bool_chk(). (closes #6818)
2020-09-02 21:31:22 +02:00
Bram Moolenaar
9d8bfae50f patch 8.2.1570: configure check for dirfd() does not work on HPUX
Problem:    Configure check for dirfd() does not work on HPUX. (Michael Osipov)
Solution:   Use AC_TRY_LINK instead of AC_TRY_COMPILE. (closes #6838)
2020-09-02 21:21:35 +02:00
Bram Moolenaar
a5d3841177 patch 8.2.1569: Vim9: fixes not tested; failure in getchangelist()
Problem:    Vim9: fixes for functions not tested; failure in getchangelist().
Solution:   Add tests. (closes #6813, closes #6815, closes #6817)
2020-09-02 21:02:35 +02:00
Bram Moolenaar
4da7a259f6 patch 8.2.1568: prop_find() skips properties in the same line
Problem:    prop_find() skips properties in the same line if "skipstart" is
            used.
Solution:   Use "continue" instead of "break". (closes #6840)
2020-09-02 19:59:00 +02:00
Bram Moolenaar
6efa46f4ef patch 8.2.1567: no example to use ubsan with clang
Problem:    No example to use ubsan with clang.
Solution:   Add example commands. (Dominique Pellé, issue #6811)
2020-09-02 19:23:06 +02:00
Bram Moolenaar
4488f5a545 patch 8.2.1566: not all Bazel files are recognized
Problem:    Not all Bazel files are recognized.
Solution:   Add *.bazel and *.BUILD. (closes #6836)
2020-09-02 17:08:59 +02:00
Bram Moolenaar
e90d63ea90 patch 8.2.1565: spellfile test sometimes fails
Problem:    Spellfile test sometimes fails.
Solution:   Check running into the end of the file.
2020-09-02 12:58:48 +02:00
Bram Moolenaar
4ad739fc05 patch 8.2.1564: a few remaining errors from ubsan
Problem:    A few remaining errors from ubsan.
Solution:   Avoid the warnings. (Dominique Pellé, closes #6837)
2020-09-02 10:25:45 +02:00
Bram Moolenaar
6f84b6db10 patch 8.2.1563: Vim9: error when using '%" with setbufvar() r getbufvar()
Problem:    Vim9: error when using '%" with setbufvar() or getbufvar().
Solution:   Use tv_get_buf_from_arg(). (closes #6816)
2020-09-01 23:16:32 +02:00
Bram Moolenaar
3767e3a330 patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Problem:    Vim9: error when using "%" where a buffer is expected.
Solution:   Add tv_get_buf_from_arg(). (closes #6814)
2020-09-01 23:06:01 +02:00
Bram Moolenaar
81fcb67fb3 patch 8.2.1561: using NULL pointers in fold code
Problem:    Using NULL pointers in fold code.
Solution:   Avoid using a NULL pointer. (Dominique Pellé, closes #6831,
            closes #6831)
2020-09-01 21:21:24 +02:00
Bram Moolenaar
9c2b06637b patch 8.2.1560: using NULL pointers in some code
Problem:    Using NULL pointers in some code. (James McCoy)
Solution:   Avoid adding to a NULL pointer.  Use byte as unsigned.
2020-09-01 19:56:15 +02:00
Bram Moolenaar
ca563b9b94 patch 8.2.1559: s390x tests work again
Problem:    s390x tests work again.
Solution:   re-enable s390x tests. (James McCoy, closes #6829)
2020-09-01 17:50:51 +02:00
Bram Moolenaar
2f1228463a patch 8.2.1558: signs test fails
Problem:    Signs test fails.
Solution:   Add missing change to sign.c.
2020-08-31 23:18:00 +02:00
Bram Moolenaar
997cd1a17f patch 8.2.1557: crash in :vimgrep when started as "vim -n"
Problem:    Crash in :vimgrep when started as "vim -n". (Raul Segura)
Solution:   Check mfp pointer. (Yegappan Lakshmanan, closes #6827)
2020-08-31 22:16:08 +02:00
Bram Moolenaar
39f7aa3c31 patch 8.2.1556: cursorline highlighting always overrules sign highlighting
Problem:    Cursorline highlighting always overrules sign highlighting.
Solution:   Combine the highlighting, use the priority to decide how.
            (closes #6812)
2020-08-31 22:00:05 +02:00
Bram Moolenaar
7d6979608e patch 8.2.1555: not all tests are executed on Github Actions
Problem:    Not all tests are executed on Github Actions.
Solution:   Copy "src" to "src2" earlier. Recognize "src2" in a couple more
            places.  Add two tests to the list of flaky tests. (Ken Takata,
            closes #6798)
2020-08-31 21:30:32 +02:00
Bram Moolenaar
07e87e9eb5 patch 8.2.1554: crash in normal test
Problem:    Crash in normal test.
Solution:   Skip adjusting marks if there are no folds.
2020-08-31 21:22:40 +02:00
Bram Moolenaar
2c93c685e3 patch 8.2.1553: crash in edit test
Problem:    Crash in edit test.
Solution:   Avoid using invalid pointer.
2020-08-31 21:15:02 +02:00
Bram Moolenaar
64f37d3090 patch 8.2.1552: warnings from asan with clang-11
Problem:    Warnings from asan with clang-11. (James McCoy)
Solution:   Avoid using a NULL pointer. (issue #6811)
2020-08-31 19:58:13 +02:00
Bram Moolenaar
8b565c2c15 patch 8.2.1551: Vim9: error for argument type does not mention the number
Problem:    Vim9: error for argument type does not mention the number.
Solution:   Pass the argument number to where the error is given.
2020-08-30 23:24:20 +02:00
Bram Moolenaar
02aaad9109 patch 8.2.1550: Vim9: bufname('%') gives an error
Problem:    Vim9: bufname('%') gives an error.
Solution:   Only give an error for wrong argument type. (closes #6807)
2020-08-30 21:26:57 +02:00
Bram Moolenaar
ca774f6753 patch 8.2.1549: "r" fails if 'esckeys' is off and modifyOtherKeys is used
Problem:    The "r" command fails for keys with modifiers if 'esckeys' is off
            and modifyOtherKeys is used. (Lauri Tirkkonen)
Solution:   Temporarily disable bracketed paste and modifyOtherKeys if
            'esckeys' is off. (closes #6809)
2020-08-30 20:46:38 +02:00
Bram Moolenaar
0b8cf278ec patch 8.2.1548: cannot move position of "%%" in message translations
Problem:    Cannot move position of "%%" in message translations. (Emir Sarı)
Solution:   Improve the check script.
2020-08-30 19:42:06 +02:00
Bram Moolenaar
02c037a4be patch 8.2.1547: various comment problems
Problem:    Various comment problems.
Solution:   Update comments.
2020-08-30 19:26:45 +02:00
Bram Moolenaar
cd80006ecb patch 8.2.1546: build rule for Vim.app is unused
Problem:    Build rule for Vim.app is unused.
Solution:   Delete the related build rules.
2020-08-30 18:11:54 +02:00
Bram Moolenaar
76603baac5 patch 8.2.1545: ch_logfile() is unclear about closing when forking
Problem:    ch_logfile() is unclear about closing when forking.
Solution:   Adjust the log messages.
2020-08-30 17:24:37 +02:00
Bram Moolenaar
207f009326 Update runtime files. 2020-08-30 17:20:20 +02:00
Bram Moolenaar
0b39c3fd4c patch 8.2.1544: cannot translate messages in a Vim script
Problem:    Cannot translate messages in a Vim script.
Solution:   Add gettext().  Try it out for a few messages in the options
            window.
2020-08-30 15:52:10 +02:00
Bram Moolenaar
25859dd74c patch 8.2.1543: Vim9: test with invalid SID is skipped in the GUI
Problem:    Vim9: test with invalid SID is skipped in the GUI.
Solution:   Read the CTRL-C that feedkeys() put in typeahead.
2020-08-30 12:54:53 +02:00
Bram Moolenaar
a5639848cc patch 8.2.1542: Vim9: test with invalid SID does not work in the GUI
Problem:    Vim9: test with invalid SID does not work in the GUI.
Solution:   Skip the test in the GUI.
2020-08-29 22:59:17 +02:00
Bram Moolenaar
95006e3dca patch 8.2.1541: Vim9: cannot find function reference for s:Func
Problem:    Vim9: cannot find function reference for s:Func.
Solution:   Recognize <SNR> prefix. (closes #6805)
2020-08-29 17:47:08 +02:00
Bram Moolenaar
98945560c1 patch 8.2.1540: the user cannot try out emoji character widths
Problem:    The user cannot try out emoji character widths.
Solution:   Move the emoji script to the runtime/tools directory.
2020-08-29 16:41:27 +02:00
Bram Moolenaar
e3d4685f1f patch 8.2.1539: using invalid script ID causes a crash
Problem:    Using invalid script ID causes a crash.
Solution:   Check the script ID to be valid. (closes #6804)
2020-08-29 13:39:17 +02:00
Bram Moolenaar
423a85a11a patch 8.2.1538: Python: iteration over vim objects fails to keep reference
Problem:    Python: iteration over vim objects fails to keep reference.
Solution:   Keep a reference for the object. (Paul Ollis, closes #6803,
            closes #6806)
2020-08-29 12:57:16 +02:00
Bram Moolenaar
b06a6d59d1 patch 8.2.1537: memory acccess error when using setcellwidths()
Problem:    Memory acccess error when using setcellwidths().
Solution:   Use array and pointers correctly.
2020-08-28 23:27:20 +02:00
Bram Moolenaar
4e4473c927 patch 8.2.1536: cannot get the class of a character; emoji widths are wrong
Problem:    Cannot get the class of a character; emoji widths are wrong in
            some environments.
Solution:   Add charclass(). Update some emoji widths.  Add script to check
            emoji widths.
2020-08-28 22:24:57 +02:00
Bram Moolenaar
08aac3c619 patch 8.2.1535: it is not possible to specify cell widths of characters
Problem:    It is not possible to specify cell widths of characters.
Solution:   Add setcellwidths().
2020-08-28 21:04:24 +02:00
Bram Moolenaar
ee8580e52e patch 8.2.1534: Vim9: type error for argument type is not at call position
Problem:    Vim9: type error for argument type is not at call position.
Solution:   Set the context and stack after checking the arguments.
            (issue #6785)
2020-08-28 17:19:07 +02:00
Bram Moolenaar
6a950581da patch 8.2.1533: Vim9: error when passing getreginfo() result to setreg()
Problem:    Vim9: error when passing getreginfo() result to setreg().
Solution:   Use dict_get_bool() for "isunnamed". (closes #6784)
2020-08-28 16:39:33 +02:00
Bram Moolenaar
2566054a7f patch 8.2.1532: compiler warning for conversion of size_t to long
Problem:    Compiler warning for conversion of size_t to long.
Solution:   Add type cast.
2020-08-28 16:38:11 +02:00
Bram Moolenaar
7a3330fc57 patch 8.2.1531: Vim9: test still fails on MS-Windows
Problem:    Vim9: test still fails on MS-Windows.
Solution:   When skipping expect function to be NULL.
2020-08-27 23:57:57 +02:00
Bram Moolenaar
5163fcce79 patch 8.2.1530: Vim9: test fails on MS-Windows
Problem:    Vim9: test fails on MS-Windows.
Solution:   Skip Ex command inside "if false".
2020-08-27 23:37:09 +02:00
Bram Moolenaar
749639ec72 patch 8.2.1529: Vim9: :elseif may be compiled when not needed
Problem:    Vim9: :elseif may be compiled when not needed.
Solution:   Do evaluate the :elseif expression.
2020-08-27 23:08:47 +02:00
Bram Moolenaar
3988f64f9d patch 8.2.1528: Vim9: :endif not found after "if false"
Problem:    Vim9: :endif not found after "if false".
Solution:   When skipping still check for a following command. (closes #6797)
2020-08-27 22:43:03 +02:00
Bram Moolenaar
601e76ac3c patch 8.2.1527: Vim9: cannot use a function name at script level
Problem:    Vim9: cannot use a function name as a function reference at script
            level.
Solution:   Check if a name is a function name. (closes #6789)
2020-08-27 21:33:10 +02:00
Bram Moolenaar
228e62975e patch 8.2.1526: line in testdir Makefile got commented out
Problem:    Line in testdir Makefile got commented out. (Christian Brabandt)
Solution:   Revert.
2020-08-27 16:06:46 +02:00
Bram Moolenaar
6e3aeec846 patch 8.2.1525: messages from tests were not always displayed
Problem:    Messages from tests were not always displayed.
Solution:   Always show messages, the timing is always useful. (Ken Takata,
            closes #6792)
2020-08-26 22:29:57 +02:00
Bram Moolenaar
2e0866128b patch 8.2.1524: no longer get an error for string concatenation with float
Problem:    No longer get an error for string concatenation with float.
            (Tsuyoshi Cho)
Solution:   Only convert float for Vim9 script. (closes #6787)
2020-08-25 22:37:48 +02:00
Bram Moolenaar
b9fc192f92 patch 8.2.1523: still not enough test coverage for the spell file handling
Problem:    Still not enough test coverage for the spell file handling.
Solution:   Add spell file tests. (Yegappan Lakshmanan, closes #6790)
2020-08-25 21:19:36 +02:00
Bram Moolenaar
c8ec5fe56f patch 8.2.1522: not enough test coverage for the spell file handling
Problem:    Not enough test coverage for the spell file handling.
Solution:   Add spell file tests. (Yegappan Lakshmanan, closes #6763)
2020-08-24 20:28:56 +02:00
Bram Moolenaar
07399e7f07 patch 8.2.1521: reading past end of buffer when reading spellfile
Problem:    Reading past end of buffer when reading spellfile. (Yegappan
            Lakshmanan)
Solution:   Store the byte length and check for it.
2020-08-24 20:05:50 +02:00
Bram Moolenaar
b3ea36c5bc patch 8.2.1520: Vim9: CTRL-] used in :def function does not work
Problem:    Vim9: CTRL-] used in :def function does not work.
Solution:   Omit count or prepend colon. (closes #6769)
2020-08-23 21:46:32 +02:00
Bram Moolenaar
c2af0afff5 patch 8.2.1519: Vim9: Ex command default range is not set
Problem:    Vim9: Ex command default range is not set.
Solution:   When range is not given use default. (closes #6779)
2020-08-23 21:06:02 +02:00
Bram Moolenaar
2e80095501 patch 8.2.1518: Vim9: cannot assign to local option
Problem:    Vim9: cannot assign to local option.
Solution:   Skip over "&l:" and "&g:". (closes #6749)
2020-08-23 19:34:48 +02:00
Bram Moolenaar
6c53fca023 patch 8.2.1517: cannot easily get the character under the cursor
Problem:    Cannot easily get the character under the cursor.
Solution:   Add the {chars} argument to strpart().
2020-08-23 17:34:46 +02:00
Bram Moolenaar
430deb1945 patch 8.2.1516: Vim9: error for :exe has wrong line number
Problem:    Vim9: error for :exe has wrong line number.
Solution:   Set line number before calling do_cmdline_cmd(). (closes #6774)
2020-08-23 16:29:11 +02:00
Bram Moolenaar
8436773fad patch 8.2.1515: Vim9: can create s:var in legacy script but cannot unlet
Problem:    Vim9: can create s:var in legacy script but cannot unlet.
Solution:   Allow :unlet for legacy script var.
2020-08-23 15:21:55 +02:00
Bram Moolenaar
dc0cf1db3e patch 8.2.1514: multibyte vertical separator is cleared when dragging popup
Problem:    Multibyte vertical separator is cleared when dragging a popup
            window using a multi-byte character for the border.
Solution:   Only clear the character before the window if it is double width.
            (closes #6766)
2020-08-23 15:09:36 +02:00
Bram Moolenaar
0981c8729e patch 8.2.1513: cannot interrupt shell used for filename expansion
Problem:    Cannot interrupt shell used for filename expansion. (Dominique
            Pellé)
Solution:   Do set tmode in mch_delay(). (closes #6770)
2020-08-23 14:28:37 +02:00
Bram Moolenaar
69e44552c5 patch 8.2.1512: failure after trinary expression fails
Problem:    Failure after trinary expression fails.
Solution:   Restore eval_flags. (Yasuhiro Matsumoto, closes #6776)
2020-08-22 22:37:20 +02:00
Bram Moolenaar
cd94277f72 patch 8.2.1511: putting a string in Visual block mode ignores multi-byte
Problem:    Putting a string in Visual block mode ignores multi-byte
            characters.
Solution:   Adjust the column for Visual block mode. (closes #6767)
2020-08-22 21:08:44 +02:00
Bram Moolenaar
5390099a97 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Problem:    Using "var" in a :def function may refer to a legacy Vim script
            variable.
Solution:   Require using "s:" to refer to a legacy Vim script variable.
            (closes #6771)
2020-08-22 19:02:02 +02:00
Bram Moolenaar
9943b3d979 patch 8.2.1509: vertical separator is cleared when dragging a popup window
Problem:    Vertical separator is cleared when dragging a popup window using a
            multi-byte character for the border.
Solution:   Only clear the character before the window if it is using a
            multi-byte character. (closes #6766)
2020-08-22 17:21:14 +02:00
Bram Moolenaar
c63b72b6dc patch 8.2.1508: not all debugger commands covered by tests
Problem:    Not all debugger commands covered by tests.
Solution:   Add tests for going up/down in the stack. (Ben Jackson,
            closes #6765)
2020-08-22 16:04:52 +02:00
Bram Moolenaar
51b6eb47b3 patch 8.2.1507: using malloc() directly
Problem:    Using malloc() directly.
Solution:   Use ALLOC_ONE().  Remove superfluous typecast.  (Hussam al-Homsi,
            closes #6768)
2020-08-22 15:19:18 +02:00
Bram Moolenaar
d70840ed68 patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Problem:    Vim9: no error when using a number other than 0 or 1 as bool.
Solution:   Check the number is 0 or 1.
2020-08-22 15:06:35 +02:00
Bram Moolenaar
1b04ce2d40 patch 8.2.1505: not all file read and writecode is tested
Problem:    Not all file read and writecode is tested.
Solution:   Add a few tests. (Dominique Pellé, closes #6764)
2020-08-21 22:46:11 +02:00
Bram Moolenaar
7cb6fc29d0 patch 8.2.1504: Vim9: white space checks are only done for a :def function
Problem:    Vim9: white space checks are only done for a :def function.
Solution:   Also do checks at the script level.  Adjust the name of a few
            error messages.
2020-08-21 22:36:47 +02:00
Bram Moolenaar
81e17fbe00 patch 8.2.1503: Vim9: error for autocmd defined in :def in legacy script
Problem:    Vim9: error for an autocmd defined in a :def function in legacy
            Vim script.
Solution:   Don't check the variable type. (closes #6758)
2020-08-21 21:55:43 +02:00
Bram Moolenaar
122616d9c1 patch 8.2.1502: Vim9: can use += with a :let command at script level
Problem:    Vim9: can use += with a :let command at script level.
Solution:   Give an error.
2020-08-21 21:32:50 +02:00
Bram Moolenaar
3fc71285d5 patch 8.2.1501: Vim9: concatenating to constant reverses order
Problem:    Vim9: concatenating to constant reverses order.
Solution:   Generate constant before option, register and environment
            variable. (closes #6757)
2020-08-21 20:43:17 +02:00
Bram Moolenaar
5d72ce69c8 patch 8.2.1500: Vim9: error when using address without a command
Problem:    Vim9: error when using address without a command.
Solution:   Execute the range itself. (closes #6747)
2020-08-20 23:04:06 +02:00
Bram Moolenaar
ec65d77fa2 patch 8.2.1499: Vim9: error when using "$" with col()
Problem:    Vim9: error when using "$" with col().
Solution:   Reorder getting the column value. (closes #6744)
2020-08-20 22:29:12 +02:00
Bram Moolenaar
733d259a83 patch 8.2.1498: on slow systems tests can be flaky
Problem:    On slow systems tests can be flaky.
Solution:   Use TermWait() instead of term-wait(). (Yegappan Lakshmanan,
            closes #6756)
2020-08-20 18:59:06 +02:00
Bram Moolenaar
17f67547f3 patch 8.2.1497: CursorHold test is flaky
Problem:    CursorHold test is flaky. (Jakub Kądziołka)
Solution:   Use WaitForAssert() (closes #6754)
2020-08-20 18:29:13 +02:00
Bram Moolenaar
b8a9296ced patch 8.2.1496: Vim9: cannot use " #" in a mapping
Problem:    Vim9: cannot use " #" in a mapping.
Solution:   Do not remove a comment with the EX_NOTRLCOM flag. (closes #6746)
2020-08-20 18:02:47 +02:00
Bram Moolenaar
df2524bbb4 patch 8.2.1495: "make clean" may delete too many files
Problem:    "make clean" may delete too many files.
Solution:   Do not delete $APPDIR. (closes #6751)
2020-08-20 16:16:27 +02:00
Bram Moolenaar
825b54415f patch 8.2.1494: missing change to calling eval_getline()
Problem:    Missing change to calling eval_getline().
Solution:   Change last argument.
2020-08-20 15:52:21 +02:00
Bram Moolenaar
fc2a47ffc4 patch 8.2.1493: not enough test coverage for the spell file handling
Problem:    Not enough test coverage for the spell file handling.
Solution:   Add spell file tests. (Yegappan Lakshmanan, closes #6728)
2020-08-20 15:41:55 +02:00
Bram Moolenaar
20b23c6358 patch 8.2.1492: build failures
Problem:    Build failures.
Solution:   Move typedef out of #ifdef.  Adjust argument types.  Discover
            America.
2020-08-20 15:25:00 +02:00
Bram Moolenaar
66250c932e patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Problem:    Vim9: crash when compiling heredoc lines start with comment.
Solution:   Skip over NULL pointers. Do not remove comment and empty lines
            when fetching function lines. (closes #6743)
2020-08-20 15:02:42 +02:00
Bram Moolenaar
93ad14710b patch 8.2.1490: Vim9: using /= with float and number doesn't work
Problem:    Vim9: using /= with float and number doesn't work.
Solution:   Better support assignment with operator. (closes #6742)
2020-08-19 22:02:41 +02:00
Bram Moolenaar
191929b182 patch 8.2.1489: Vim9: error when setting an option with setbufvar()
Problem:    Vim9: error when setting an option with setbufvar().
Solution:   Do not get a number from a string value. (closes #6740)
2020-08-19 21:20:49 +02:00
Bram Moolenaar
9dc1917f42 patch 8.2.1488: text does not scroll when inserting above first line
Problem:    Text does not scroll when inserting above first line.
Solution:   Adjust off-by-one error. (Ken Takata, closes #6739)
2020-08-19 20:19:48 +02:00
Bram Moolenaar
a7c4e74763 patch 8.2.1487: Travis: installing snd-dummy is not always useful
Problem:    Travis: installing snd-dummy is not always useful.
Solution:   Only install snd-dummy on amd64. (Ozaki Kiichi, closes #6738)
2020-08-19 19:46:12 +02:00
Bram Moolenaar
f8abbf37d6 patch 8.2.1486: Vim9: readdir() expression doesn't accept bool
Problem:    Vim9: readdir() expression doesn't accept bool.
Solution:   Merge with code for readdirex(). (closes #6737)
2020-08-19 16:00:06 +02:00
Bram Moolenaar
af8822ce08 patch 8.2.1485: Vim9: readdirex() expression doesn't accept bool
Problem:    Vim9: readdirex() expression doesn't accept bool.
Solution:   Accept both -1 and bool. (closes #6737)
2020-08-19 13:55:01 +02:00
Bram Moolenaar
9b02d64cff patch 8.2.1484: flaky failure in assert_fails()
Problem:    Flaky failure in assert_fails().
Solution:   Only used fourth argument if there is a third argument.
2020-08-18 23:24:13 +02:00
Bram Moolenaar
165036ddba patch 8.2.1483: Vim9: error for using special as number
Problem:    Vim9: error for using special as number when returning "false"
            from a popup filter.
Solution:   Use tv_get_bool(). (closes #6733)
2020-08-18 22:50:38 +02:00
Bram Moolenaar
aeb2bdd0de patch 8.2.1482: Vim9: crash when using a nested lambda
Problem:    Vim9: crash when using a nested lambda.
Solution:   Do not clear the growarray when not evaluating.  Correct pointer
when getting the next line. (closes #6731)
2020-08-18 22:32:03 +02:00
Bram Moolenaar
3affe7a6c6 patch 8.2.1481: Vim9: line number reported with error may be wrong
Problem:    Vim9: line number reported with error may be wrong.
Solution:   Check line number in tests.
2020-08-18 20:34:13 +02:00
Bram Moolenaar
e15eebd202 patch 8.2.1480: Vim9: skip expression in search() gives error
Problem:    Vim9: skip expression in search() gives error.
Solution:   use tv_get_bool() eval_expr_to_bool(). (closes #6729)
2020-08-18 19:11:38 +02:00
Bram Moolenaar
1d634542cf patch 8.2.1479: Vim9: error for list index uses wrong line number
Problem:    Vim9: error for list index uses wrong line number.
Solution:   Set source line number. (closes #6724)  Add a way to assert the
            line number of the error with assert_fails().
2020-08-18 13:41:50 +02:00
Bram Moolenaar
558813314d patch 8.2.1478: Vim9: cannot use "true" for some popup options
Problem:    Vim9: cannot use "true" for some popup options.
Solution:   Add dict_get_bool(). (closes #6725)
2020-08-18 13:04:15 +02:00
Bram Moolenaar
f39397e515 patch 8.2.1477: Vim9: error when using bufnr('%')
Problem:    Vim9: error when using bufnr('%').
Solution:   Don't give an error for using a string argument. (closes #6723)
2020-08-17 22:21:36 +02:00
Bram Moolenaar
aa9675a61d patch 8.2.1476: filetype test fails on MS-Windows
Problem:    Filetype test fails on MS-Windows.
Solution:   Remove "^" from pattern.
2020-08-17 21:57:09 +02:00
Bram Moolenaar
36967b32fd patch 8.2.1475: Vim9: can't use v:true for option flags
Problem:    Vim9: can't use v:true for option flags.
Solution:   Add tv_get_bool_chk(). (closes #6725)
2020-08-17 21:41:02 +02:00
Bram Moolenaar
624b6eaf20 patch 8.2.1474: /usr/lib/udef/rules.d not recognized as udevrules
Problem:    /usr/lib/udef/rules.d not recognized as udevrules.
Solution:   Adjust match pattern. (Haochen Tong, closes 36722)
2020-08-17 21:17:25 +02:00
Bram Moolenaar
021bda5671 patch 8.2.1473: items in a list given to :const can still be modified
Problem:    Items in a list given to :const can still be modified.
Solution:   Work like ":lockvar! name" but don't lock referenced items.
            Make locking a blob work.
2020-08-17 21:07:22 +02:00
Bram Moolenaar
7b22117c4e patch 8.2.1472: ":argdel" does not work like ":.argdel" as documented
Problem:    ":argdel" does not work like ":.argdel" as documented. (Alexey
            Demin)
Solution:   Make ":argdel" work like ":.argdel". (closes #6727)
            Also fix giving the error "0 more files to edit".
2020-08-17 19:34:10 +02:00
Bram Moolenaar
241572794f patch 8.2.1471: :const only locks the variable, not the value
Problem:    :const only locks the variable, not the value.
Solution:   Lock the value as ":lockvar 1 var" would do. (closes #6719)
2020-08-16 22:50:01 +02:00
Bram Moolenaar
c0f8823ee4 patch 8.2.1470: errors in spell file not tested
Problem:    Errors in spell file not tested.
Solution:   Add test for spell file errors. (Yegappan Lakshmanan,
            closes #6721)
2020-08-16 21:51:49 +02:00
Bram Moolenaar
0aae4809fd patch 8.2.1469: Vim9: cannot assign string to string option
Problem:    Vim9: cannot assign string to string option.
Solution:   Change checks for option value. (closes #6720)
2020-08-16 21:29:05 +02:00
Bram Moolenaar
f923571ec1 patch 8.2.1468: Vim9: invalid error for missing white space
Problem:    Vim9: invalid error for missing white space.
Solution:   Don't skip over white space after index. (closes #6718)
2020-08-16 18:42:53 +02:00
Bram Moolenaar
e5abf7af08 patch 8.2.1467: Vim9: :echomsg doesn't like a dict argument
Problem:    Vim9: :echomsg doesn't like a dict argument.
Solution:   Convert arguments like in legacy script. (closes #6717)
2020-08-16 18:29:35 +02:00
Bram Moolenaar
cc673e746a patch 8.2.1466: Vim9: cannot index or slice a variable with type "any"
Problem:    Vim9: cannot index or slice a variable with type "any".
Solution:   Add runtime index and slice.
2020-08-16 17:33:35 +02:00
Bram Moolenaar
56acb0943e patch 8.2.1465: Vim9: subscript not handled properly
Problem:    Vim9: subscript not handled properly.
Solution:   Adjust error message.  Remove dead code.  Disallow string to
            number conversion in scripts.
2020-08-16 14:48:19 +02:00
Bram Moolenaar
829ac868b7 patch 8.2.1464: Vim9: build warning for unused variable
Problem:    Vim9: build warning for unused variable.
Solution:   Delete the variable declaration.
2020-08-15 22:48:48 +02:00
Bram Moolenaar
ed5918771f patch 8.2.1463: Vim9: list slice not supported yet
Problem:    Vim9: list slice not supported yet.
Solution:   Add support for list slicing.
2020-08-15 22:14:53 +02:00
Bram Moolenaar
11107bab7e patch 8.2.1462: Vim9: string slice not supported yet
Problem:    Vim9: string slice not supported yet.
Solution:   Add support for string slicing.
2020-08-15 21:10:16 +02:00
Bram Moolenaar
3d1cde8a2f Update runtime files. 2020-08-15 18:55:18 +02:00
Bram Moolenaar
e3c37d8ebf patch 8.2.1461: Vim9: string indexes are counted in bytes
Problem:    Vim9: string indexes are counted in bytes.
Solution:   Use character indexes. (closes #6574)
2020-08-15 18:39:05 +02:00
Bram Moolenaar
451c2e3536 patch 8.2.1460: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more messages into errors.h.
2020-08-15 16:33:28 +02:00
Bram Moolenaar
53b29e4845 patch 8.2.1459: Vim9: declaring script var in script does not infer the type
Problem:    Vim9: declaring ascript variable at the script level does not
            infer the type.
Solution:   Get the type from the value. (closes #6716)
2020-08-15 14:31:20 +02:00
Bram Moolenaar
9a5c553f79 patch 8.2.1458: .gawk files not recognized
Problem:    .gawk files not recognized.
Solution:   Recognize .gawk files. (Doug Kearns)
2020-08-15 14:07:23 +02:00
Bram Moolenaar
793dcc540d patch 8.2.1457: Vim9: the output of :disassemble cannot be interrupted
Problem:    Vim9: the output of :disassemble cannot be interrupted.
Solution:   Check got_int. (closes #6715)
2020-08-15 13:49:17 +02:00
Bram Moolenaar
1623619119 patch 8.2.1456: MS-Windows: test files are not deleted
Problem:    MS-Windows: test files are not deleted.
Solution:   use "del" instead of $(DEL).
2020-08-14 23:08:22 +02:00
Bram Moolenaar
d1103587cf patch 8.2.1455: Vim9: crash when using typecast before constant
Problem:    Vim9: crash when using typecast before constant.
Solution:   Generate constant before checking type.  Add tets.
2020-08-14 22:44:25 +02:00
Bram Moolenaar
79e8db9a21 patch 8.2.1454: Vim9: failure invoking lambda with wrong arguments
Problem:    Vim9: failure invoking lambda with wrong arguments.
Solution:   Handle invalid arguments.  Add a test.
2020-08-14 22:16:33 +02:00
Bram Moolenaar
8de2f44ac6 patch 8.2.1453: Vim9: failure to compile lambda not tested
Problem:    Vim9: failure to compile lambda not tested.
Solution:   Add a test case.
2020-08-14 21:49:08 +02:00
Bram Moolenaar
8d56622944 patch 8.2.1452: Vim9: dead code in to_name_end()
Problem:    Vim9: dead code in to_name_end().
Solution:   Remove check for lambda and dict, it won't be used.
2020-08-14 21:42:54 +02:00
Bram Moolenaar
41fab3eac8 patch 8.2.1451: Vim9: list type at script level only uses first item
Problem:    Vim9: list type at script level only uses first item.
Solution:   Use all members, like in a compiled function. (closes #6712)
            Also for dictionary.
2020-08-14 21:27:37 +02:00
Bram Moolenaar
7d6997015d patch 8.2.1450: Vim9: no check that script-local items don't become global
Problem:    Vim9: no check that script-local items don't become global.
Solution:   Add a test.
2020-08-14 20:52:28 +02:00
Bram Moolenaar
32a23ac615 patch 8.2.1449: some test makefiles delete files that are not generated
Problem:    Some test makefiles delete files that are not generated.
Solution:   Remove the deletion commands.
2020-08-14 19:20:23 +02:00
Bram Moolenaar
4ac97f4761 patch 8.2.1448: test 77a for VMS depends on small.vim which does not exist
Problem:    Test 77a for VMS depends on small.vim which does not exist.
Solution:   Use the 'silent while 0" trick. (issue #6696)
2020-08-14 19:11:03 +02:00
Bram Moolenaar
32f335f75c patch 8.2.1447: Vim9: return type of keys() is list<any>
Problem:    Vim9: return type of keys() is list<any>.
Solution:   Should be list<string>. (closes #6711)
2020-08-14 18:56:45 +02:00
Bram Moolenaar
7517ffdbb5 patch 8.2.1446: Vim9: line number in error message is not correct
Problem:    Vim9: line number in error message is not correct.
Solution:   Set SOURCING_LNUM before calling emsg(). (closes #6708)
2020-08-14 18:35:07 +02:00
Bram Moolenaar
c4ce36d486 patch 8.2.1445: Vim9: function expanded name is cleared when sourcing again
Problem:    Vim9: function expanded name is cleared when sourcing a script
            again.
Solution:   Only clear the expanded name when deleting the function.
            (closes #6707)
2020-08-14 17:08:15 +02:00
Bram Moolenaar
bc4c505166 patch 8.2.1444: error messages are spread out and names can be confusing
Problem:    Error messages are spread out and names can be confusing.
Solution:   Start moving error messages to a separate file and use clear
            names.
2020-08-13 22:47:35 +02:00
Bram Moolenaar
cdd70f09a5 patch 8.2.1443: Vim9: crash when interrupting a nested :def function
Problem:    Vim9: crash when interrupting a nested :def function.
Solution:   Push a dummy return value onto the stack. (closes #6701)
2020-08-13 21:40:18 +02:00
Bram Moolenaar
be7529e889 patch 8.2.1442: outdated references to the Mac Carbon GUI
Problem:    Outdated references to the Mac Carbon GUI.
Solution:   Remove or update references. (Yee Cheng Chin, closes #6703)
2020-08-13 21:05:39 +02:00
Bram Moolenaar
c771908681 patch 8.2.1441: running tests in tiny version gives error for summarize.vim
Problem:    Running tests in tiny version gives error for summarize.vim.
Solution:   Set 'cpoptions' to allow for line continuation.  Restore
            redirecting test output to /dev/null.
2020-08-13 19:42:39 +02:00
Bram Moolenaar
16c6232cad patch 8.2.1440: debugger code insufficiently tested
Problem:    Debugger code insufficiently tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #6700)
2020-08-13 19:20:04 +02:00
Bram Moolenaar
b96a32ef1a patch 8.2.1439: tiny and small builds have no test coverage
Problem:    Tiny and small builds have no test coverage.
Solution:   Restore tests that do not depend on the +eval feature.
            (Ken Takata, closes #6696)
2020-08-13 18:59:55 +02:00
Bram Moolenaar
7ac616cb0a patch 8.2.1438: missing tests for interrupting script execution from debugger
Problem:    Missing tests for interrupting script execution from debugger.
Solution:   Add tests. (Yegappan Lakshmanan, closes #6697)
2020-08-12 22:22:09 +02:00
Bram Moolenaar
c9edd6b582 patch 8.2.1437: Vim9: 'statusline' is evaluated using Vim9 script syntax
Problem:    Vim9: 'statusline' is evaluated using Vim9 script syntax.
Solution:   Always use legacy script syntax.
2020-08-12 22:18:23 +02:00
Bram Moolenaar
66e0014ba6 patch 8.2.1436: function implementing :substitute has unexpected name
Problem:    Function implementing :substitute has unexpected name.
Solution:   Rename from do_sub() to ex_substitute().
2020-08-12 21:58:12 +02:00
Bram Moolenaar
418f1df547 patch 8.2.1435: Vim9: always converting to string for ".." leads to mistakes
Problem:    Vim9: always converting to string for ".." leads to mistakes.
Solution:   Only automatically convert simple types.
2020-08-12 21:34:49 +02:00
Bram Moolenaar
fd77748df2 patch 8.2.1434: Vim9: crash when lambda uses outer function argument
Problem:    Vim9: crash when lambda uses outer function argument.
Solution:   Set the flag that the outer context is used.
2020-08-12 19:42:01 +02:00
Bram Moolenaar
ba60cc45e7 patch 8.2.1433: Vim9: cannot mingle comments in multi-line lambda
Problem:    Vim9: cannot mingle comments in multi-line lambda.
Solution:   Skip over NULL lines. (closes #6694)
2020-08-12 19:15:33 +02:00
Bram Moolenaar
6d91bcb4d2 patch 8.2.1432: various inconsistencies in test files
Problem:    Various inconsistencies in test files.
Solution:   Add modelines where they were missing.  Use Check commands instead
            of silently skipping over tests.  Adjust indents and comments.
            (Ken Takata, closes #6695)
2020-08-12 18:50:36 +02:00
Bram Moolenaar
c3d6e8a46a patch 8.2.1431: Vim9: no error for white space before comma in dict
Problem:    Vim9: no error for white space before comma in dict.
Solution:   Check for extra white space. (closes #6674)
2020-08-12 18:34:28 +02:00
Bram Moolenaar
db199216e8 patch 8.2.1430: Vim9: error for missing comma instead of extra white space
Problem:    Vim9: error for missing comma instead of extra white space.
Solution:   Check if comma can be found after white space. (closes #6668)
            Also check for extra white space in literal dict. (closes #6670)
2020-08-12 18:01:53 +02:00
Bram Moolenaar
17a836cbee patch 8.2.1429: Vim9: no error for missing white after : in dict
Problem:    Vim9: no error for missing white after : in dict.
Solution:   Check for white space. (closes #6671)  Also check that there is no
            white before the :.
2020-08-12 17:35:58 +02:00
Bram Moolenaar
ed677f5587 patch 8.2.1428: Vim9: :def function does not abort on nested function error
Problem:    Vim9: :def function does not abort on nested function error.
Solution:   Check whether an error message was given. (closes #6691)
2020-08-12 16:38:10 +02:00
Bram Moolenaar
7c5ad34878 patch 8.2.1427: Vim9: cannot use a range with marks in :def function
Problem:    Vim9: cannot use a range with marks in :def function.
Solution:   Parse range after colon. (closes #6686)
2020-08-12 15:48:55 +02:00
Bram Moolenaar
a177344dc0 patch 8.2.1426: Vim9: cannot call autoload function in :def function
Problem:    Vim9: cannot call autoload function in :def function.
Solution:   Load the autoload script. (closes #6690)
2020-08-12 15:21:22 +02:00
Bram Moolenaar
575f24b3f3 patch 8.2.1425: Vim9: cannot use call() without :call
Problem:    Vim9: cannot use call() without :call.
Solution:   Do not skip over "call(". (closes #6689)
2020-08-12 14:21:11 +02:00
Bram Moolenaar
040f975fc1 patch 8.2.1424: Mac build fails
Problem:    Mac build fails.
Solution:   Adjust configure to not fall back to Athena.  Adjust some other
            files.
2020-08-11 23:08:48 +02:00
Bram Moolenaar
035d6e91bd patch 8.2.1423: Vim9: find global function when looking for script-local
Problem:    Vim9: find global function when looking for script-local.
Solution:   Don't strip prefix if name starts with "s:". (closes #6688)
2020-08-11 22:30:42 +02:00
Bram Moolenaar
097148e849 patch 8.2.1422: the Mac GUI implementation is outdated
Problem:    The Mac GUI implementation is outdated and probably doesn't even
            work.
Solution:   Remove the Mac GUI code.  The MacVim project provides the
            supported Vim GUI version.
2020-08-11 21:58:20 +02:00
Bram Moolenaar
4301a729ea patch 8.2.1421: Vim9: handling "+" and "-" before number differs from script
Problem:    Vim9: handling "+" and "-" before number differs from Vim script.
Solution:   Use the same sequence of commands.
2020-08-11 20:51:08 +02:00
Bram Moolenaar
f7c4d83609 patch 8.2.1420: test 49 is old style
Problem:    Test 49 is old style.
Solution:   Convert remaining parts to new style. Remove obsolete items.
            (Yegappan Lakshmanan, closes #6683)
2020-08-11 20:42:19 +02:00
Bram Moolenaar
59eccb92e3 patch 8.2.1419: Vim9: not operator applied too early
Problem:    Vim9: not operator applied too early.
Solution:   Implement the "numeric_only" argument. (closes #6680)
2020-08-10 23:09:37 +02:00
Bram Moolenaar
8294d49937 patch 8.2.1418: Vim9: invalid error for missing white space
Problem:    Vim9: invalid error for missing white space after function.
Solution:   Do not skip over white space. (closes #6679)
2020-08-10 22:40:56 +02:00
Bram Moolenaar
efb6482949 patch 8.2.1417: test 49 is old style
Problem:    Test 49 is old style.
Solution:   Convert more parts to new style test. (Yegappan Lakshmanan,
            closes #6682)
2020-08-10 22:15:30 +02:00
Bram Moolenaar
3e06a1e2a8 patch 8.2.1416: Vim9: boolean evaluation does not work as intended
Problem:    Vim9: boolean evaluation does not work as intended.
Solution:   Use tv2bool() in Vim9 script. (closes #6681)
2020-08-10 21:57:54 +02:00
Bram Moolenaar
6f8f7337c1 patch 8.2.1415: closing a popup window with CTRL-C interrupts 'statusline'
Problem:    Closing a popup window with CTRL-C interrupts 'statusline' if it
            calls a function.
Solution:   Reset got_int while redrawing. (closes #6675)
2020-08-10 21:19:23 +02:00
Bram Moolenaar
bf61fdd008 patch 8.2.1414: popupwindow missing last couple of lines
Problem:    Popupwindow missing last couple of lines when cursor is in the
            first line.
Solution:   Compute the max height also when top aligned. (closes #6664)
2020-08-10 20:39:17 +02:00
Bram Moolenaar
94f4ffa770 patch 8.2.1413: previous tab page not usable from an Ex command
Problem:    Previous tab page not usable from an Ex command.
Solution:   Add the "#" argument for :tabnext et al. (Yegappan Lakshmanan,
            closes #6677)
2020-08-10 19:21:15 +02:00
Bram Moolenaar
6e4cfffe80 patch 8.2.1412: Vim: not operator does not result in boolean
Problem:    Vim: not operator does not result in boolean.
Solution:   Make type depend on operator. (issue 6678)  Fix using "false" and
            "true" in Vim9 script.
2020-08-09 22:17:55 +02:00
Bram Moolenaar
a9a47d157a patch 8.2.1411: when splitting a window localdir is copied but prevdir is not
Problem:    when splitting a window localdir is copied but prevdir is not.
Solution:   Also copy prevdir. (closes #6667)
2020-08-09 21:45:52 +02:00
Bram Moolenaar
7f7a888869 patch 8.2.1410: adding compiler plugin requires test change
Problem:    Adding compiler plugin requires test change.
Solution:   Include compiler plugin and adjust test.
2020-08-09 20:05:41 +02:00
Bram Moolenaar
1e91eafc2e patch 8.2.1409: nmpmrc and php.ini filetypes not recognized
Problem:    Nmpmrc and php.ini filetypes not recognized.
Solution:   Add filetype detection. (Doug Kearns)
2020-08-09 19:32:39 +02:00
Bram Moolenaar
64d662d5fc patch 8.2.1408: Vim9: type casting not supported
Problem:    Vim9: type casting not supported.
Solution:   Introduce type casting.
2020-08-09 19:02:50 +02:00
Bram Moolenaar
127542bceb patch 8.2.1407: Vim9: type of list and dict only depends on first item
Problem:    Vim9: type of list and dict only depends on first item.
Solution:   Use all items to decide about the type.
2020-08-09 17:22:04 +02:00
Bram Moolenaar
a1b9b0cc01 patch 8.2.1406: popupwindow lacks scrollbar if no "maxheight" is used
Problem:    Popupwindow lacks scrollbar if no "maxheight" is used.
Solution:   Compute the max height depending on the position. (closes #6664)
2020-08-09 16:37:48 +02:00
Bram Moolenaar
a7cc9e697b patch 8.2.1405: Vim9: vim9compile.c is getting too big
Problem:    Vim9: vim9compile.c is getting too big.
Solution:   Split off type code to vim9type.c.
2020-08-09 15:25:14 +02:00
Bram Moolenaar
b3ca982407 patch 8.2.1404: Vim9: script test fails in the GUI
Problem:    Vim9: script test fails in the GUI.
Solution:   Use another key to map.  Improve cleanup.
2020-08-09 14:43:58 +02:00
Bram Moolenaar
3896a105eb patch 8.2.1403: Vim9: Vim highlighting may fail in cmdline window
Problem:    Vim9: Vim highlighting fails in cmdline window if it uses Vim9
            commands.
Solution:   Allow using :vim9script, :import and :export while in the cmdline
            window. (closes #6656)
2020-08-09 14:33:55 +02:00
Bram Moolenaar
94f6c06ac5 patch 8.2.1402: s390x tests always fail
Problem:    s390x tests always fail.
Solution:   Temporarily disable s390x tests.
2020-08-09 14:07:52 +02:00
Bram Moolenaar
62a232506d patch 8.2.1401: cannot jump to the last used tabpage
Problem:    Cannot jump to the last used tabpage.
Solution:   Add g<Tab> and tabpagnr('#'). (Yegappan Lakshmanan, closes #6661,
            neovim #11626)
2020-08-09 14:04:42 +02:00
Bram Moolenaar
730b248339 patch 8.2.1400: Vim9: test does not delete written files
Problem:    Vim9: test does not delete written files.
Solution:   Correct file names.
2020-08-09 13:02:10 +02:00
Bram Moolenaar
efa94447e8 patch 8.2.1399: Vim9: may find imported item in wrong script
Problem:    Vim9: may find imported item in wrong script.
Solution:   When looking up script-local function use the embedded script ID.
            (issue #6644)
2020-08-08 22:16:00 +02:00
Bram Moolenaar
daa2f36573 patch 8.2.1398: autoload script sourced twice if sourced directly
Problem:    Autoload script sourced twice if sourced directly.
Solution:   Do not source an autoload script again. (issue #6644)
2020-08-08 21:33:21 +02:00
Bram Moolenaar
4a6d1b660f patch 8.2.1397: Vim9: return type of maparg() not adjusted for fourth arg
Problem:    Vim9: return type of maparg() not adjusted for fourth argument.
Solution:   Check if fourth argument is present. (closes #6645)
2020-08-08 17:55:49 +02:00
Bram Moolenaar
5a849da57c patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Problem:    Vim9: no error for unexpectedly returning a value.
Solution:   Only set the return type for lambda's.  Make using function type
            in a function reference work.
2020-08-08 16:47:30 +02:00
Bram Moolenaar
98b4f145eb patch 8.2.1395: Vim9: no error if declaring a funcref with lower case letter
Problem:    Vim9: no error if declaring a funcref with a lower case letter.
Solution:   Check the name after the type is inferred. Fix confusing name.
2020-08-08 15:46:01 +02:00
Bram Moolenaar
2dd0a2c39a patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Problem:    Vim9: compiling a function interferes with command modifiers.
Solution:   Save and restore command modifiers. (closes #6658)
2020-08-08 15:10:27 +02:00
Bram Moolenaar
b7f4fa5177 patch 8.2.1393: insufficient testing for script debugging
Problem:    Insufficient testing for script debugging.
Solution:   Add more tests. (Ben Jackson)
2020-08-08 14:41:52 +02:00
Bram Moolenaar
bf8feb5aeb patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Problem:    Vim9: error line number incorrect after skipping over comment
            lines.
Solution:   Insert empty lines for skipped lines.
2020-08-08 14:26:31 +02:00
Bram Moolenaar
fa211f3c6d patch 8.2.1391: Vim9: no error for shadowing a script function
Problem:    Vim9: no error for shadowing a script function.
Solution:   Check for already defined items. (closes #6652)
2020-08-07 22:00:26 +02:00
Bram Moolenaar
1c199f9c70 patch 8.2.1390: Vim9: type error after storing an option value
Problem:    Vim9: type error after storing an option value.
Solution:   Drop the type after a STOREOPT instruction. (closes #6632)
2020-08-07 21:28:34 +02:00
Bram Moolenaar
74d95b5b58 patch 8.2.1389: file missing from the distribution
Problem:    File missing from the distribution.
Solution:   Add script_util.vim to the list of distributes files.
2020-08-07 20:47:39 +02:00
Bram Moolenaar
dd29f1b056 patch 8.2.1388: Vim9: += only works for numbers
Problem:    Vim9: += only works for numbers.
Solution:   Use += as concatenate for a list. (closes #6646)
2020-08-07 20:46:20 +02:00
Bram Moolenaar
e7b1ea0276 Update runtime files. 2020-08-07 19:54:59 +02:00
Bram Moolenaar
95dd9f2571 patch 8.2.1387: Vim9: cannot assign to single letter variable with type
Problem:    Vim9: cannot assign to single letter variable with type.
Solution:   Exclude the colon from the variable name. (closes #6647)
2020-08-07 19:28:08 +02:00
Bram Moolenaar
994b89d28d patch 8.2.1386: backslash not removed afer space with space in 'isfname'
Problem:    Backslash not removed afer space in option with space in
            'isfname'.
Solution:   Do remove backslash before space, also when it is in 'isfname'.
            (Yasuhiro Matsumoto, closes #6651)
2020-08-07 19:12:41 +02:00
Bram Moolenaar
de6804d871 patch 8.2.1385: no testing on ARM
Problem:    No testing on ARM.
Solution:   Add a test on Travis for ARM. (Ozaki Kiichi, closes #6615)
2020-08-07 18:33:19 +02:00
Bram Moolenaar
8ce4b7ed85 patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Problem:    No ATTENTION prompt for :vimgrep first match file.
Solution:   When there is an existing swap file do not keep the dummy buffer.
            (closes #6649)
2020-08-07 18:12:18 +02:00
Bram Moolenaar
9470a4d88a patch 8.2.1383: test 49 is old style
Problem:    Test 49 is old style.
Solution:   Convert test cases to new style. (Yegappan Lakshmanan,
            closes #6638)
2020-08-07 16:49:11 +02:00
Bram Moolenaar
8e1986e389 patch 8.2.1382: Vim9: using :import in filetype plugin gives an error
Problem:    Vim9: using :import in filetype plugin gives an error.
Solution:   Allow commands with the EX_LOCK_OK flag. (closes #6636)
2020-08-06 22:11:06 +02:00
Bram Moolenaar
56b8dc331d patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Problem:    MS-Windows: crash with Python 3.5 when stdin is redirected.
Solution:   Reconnect stdin. (Yasuhiro Matsumoto, Ken Takata, closes #6641)
2020-08-06 21:47:11 +02:00
Bram Moolenaar
3d945cc925 patch 8.2.1380: Vim9: return type of getreg() is always a string
Problem:    Vim9: return type of getreg() is always a string.
Solution:   Use list of strings when there are three arguments. (closes #6633)
2020-08-06 21:26:59 +02:00
Bram Moolenaar
ae95a3946b patch 8.2.1379: curly braces expression ending in " }" does not work
Problem:    Curly braces expression ending in " }" does not work.
Solution:   Skip over white space when checking for "}". (closes #6634)
2020-08-06 16:38:12 +02:00
Bram Moolenaar
bbd3e3c357 patch 8.2.1378: cannot put space between function name and paren
Problem:    Cannot put space between function name and paren.
Solution:   Allow this for backwards compatibility.
2020-08-06 11:23:36 +02:00
Bram Moolenaar
b8d732e93e patch 8.2.1377: triggering the ATTENTION prompt causes typeahead mess up
Problem:    Triggering the ATTENTION prompt causes typeahead to be messed up.
Solution:   Increment tb_change_cnt. (closes #6541)
2020-08-05 22:07:26 +02:00
Bram Moolenaar
803af686e2 patch 8.2.1376: Vim9: expression mapping causes error for using :import
Problem:    Vim9: expression mapping causes error for using :import.
Solution:   Add EX_LOCK_OK to :import and :export. (closes 3606)
2020-08-05 16:20:03 +02:00
Bram Moolenaar
c5da1fb7ea patch 8.2.1375: Vim9: method name with digit not accepted
Problem:    Vim9: method name with digit not accepted.
Solution:   Use eval_isnamec() instead of eval_isnamec1(). (closes #6613)
2020-08-05 15:43:44 +02:00
Bram Moolenaar
a71e263320 patch 8.2.1374: Vim9: error for assigning empty list to script variable
Problem:    Vim9: error for assigning empty list to script variable.
Solution:   Use t_unknown for empty list member. (closes #6595)
2020-08-05 15:11:03 +02:00
Bram Moolenaar
f9b2b49663 patch 8.2.1373: Vim9: no error for assigning to non-existing script var
Problem:    Vim9: no error for assigning to non-existing script var.
Solution:   Check that in Vim9 script the variable was defined. (closes #6630)
2020-08-05 14:34:14 +02:00
Bram Moolenaar
fdac71c507 patch 8.2.1372: Vim9: no error for missing white space around operator
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around ? and :.
2020-08-05 12:44:41 +02:00
Bram Moolenaar
3c1c9fd94b patch 8.2.1371: Vim9: no error for missing white space around operator
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around && and ||.
2020-08-05 12:32:38 +02:00
Bram Moolenaar
c753478b82 patch 8.2.1370: MS-Windows: warning for using fstat() with stat_T
Problem:    MS-Windows: warning for using fstat() with stat_T.
Solution:   use _fstat64() if available. (Naruhiko Nishino, closes #6625)
2020-08-05 12:10:50 +02:00
Bram Moolenaar
14ddd226da patch 8.2.1369: MS-Windows: autocommand test sometimes fails
Problem:    MS-Windows: autocommand test sometimes fails.
Solution:   Do not rely on the cat command.
2020-08-05 12:02:40 +02:00
Bram Moolenaar
ff1cd39cfe patch 8.2.1368: Vim9: no error for missing white space around operator
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around <, !=, etc.
2020-08-05 11:51:30 +02:00
Bram Moolenaar
b4caa163ff patch 8.2.1367: Vim9: no error for missing white space around operator
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around *, / and %.
2020-08-05 11:36:52 +02:00
Bram Moolenaar
a6296200bd patch 8.2.1366: test 49 is old style
Problem:    Test 49 is old style.
Solution:   Convert several tests to new style. (Yegappan Lakshmanan,
            closes #6629)
2020-08-05 11:23:13 +02:00
Bram Moolenaar
bb1b5e24ec patch 8.2.1365: Vim9: no error for missing white space around operator
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space. (closes #6618)
2020-08-05 10:53:21 +02:00
Bram Moolenaar
282f9c64e5 patch 8.2.1364: invalid memory access when searching for raw string
Problem:    Invalid memory access when searching for raw string.
Solution:   Check for delimiter match before following quote. (closes #6578)
2020-08-04 21:46:18 +02:00
Bram Moolenaar
e46a2ed0d8 patch 8.2.1363: test trying to run terminal when it is not supported
Problem:    Test trying to run terminal when it is not supported.
Solution:   Check if Vim can be run in a terminal.
2020-08-04 21:04:57 +02:00
Bram Moolenaar
ecd34bf55d patch 8.2.1362: last entry of ":set term=xxx" overwritten by error message
Problem:    Last entry of ":set term=xxx" overwritten by error message when
            'cmdheight' is two or more. (Tony Mechelynck)
Solution:   Output extra line breaks.
2020-08-04 20:17:31 +02:00
Bram Moolenaar
6a25026262 patch 8.2.1361: error for white space after expression in assignment
Problem:    Error for white space after expression in assignment.
Solution:   Skip over white space. (closes #6617)
2020-08-04 15:53:01 +02:00
Bram Moolenaar
f96e9dec63 patch 8.2.1360: stray error for white space after expression
Problem:    Stray error for white space after expression.
Solution:   Ignore trailing white space. (closes #6608)
2020-08-03 22:39:28 +02:00
Bram Moolenaar
8314454648 patch 8.2.1359: Vim9: cannot assign to / register in Vim9 script
Problem:    Vim9: cannot assign to / register in Vim9 script.
Solution:   Adjust check for assignment in Vim9 script. (closes #6567)
2020-08-02 20:40:43 +02:00
Bram Moolenaar
434d72cbf2 patch 8.2.1358: Vim9: test fails with +dnd is not available
Problem:    Vim9: test fails with +dnd is not available.
Solution:   Add condition.
2020-08-02 20:03:25 +02:00
Bram Moolenaar
658217276f patch 8.2.1357: Vim9: cannot assign to / register
Problem:    Vim9: cannot assign to / register.
Solution:   Adjust check for assignment.
2020-08-02 18:58:54 +02:00
Bram Moolenaar
7226e5b19b patch 8.2.1356: Vim9: cannot get the percent register
Problem:    Vim9: cannot get the percent register.
Solution:   Check for readable registers instead of writable. (closes #6566)
2020-08-02 17:33:26 +02:00
Bram Moolenaar
c2ee44cc38 patch 8.2.1355: Vim9: no error using :let for options and registers
Problem:    Vim9: no error using :let for options and registers.
Solution:   Give an error. (closes #6568)
2020-08-02 16:59:00 +02:00
Bram Moolenaar
aa970abd0a patch 8.2.1354: test 59 is old style
Problem:    Test 59 is old style.
Solution:   Convert into a new style test. (Yegappan Lakshmanan, closes #6604)
2020-08-02 16:10:39 +02:00
Bram Moolenaar
8b89614e69 patch 8.2.1353: crash when drawing double-wide character in terminal window
Problem:    Crash when drawing double-wide character in terminal window.
            (Masato Nishihata)
Solution:   Check getcell() returning NULL. (issue #6141)
2020-08-02 15:05:05 +02:00
Bram Moolenaar
ad486a0f0d patch 8.2.1352: Vim9: no error for shadowing a script-local function
Problem:    Vim9: no error for shadowing a script-local function by a nested
            function.
Solution:   Check for script-local function. (closes #6586)
2020-08-01 23:22:18 +02:00
Bram Moolenaar
bcbf41395f patch 8.2.1351: Vim9: no proper error if using namespace for nested function
Problem:    Vim9: no proper error if using namespace for nested function.
Solution:   Specifically check for a namespace. (closes #6582)
2020-08-01 22:35:13 +02:00
Bram Moolenaar
b9a2cac3ef patch 8.2.1350: Vim9: no test for error message when redefining function
Problem:    Vim9: no test for error message when redefining function.
Solution:   Add a test.
2020-08-01 22:23:20 +02:00
Bram Moolenaar
eef2102e20 patch 8.2.1349: Vim9: can define a function with the name of an import
Problem:    Vim9: can define a function with the name of an import.
Solution:   Disallow using an existing name. (closes #6585)
2020-08-01 22:16:43 +02:00
Bram Moolenaar
e4218b9416 patch 8.2.1348: build failure without the eval feature
Problem:    Build failure without the eval feature.
Solution:   Add #ifdef.
2020-08-01 21:11:38 +02:00
Bram Moolenaar
909443028b patch 8.2.1347: cannot easily get the script ID
Problem:    Cannot easily get the script ID.
Solution:   Support expand('<SID>').
2020-08-01 20:45:11 +02:00
Bram Moolenaar
491799be50 patch 8.2.1346: small build fails
Problem:    Small build fails.
Solution:   Add #ifdef.
2020-08-01 19:23:43 +02:00
Bram Moolenaar
f8992d47cd patch 8.2.1345: Redraw error when using visual block and scroll
Problem:    Redraw error when using visual block and scroll.
Solution:   Add check for w_topline. ( closes #6597)
2020-08-01 19:14:13 +02:00
Bram Moolenaar
2c79e9d14d patch 8.2.1344: Vim9: No test for trying to redefine global function
Problem:    Vim9: No test for trying to redefine global function.
Solution:   Add a test.
2020-08-01 18:57:52 +02:00
Bram Moolenaar
333894b195 patch 8.2.1343: Vim9: cannot find global function when using g:
Problem:    Vim9: cannot find global function when using g: when local
            function with the same name exists.
Solution:   Find global function when using g:.
2020-08-01 18:53:07 +02:00
Bram Moolenaar
f5a48010ef patch 8.2.1342: Vim9: accidentally using "t" gives a confusing error
Problem:    Vim9: accidentally using "x" gives a confusing error.
Solution:   Disallow using ":t" in Vim9 script. (issue #6399)
2020-08-01 17:00:03 +02:00
Bram Moolenaar
2ec208172c patch 8.2.1341: build failures
Problem:    Build failures.
Solution:   Add missing error message.
2020-08-01 16:35:08 +02:00
Bram Moolenaar
b86abadf87 patch 8.2.1340: some tests fail on Cirrus CI and/or with FreeBSD
Problem:    Some tests fail on Cirrus CI and/or with FreeBSD.
Solution:   Make 'backupskip' empty. Do not run tests as root. Check for
            directory when using viminfo. (Ozaki Kiichi, closes #6596)
2020-08-01 16:08:19 +02:00
Bram Moolenaar
2caa1594e7 patch 8.2.1339: Vim9: assigning to global dict variable doesn't work
Problem:    Vim9: assigning to global dict variable doesn't work.
Solution:   Guess variable type based in index type. (issue #6591)
2020-08-01 15:53:19 +02:00
Bram Moolenaar
8e4c8c853e patch 8.2.1338: Vim9: assigning to script-local variable doesn't check type
Problem:    Vim9: assigning to script-local variable doesn't check type.
Solution:   Use the type. (issue #6591)
2020-08-01 15:38:38 +02:00
Bram Moolenaar
586268721d patch 8.2.1337: Vim9: cannot use empty key in dict assignment
Problem:    Vim9: cannot use empty key in dict assignment.
Solution:   Allow empty key. (closes #6591)
2020-08-01 14:06:38 +02:00
Bram Moolenaar
af50e899e7 patch 8.2.1336: build failure on non-Unix systems
Problem:    Build failure on non-Unix systems.
Solution:   Add #ifdef.
2020-08-01 13:22:10 +02:00
Bram Moolenaar
4e1d8bd79b patch 8.2.1335: CTRL-C in the GUI doesn't interrupt
Problem:    CTRL-C in the GUI doesn't interrupt. (Sergey Vlasov)
Solution:   Recognize "C" with CTRL modifier as CTRL-C. (issue #6565)
2020-08-01 13:10:14 +02:00
Bram Moolenaar
b53da7918c patch 8.2.1334: Github workflow timeout needs tuning
Problem:    Github workflow timeout needs tuning
Solution:   Use a 10 minute timeout. Fail when timing out. (Ken Takata,
            closes #6590)
2020-08-01 12:26:04 +02:00
Bram Moolenaar
af8edbb8dc patch 8.2.1333: Vim9: memory leak when using nested global function
Problem:    Vim9: memory leak when using nested global function.
Solution:   Swap from and to when copying the lines.
2020-08-01 00:03:09 +02:00
Bram Moolenaar
ce6583568f patch 8.2.1332: Vim9: memory leak when using nested global function
Problem:    Vim9: memory leak when using nested global function.
Solution:   Delete the function when deleting the instruction.  Disable test
            that still causes a leak.
2020-07-31 23:47:12 +02:00
Bram Moolenaar
badd8486f7 patch 8.2.1331: Vim9: :echo with two lists doesn't work
Problem:    Vim9: :echo with two lists doesn't work.
Solution:   Do not skip white space before []. (closes #6552)
2020-07-31 22:38:17 +02:00
518 changed files with 34237 additions and 24567 deletions

View File

@@ -11,6 +11,9 @@ freebsd_12_task:
- NPROC=$(getconf _NPROCESSORS_ONLN) - NPROC=$(getconf _NPROCESSORS_ONLN)
- ./configure --with-features=${FEATURES} - ./configure --with-features=${FEATURES}
- make -j${NPROC} - make -j${NPROC}
- src/vim --version
test_script: test_script:
- make test - src/vim --version
# run tests as user "cirrus" instead of root
- pw useradd cirrus -m
- chown -R cirrus:cirrus .
- sudo -u cirrus make test

92
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,92 @@
# Lines starting with '#' are comments.
# Each line is a file pattern followed by one or more owners.
# You can use github users with @user or email addresses
# These owners will be the default owners for everything in the repo.
* @brammool
# Order is important. The last matching pattern has the most precedence.
# So if a pull request only touches javascript files, only these owners
# will be requested to review.
src/libvterm/* @leonerd
runtime/autoload/getscript.vim @cecamp
runtime/autoload/netrw.vim @cecamp
runtime/autoload/netrwFileHandlers.vim @cecamp
runtime/autoload/netrwSettings.vim @cecamp
runtime/autoload/tar.vim @cecamp
runtime/autoload/vimball.vim @cecamp
runtime/autoload/zip.vim @cecamp
runtime/compiler/checkstyle.vim @dkearns
runtime/compiler/dart.vim @dkearns
runtime/compiler/dart2js.vim @dkearns
runtime/compiler/dart2native.vim @dkearns
runtime/compiler/dartanalyser.vim @dkearns
runtime/compiler/dartdevc.vim @dkearns
runtime/compiler/dartdoc.vim @dkearns
runtime/compiler/dartfmt.vim @dkearns
runtime/compiler/eruby.vim @dkearns
runtime/compiler/gawk.vim @dkearns
runtime/compiler/gjs.vim @dkearns
runtime/compiler/javac.vim @dkearns
runtime/compiler/jest.vim @dkearns
runtime/compiler/jjs.vim @dkearns
runtime/compiler/jshint.vim @dkearns
runtime/compiler/jsonlint.vim @dkearns
runtime/compiler/php.vim @dkearns
runtime/compiler/rhino.vim @dkearns
runtime/compiler/rubocop.vim @dkearns
runtime/compiler/rubyunit.vim @dkearns
runtime/compiler/se.vim @dkearns
runtime/compiler/stylelint.vim @dkearns
runtime/compiler/tcl.vim @dkearns
runtime/compiler/tidy.vim @dkearns
runtime/compiler/ts-node.vim @dkearns
runtime/compiler/tsc.vim @dkearns
runtime/compiler/typedoc.vim @dkearns
runtime/compiler/xmllint.vim @dkearns
runtime/compiler/xo.vim @dkearns
runtime/doc/pi_getscript.txt @cecamp
runtime/doc/pi_logipat.txt @cecamp
runtime/doc/pi_netrw.txt @cecamp
runtime/doc/pi_tar.txt @cecamp
runtime/doc/pi_vimball.txt @cecamp
runtime/doc/pi_zip.txt @cecamp
runtime/ftplugin/css.vim @dkearns
runtime/ftplugin/eiffel.vim @dkearns
runtime/ftplugin/javascript.vim @dkearns
runtime/ftplugin/javascriptreact.vim @dkearns
runtime/ftplugin/typescript.vim @dkearns
runtime/ftplugin/typescriptreact.vim @dkearns
runtime/plugin/amiga.vim @cecamp
runtime/plugin/csh.vim @cecamp
runtime/plugin/dcl.vim @cecamp
runtime/plugin/exports.vim @cecamp
runtime/plugin/getscriptPlugin.vim @cecamp
runtime/plugin/lex.vim @cecamp
runtime/plugin/lisp.vim @cecamp
runtime/plugin/logiPat.vim @cecamp
runtime/plugin/maple.vim @cecamp
runtime/plugin/netrw.vim @cecamp
runtime/plugin/netrwPlugin.vim @cecamp
runtime/plugin/rpcgen.vim @cecamp
runtime/plugin/sh.vim @cecamp
runtime/plugin/sm.vim @cecamp
runtime/plugin/tags.vim @cecamp
runtime/plugin/tarPlugin.vim @cecamp
runtime/plugin/tex.vim @cecamp
runtime/plugin/vim.vim @cecamp
runtime/plugin/vimballPlugin.vim @cecamp
runtime/plugin/wlmfilt.vim @cecamp
runtime/plugin/xmath.vim @cecamp
runtime/plugin/xxd.vim @cecamp
runtime/plugin/yacc.vim @cecamp
runtime/plugin/zipPlugin.vim @cecamp
runtime/syntax/lynx.vim @dkearns
runtime/syntax/mailcap.vim @dkearns
runtime/syntax/privoxy.vim @dkearns
runtime/syntax/ruby.vim @dkearns
runtime/syntax/tidy.vim @dkearns
runtime/syntax/wget.vim @dkearns
runtime/syntax/xbl.vim @dkearns

View File

@@ -127,6 +127,11 @@ jobs:
) )
goto :eof goto :eof
- name: Copy src directory to src2
shell: cmd
run: |
xcopy src src2\ /E > nul
- name: Build (MSVC) - name: Build (MSVC)
if: matrix.toolchain == 'msvc' if: matrix.toolchain == 'msvc'
shell: cmd shell: cmd
@@ -196,10 +201,6 @@ jobs:
echo %COL_GREEN%vim version:%COL_RESET% echo %COL_GREEN%vim version:%COL_RESET%
.\vim --version || exit 1 .\vim --version || exit 1
mkdir ..\src2
xcopy testdir ..\src2\testdir\ /E > nul || exit 1
copy evalfunc.c ..\src2 > nul
echo %COL_GREEN%Start testing vim in background.%COL_RESET% echo %COL_GREEN%Start testing vim in background.%COL_RESET%
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt" start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
@@ -210,14 +211,18 @@ jobs:
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET% echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET%
cd ..\src2\testdir cd ..\src2\testdir
:: Wait about 5 minutes. :: Wait about 10 minutes.
for /L %%i in (1,1,300) do ( for /L %%i in (1,1,600) do (
if exist done.txt goto exitloop if exist done.txt goto exitloop
ping -n 2 localhost > nul ping -n 2 localhost > nul
) )
echo %COL_RED%Timed out.%COL_RESET% set timeout=1
:exitloop :exitloop
echo %COL_GREEN%Test results of vim:%COL_RESET% echo %COL_GREEN%Test results of vim:%COL_RESET%
if exist messages type messages if exist messages type messages
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1 nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1
if "%timeout%"=="1" (
echo %COL_RED%Timed out.%COL_RESET%
exit 1
)

View File

@@ -1,26 +1,32 @@
language: c language: c
env:
global:
- BUILD=yes TEST=test CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no LOG_DIR="$TRAVIS_BUILD_DIR/logs"
_anchors: _anchors:
envs: envs:
- &tiny-nogui - &tiny-nogui
BUILD=yes TEST=test FEATURES=tiny CONFOPT="--disable-gui" LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no FEATURES=tiny TEST=testtiny CONFOPT="--disable-gui"
- &tiny - &tiny
BUILD=yes TEST=test FEATURES=tiny CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no FEATURES=tiny TEST=testtiny
- &small - &small
BUILD=yes TEST=test FEATURES=small CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no FEATURES=small TEST=testtiny
- &normal - &normal
BUILD=yes TEST=test FEATURES=normal CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no FEATURES=normal
- &linux-huge - &linux-huge
BUILD=yes TEST="scripttests test_libvterm" CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no FEATURES=huge TEST="scripttests test_libvterm"
CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
- &osx-huge # macOS build - &osx-huge # macOS build
BUILD=yes TEST=test FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no FEATURES=huge
CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp" CONFOPT="--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
- &unittests - &unittests
BUILD=no TEST=unittests CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes BUILD=no TEST=unittests FEATURES=huge CHECK_AUTOCONF=yes
- &coverage
CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage
- &asan # ASAN build - &asan # ASAN build
SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" ASAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/asan" UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
- &shadowopt - &shadowopt
SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow
@@ -29,7 +35,7 @@ _anchors:
dist: bionic dist: bionic
addons: addons:
apt: apt:
packages: packages: &apt-packages
- autoconf - autoconf
- clang - clang
- lcov - lcov
@@ -63,7 +69,11 @@ _anchors:
fi fi
before_script: before_script:
- sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 - sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
- sudo bash ci/load-snd-dummy.sh || true # It appears we can load "snd-dummy" on only amd64.
- |
if [[ "${TRAVIS_CPU_ARCH}" = amd64 ]]; then
sudo bash ci/load-snd-dummy.sh || true
fi
- sudo usermod -a -G audio $USER - sudo usermod -a -G audio $USER
- do_test() { sg audio "sg $(id -gn) '$*'"; } - do_test() { sg audio "sg $(id -gn) '$*'"; }
@@ -87,7 +97,7 @@ _anchors:
# Lua is not installed on macOS # Lua is not installed on macOS
- export LUA_PREFIX=/usr/local - export LUA_PREFIX=/usr/local
coverage: &coverage coverage: &eval-coverage
# needed for https support for coveralls building cffi only works with gcc, # needed for https support for coveralls building cffi only works with gcc,
# not with clang # not with clang
- CC=gcc pip install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1 - CC=gcc pip install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1
@@ -98,13 +108,14 @@ _anchors:
# Update pyenv to fix the error "/opt/pyenv/libexec/pyenv: line 43: cd: asan_symbolize-6.0: Not a directory". # Update pyenv to fix the error "/opt/pyenv/libexec/pyenv: line 43: cd: asan_symbolize-6.0: Not a directory".
# https://github.com/pyenv/pyenv/issues/580 # https://github.com/pyenv/pyenv/issues/580
- (cd "${PYENV_ROOT}" && git fetch -p origin && git checkout "$(git rev-list --tags -n1)") &>/dev/null || true - (cd "${PYENV_ROOT}" && git fetch -p origin && git checkout "$(git rev-list --tags -n1)") &>/dev/null || true
- find . -type f -name 'asan.*' -size +0 2>/dev/null | xargs grep -l '^==[[:digit:]]*==ERROR:' | xargs -I{} -n1 -t asan_symbolize -l{} - for f in $(grep -l '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "$LOG_DIR"/*); do asan_symbolize-11 -l "$f"; done
branches: branches:
except: except:
- /^v[0-9]/ - /^v[0-9]/
script: script:
- mkdir -p "$LOG_DIR"
- NPROC=$(getconf _NPROCESSORS_ONLN) - NPROC=$(getconf _NPROCESSORS_ONLN)
- set -o errexit - set -o errexit
- echo -e "\\033[33;1mConfiguring Vim\\033[0m" && echo -en "travis_fold:start:configure\\r\\033[0K" - echo -e "\\033[33;1mConfiguring Vim\\033[0m" && echo -en "travis_fold:start:configure\\r\\033[0K"
@@ -125,7 +136,7 @@ script:
# Append various warning flags to CFLAGS. # Append various warning flags to CFLAGS.
# BSD sed needs backup extension specified. # BSD sed needs backup extension specified.
sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
if [[ "${TRAVIS_OS_NAME}" = "osx" ]]; then if [[ "${TRAVIS_OS_NAME}" = "osx" ]] || [[ "${CC}" = "clang-11" ]]; then
# On macOS, the entity of gcc is clang. # On macOS, the entity of gcc is clang.
sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk
else else
@@ -145,6 +156,15 @@ script:
- echo -e "\\033[33;1mTesting Vim\\033[0m" && echo -en "travis_fold:start:test\\r\\033[0K" - echo -e "\\033[33;1mTesting Vim\\033[0m" && echo -en "travis_fold:start:test\\r\\033[0K"
- do_test make ${SHADOWOPT} ${TEST} && FOLD_MARKER=travis_fold - do_test make ${SHADOWOPT} ${TEST} && FOLD_MARKER=travis_fold
- echo -en "${FOLD_MARKER}:end:test\\r\\033[0K" - echo -en "${FOLD_MARKER}:end:test\\r\\033[0K"
- |
# Not all sanitizers will cause the tests to fail. This helps since we can
# see all the failures instead of just the first one, but we still want the
# test phase to fail if any sanitizer issues are detected.
if [[ -n "${ASAN_OPTIONS}" ]]; then
if grep -q '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "$LOG_DIR"/*; then
false
fi
fi
# Instead of using all environments with both compilers on both systems, # Instead of using all environments with both compilers on both systems,
# exclude some builds on mac os x and linux. # exclude some builds on mac os x and linux.
@@ -208,22 +228,39 @@ jobs:
compiler: gcc compiler: gcc
env: *linux-huge env: *linux-huge
services: [] services: []
- <<: *linux
arch: arm64
name: huge/gcc-arm64
compiler: gcc
env: *linux-huge
services: []
- <<: *linux - <<: *linux
name: huge+coverage/clang name: huge+coverage/clang
compiler: clang compiler: clang
env: env:
- *linux-huge - *linux-huge
- *coverage
# Clang cannot compile test_libvterm with "--coverage" flag. # Clang cannot compile test_libvterm with "--coverage" flag.
- TEST=scripttests - TEST=scripttests
after_success: *coverage after_success: *eval-coverage
- <<: *linux - <<: *linux
name: huge+coverage/gcc name: huge+coverage/gcc
compiler: gcc compiler: gcc
env: *linux-huge env:
after_success: *coverage - *linux-huge
- *coverage
after_success: *eval-coverage
- <<: *linux # ASAN - <<: *linux # ASAN
name: huge+asan/gcc name: huge+asan/clang
compiler: gcc compiler: clang-11
addons:
apt:
sources:
- sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
packages:
- *apt-packages
- clang-11
env: env:
- *linux-huge - *linux-huge
- *asan - *asan
@@ -233,13 +270,16 @@ jobs:
compiler: gcc compiler: gcc
env: env:
- *linux-huge - *linux-huge
- *coverage
- TEST="-C src testgui" - TEST="-C src testgui"
after_success: *coverage after_success: *eval-coverage
- <<: *linux - <<: *linux
name: unittests+coverage/gcc name: unittests+coverage/gcc
compiler: gcc compiler: gcc
env: *unittests env:
after_success: *coverage - *unittests
- *coverage
after_success: *eval-coverage
- <<: *linux - <<: *linux
name: vimtags/gcc name: vimtags/gcc
compiler: gcc compiler: gcc

View File

@@ -10,6 +10,7 @@ SRC_ALL = \
.travis.yml \ .travis.yml \
.cirrus.yml \ .cirrus.yml \
.github/workflows/ci-windows.yaml \ .github/workflows/ci-windows.yaml \
.github/CODEOWNERS \
appveyor.yml \ appveyor.yml \
ci/appveyor.bat \ ci/appveyor.bat \
ci/if_ver*.vim \ ci/if_ver*.vim \
@@ -45,6 +46,7 @@ SRC_ALL = \
src/drawline.c \ src/drawline.c \
src/drawscreen.c \ src/drawscreen.c \
src/edit.c \ src/edit.c \
src/errors.h \
src/eval.c \ src/eval.c \
src/evalbuffer.c \ src/evalbuffer.c \
src/evalfunc.c \ src/evalfunc.c \
@@ -73,6 +75,7 @@ SRC_ALL = \
src/highlight.c \ src/highlight.c \
src/indent.c \ src/indent.c \
src/insexpand.c \ src/insexpand.c \
src/job.c \
src/json.c \ src/json.c \
src/json_test.c \ src/json_test.c \
src/kword_test.c \ src/kword_test.c \
@@ -149,6 +152,7 @@ SRC_ALL = \
src/vim9compile.c \ src/vim9compile.c \
src/vim9execute.c \ src/vim9execute.c \
src/vim9script.c \ src/vim9script.c \
src/vim9type.c \
src/viminfo.c \ src/viminfo.c \
src/winclip.c \ src/winclip.c \
src/window.c \ src/window.c \
@@ -172,12 +176,12 @@ SRC_ALL = \
src/testdir/setup_gui.vim \ src/testdir/setup_gui.vim \
src/testdir/shared.vim \ src/testdir/shared.vim \
src/testdir/vim9.vim \ src/testdir/vim9.vim \
src/testdir/script_util.vim \
src/testdir/summarize.vim \ src/testdir/summarize.vim \
src/testdir/term_util.vim \ src/testdir/term_util.vim \
src/testdir/view_util.vim \ src/testdir/view_util.vim \
src/testdir/test[0-9]*.ok \ src/testdir/test[0-9]*.ok \
src/testdir/test[0-9]*a.ok \ src/testdir/test77a.ok \
src/testdir/test49.vim \
src/testdir/test83-tags? \ src/testdir/test83-tags? \
src/testdir/test77a.com \ src/testdir/test77a.com \
src/testdir/test_*.vim \ src/testdir/test_*.vim \
@@ -247,6 +251,7 @@ SRC_ALL = \
src/proto/highlight.pro \ src/proto/highlight.pro \
src/proto/indent.pro \ src/proto/indent.pro \
src/proto/insexpand.pro \ src/proto/insexpand.pro \
src/proto/job.pro \
src/proto/json.pro \ src/proto/json.pro \
src/proto/list.pro \ src/proto/list.pro \
src/proto/locale.pro \ src/proto/locale.pro \
@@ -303,6 +308,7 @@ SRC_ALL = \
src/proto/vim9compile.pro \ src/proto/vim9compile.pro \
src/proto/vim9execute.pro \ src/proto/vim9execute.pro \
src/proto/vim9script.pro \ src/proto/vim9script.pro \
src/proto/vim9type.pro \
src/proto/viminfo.pro \ src/proto/viminfo.pro \
src/proto/winclip.pro \ src/proto/winclip.pro \
src/proto/window.pro \ src/proto/window.pro \
@@ -638,13 +644,11 @@ SRC_HAIKU = \
SRC_MAC = \ SRC_MAC = \
src/INSTALLmac.txt \ src/INSTALLmac.txt \
src/dehqx.py \ src/dehqx.py \
src/gui_mac.c \
src/os_mac_rsrc/*.icns \ src/os_mac_rsrc/*.icns \
src/os_mac.h \ src/os_mac.h \
src/os_mac.rsr.hqx \ src/os_mac.rsr.hqx \
src/os_mac_conv.c \ src/os_mac_conv.c \
src/os_macosx.m \ src/os_macosx.m \
src/proto/gui_mac.pro \
src/proto/os_mac_conv.pro \ src/proto/os_mac_conv.pro \
# source files for VMS (in the extra archive) # source files for VMS (in the extra archive)
@@ -1027,6 +1031,8 @@ LANG_SRC = \
src/po/README_mvc.txt \ src/po/README_mvc.txt \
src/po/check.vim \ src/po/check.vim \
src/po/cleanup.vim \ src/po/cleanup.vim \
src/po/tojavascript.vim \
src/po/fixfilenames.vim \
src/po/Makefile \ src/po/Makefile \
src/po/Make_all.mak \ src/po/Make_all.mak \
src/po/Make_cyg.mak \ src/po/Make_cyg.mak \

View File

@@ -32,7 +32,7 @@ first:
# Some make programs use the last target for the $@ default; put the other # Some make programs use the last target for the $@ default; put the other
# targets separately to always let $@ expand to "first" by default. # targets separately to always let $@ expand to "first" by default.
all install uninstall tools config configure reconfig proto depend lint tags types test scripttests test_libvterm unittests testclean clean distclean: all install uninstall tools config configure reconfig proto depend lint tags types test scripttests testtiny test_libvterm unittests testclean clean distclean:
@if test ! -f src/auto/config.mk; then \ @if test ! -f src/auto/config.mk; then \
cp src/config.mk.dist src/auto/config.mk; \ cp src/config.mk.dist src/auto/config.mk; \
fi fi

View File

@@ -5,8 +5,8 @@
This is an experimental side of [Vim](https://github.com/vim/vim). This is an experimental side of [Vim](https://github.com/vim/vim).
It explores ways of making Vim script faster and better. It explores ways of making Vim script faster and better.
WARNING: The Vim9 script features are in the early stages of development, WARNING: The Vim9 script features are still under development, anything can
anything can break! break!
# Why Vim9? # Why Vim9?
@@ -52,7 +52,7 @@ we can gain, and also that Vim script can be faster than builtin
interfaces. interfaces.
In practice the script would not do something useless as counting but change In practice the script would not do something useless as counting but change
the text. For example, re-indent all the lines: the text. For example, reindent all the lines:
``` vim ``` vim
let totallen = 0 let totallen = 0
@@ -91,14 +91,14 @@ Instead of using script language support in Vim:
with them. The job and channel support already makes this possible. with them. The job and channel support already makes this possible.
Really any language can be used, also Java and Go, which are not Really any language can be used, also Java and Go, which are not
available built-in. available built-in.
* Phase out the built-in language interfaces, make maintenance a bit easier * No priority for the built-in language interfaces. They will have to be kept
and executables easier to build. They will be kept for backwards for backwards compatibility, but many users won't need a Vim build with these
compatibility, no new features. interfaces.
* Improve the Vim script language, it is used to communicate with the external * Improve the Vim script language, it is used to communicate with the external
tool and implements the Vim side of the interface. Also, it can be used when tool and implements the Vim side of the interface. Also, it can be used when
an external tool is undesired. an external tool is undesired.
All together this creates a clear situation: Vim with the +eval feature Altogether this creates a clear situation: Vim with the +eval feature
will be sufficient for most plugins, while some plugins require will be sufficient for most plugins, while some plugins require
installing a tool that can be written in any language. No confusion installing a tool that can be written in any language. No confusion
about having Vim but the plugin not working because some specific about having Vim but the plugin not working because some specific
@@ -140,6 +140,9 @@ Taking this one step further is also dropping "s:" for script-local variables;
everything at the script level is script-local by default. Since this is not everything at the script level is script-local by default. Since this is not
backwards compatible it requires a new script style: Vim9 script! backwards compatible it requires a new script style: Vim9 script!
To avoid having more variations, the syntax inside a compiled function is the
same as in Vim9 script. Thus you have legacy syntax and Vim9 syntax.
It should be possible to convert code from other languages to Vim It should be possible to convert code from other languages to Vim
script. We can add functionality to make this easier. This still needs script. We can add functionality to make this easier. This still needs
to be discussed, but we can consider adding type checking and a simple to be discussed, but we can consider adding type checking and a simple

View File

@@ -16,7 +16,6 @@ src/os_amiga.* Files for the Amiga port.
src/os_msdos.* src/os_msdos.*
src/os_dos.* Files for the MS-DOS port. src/os_dos.* Files for the MS-DOS port.
src/gui_mac.*
src/os_mac.* Files for the Mac port. src/os_mac.* Files for the Mac port.
src/os_vms* Files for the VMS port. src/os_vms* Files for the VMS port.

View File

@@ -3,6 +3,6 @@ set -e
if ! modprobe snd-dummy; then if ! modprobe snd-dummy; then
# snd-dummy is contained in linux-modules-extra (if exists) # snd-dummy is contained in linux-modules-extra (if exists)
apt install -y "linux-modules-extra-$(uname -r)" apt-get install -yq --no-install-suggests --no-install-recommends "linux-modules-extra-$(uname -r)"
modprobe snd-dummy modprobe snd-dummy
fi fi

View File

@@ -1,7 +1,7 @@
" Vim functions for file type detection " Vim functions for file type detection
" "
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Mar 30 " Last Change: 2020 Aug 17
" These functions are moved here from runtime/filetype.vim to make startup " These functions are moved here from runtime/filetype.vim to make startup
" faster. " faster.
@@ -575,7 +575,7 @@ endfunc
let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*' let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
func dist#ft#FTRules() func dist#ft#FTRules()
let path = expand('<amatch>:p') let path = expand('<amatch>:p')
if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$' if path =~ '/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|\%(usr/\)\=lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
setf udevrules setf udevrules
return return
endif endif

View File

@@ -1,7 +1,9 @@
" Vim completion script " Vim completion script
" Language: Java Script " Language: Java Script
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) " Maintainer: Jay Sitter (jay@jaysitter.com)
" Last Change: 2017 Mar 04 " URL: https://github.com/jsit/javascriptcomplete.vim/
" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
" Last Change: 2020 Jul 30
function! javascriptcomplete#CompleteJS(findstart, base) function! javascriptcomplete#CompleteJS(findstart, base)
if a:findstart if a:findstart
@@ -154,12 +156,30 @@ function! javascriptcomplete#CompleteJS(findstart, base)
\ 'text', 'vLink'] \ 'text', 'vLink']
let bodys = bodyprop let bodys = bodyprop
" Document - document. " Document - document.
let docuprop = ['anchors', 'applets', 'childNodes', 'embeds', 'forms', 'images', 'links', 'stylesheets', let docuprop = ['anchors', 'body', 'characterSet', 'doctype',
\ 'body', 'cookie', 'documentElement', 'domain', 'lastModified', 'referrer', 'title', 'URL'] \ 'documentElement', 'documentURI', 'embeds', 'fonts', 'forms',
let documeth = ['close', 'createAttribute', 'createElement', 'createTextNode', 'focus', 'getElementById', \ 'head', 'hidden', 'images', 'implementation', 'lastStyleSheetSet',
\ 'getElementsByName', 'getElementsByTagName', 'open', 'write', 'writeln', \ 'links', 'plugins', 'preferredStyleSheetSet', 'scripts',
\ 'onClick', 'onDblClick', 'onFocus', 'onKeyDown', 'onKeyPress', 'onKeyUp', \ 'scrollingElement', 'selectedStyleSheetSet', 'styleSheetSets',
\ 'onMouseDown', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onResize'] \ 'timeline', 'visibilityState', 'cookie', 'defaultView',
\ 'designMode', 'dir', 'domain', 'lastModified', 'location',
\ 'readyState', 'referrer', 'title', 'URL', 'activeElement',
\ 'fullscreenElement', 'styleSheets']
let documeth = ['adoptNode', 'close', 'createAttribute',
\ 'createAttributeNS', 'createCDATASection', 'createComment',
\ 'createDocumentFragment', 'createElement', 'createElementNS',
\ 'createEvent', 'createExpression', 'createNSResolver',
\ 'createNodeIterator', 'createProcessingInstruction', 'createRange',
\ 'createTextNode', 'createTouchList', 'createTreeWalker',
\ 'enableStyleSheetsForSet', 'evaluate', 'focus', 'getElementById',
\ 'getElementById', 'getElementsByClassName', 'getElementsByName',
\ 'getElementsByTagName', 'getElementsByTagNameNS',
\ 'hasStorageAccess', 'importNode', 'onClick', 'onDblClick',
\ 'onFocus', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onMouseDown',
\ 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp',
\ 'onResize', 'open', 'querySelector', 'querySelectorAll',
\ 'requestStorageAccess', 'write', 'writeln']
call map(documeth, 'v:val."("') call map(documeth, 'v:val."("')
let docuxprop = ['attributes', 'childNodes', 'doctype', 'documentElement', 'firstChild', let docuxprop = ['attributes', 'childNodes', 'doctype', 'documentElement', 'firstChild',
\ 'implementation', 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType', \ 'implementation', 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType',
@@ -368,9 +388,11 @@ function! javascriptcomplete#CompleteJS(findstart, base)
let xdomelemprop = ['attributes', 'childNodes', 'firstChild', 'lastChild', let xdomelemprop = ['attributes', 'childNodes', 'firstChild', 'lastChild',
\ 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', \ 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue',
\ 'ownerDocument', 'parentNode', 'prefix', 'previousSibling', 'tagName'] \ 'ownerDocument', 'parentNode', 'prefix', 'previousSibling', 'tagName']
let xdomelemmeth = ['appendChild', 'cloneNode', 'getAttribute', 'getAttributeNode', let xdomelemmeth = ['appendChild', 'addEventListener', 'cloneNode',
\ 'getElementsByTagName', 'hasChildNodes', 'insertBefore', 'normalize', \ 'dispatchEvent', 'getAttribute', 'getAttributeNode',
\ 'removeAttribute', 'removeAttributeNode', 'removeChild', 'replaceChild', \ 'getElementsByTagName', 'hasChildNodes', 'insertBefore',
\ 'normalize', 'removeAttribute', 'removeAttributeNode',
\ 'removeChild', 'removeEventListener', 'replaceChild',
\ 'setAttribute', 'setAttributeNode'] \ 'setAttribute', 'setAttributeNode']
call map(xdomelemmeth, 'v:val."("') call map(xdomelemmeth, 'v:val."("')
let xdomelems = xdomelemprop + xdomelemmeth let xdomelems = xdomelemprop + xdomelemmeth

View File

@@ -185,7 +185,7 @@ func! Test_check_colors()
" 9) Normal should be defined first, not use reverse, fg or bg " 9) Normal should be defined first, not use reverse, fg or bg
call cursor(1,1) call cursor(1,1)
let pat = 'hi\%[light] \+\%(link\|clear\)\@!\w\+\>' let pat = 'hi\%[ghlight] \+\%(link\|clear\)\@!\w\+\>'
call search(pat, 'cW') " Look for the first hi def, skipping `hi link` and `hi clear` call search(pat, 'cW') " Look for the first hi def, skipping `hi link` and `hi clear`
if getline('.') !~# '\m\<Normal\>' if getline('.') !~# '\m\<Normal\>'
let err['highlight']['Normal'] = 'Should be defined first' let err['highlight']['Normal'] = 'Should be defined first'

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: Checkstyle " Compiler: Checkstyle
" Maintainer: Doug Kearns <dougkearns@gmail.com> " Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2013 Jun 26 " Last Change: 2020 Aug 2
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -12,8 +12,18 @@ if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args> command -nargs=* CompilerSet setlocal <args>
endif endif
CompilerSet makeprg=java\ com.puppycrawl.tools.checkstyle.Main\ -f\ plain let s:cpo_save = &cpo
set cpo&vim
" sample error: WebTable.java:282: '+=' is not preceeded with whitespace. " CompilerSet makeprg=java\ com.puppycrawl.tools.checkstyle.Main\ -f\ plain\ -c\ /sun_checks.xml
" WebTable.java:201:1: '{' should be on the previous line. " CompilerSet makeprg=java\ -jar\ checkstyle-X.XX-all.jar\ -f\ plain\ -c\ /sun_checks.xml
CompilerSet errorformat=%f:%l:%v:\ %m,%f:%l:\ %m,%-G%.%#
CompilerSet makeprg=checkstyle\ -f\ plain
CompilerSet errorformat=[%tRROR]\ %f:%l:%v:\ %m,
\[%tARN]\ %f:%l:%v:\ %m,
\[%tRROR]\ %f:%l:\ %m,
\[%tARN]\ %f:%l:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

26
runtime/compiler/dart.vim Normal file
View File

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: Dart VM
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dart"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dart
CompilerSet errorformat=%E%f:%l:%c:\ Error:\ %m,
\%CTry\ %.%#,
\%Z\ %#^%\\+,
\%C%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,28 @@
" Vim compiler file
" Compiler: Dart to JavaScript Compiler
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dart2js"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dart2js
CompilerSet errorformat=%E%f:%l:%c:,
\%-GError:\ Compilation\ failed.,
\%CError:\ %m,
\%Z\ %#^%\\+,
\%C%.%#,
\%trror:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,28 @@
" Vim compiler file
" Compiler: Dart to Native Compiler
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dart2native"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dart2native
CompilerSet errorformat=%E%f:%l:%c:\ Error:\ %m,
\%CTry\ %.%#,
\%Z\ %#^%\\+,
\%Z%$,
\%C%.%#,
\%E%f:\ %trror:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,23 @@
" Vim compiler file
" Compiler: Dart Analyzer
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dartanalyzer"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dartanalyzer\ --format\ machine
CompilerSet errorformat=%t%\\w%\\+\|%\\w%\\+\|%\\w%\\+\|%f\|%l\|%c\|%\\d%\\+\|%m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,28 @@
" Vim compiler file
" Compiler: Dart Development Compiler
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dartdevc"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dartdevc
CompilerSet errorformat=%E%f:%l:%c:\ Error:\ %m,
\%CTry\ %.%#,
\%Z\ %#^%\\+,
\%Z%$,
\%C%.%#,
\%E%f:\ %trror:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: Dart Documentation Generator
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dartdoc"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dartdoc
CompilerSet errorformat=\ \ %tarning:\ %m,
\\ \ %trror:\ %m,
\%+EGeneration\ failed:\ %m,
\%+ISuccess!\ Docs\ generated\ into\ %f,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,25 @@
" Vim compiler file
" Compiler: Dart Formatter
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 May 08
if exists("current_compiler")
finish
endif
let current_compiler = "dartfmt"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=dartfmt
CompilerSet errorformat=%Eline\ %l\\,\ column\ %c\ of\ %f:\ %m,
\%Z\ %\\{3}│\ %\\+^%\\+,
\%C%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: ESLint for JavaScript " Compiler: ESLint for JavaScript
" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com> " Maintainer: Romain Lafourcade <romainlafourcade@gmail.com>
" Last Change: 2020 May 17 " Last Change: 2020 August 20
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -12,5 +12,5 @@ if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args> command -nargs=* CompilerSet setlocal <args>
endif endif
CompilerSet makeprg=eslint\ --format\ compact CompilerSet makeprg=npx\ eslint\ --format\ compact
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%# CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%#

34
runtime/compiler/gawk.vim Normal file
View File

@@ -0,0 +1,34 @@
" Vim compiler file
" Compiler: GNU Awk
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2020 Feb 10
if exists("current_compiler")
finish
endif
let current_compiler = "gawk"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=gawk
CompilerSet errorformat=%Z%.awk:\ %f:%l:\ %p^\ %m,
\%Eg%\\=awk:\ %f:%l:\ fatal:\ %m,
\%Egawk:\ %f:%l:\ error:\ %m,
\%Wgawk:\ %f:%l:\ warning:\ %m,
\%Egawk:\ %f:%l:\ %.%#,
\gawk:\ %f:%l:\ %tatal:\ %m,
\gawk:\ %f:%l:\ %trror:\ %m,
\gawk:\ %f:%l:\ %tarning:\ %m,
\gawk:\ %tatal:\ %m,
\gawk:\ %trror:\ %m,
\gawk:\ %tarning:\ %m,
\%+C%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

25
runtime/compiler/gjs.vim Normal file
View File

@@ -0,0 +1,25 @@
" Vim compiler file
" Compiler: GJS (Gnome JavaScript Bindings)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 Jul 10
if exists("current_compiler")
finish
endif
let current_compiler = "gjs"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=gjs
CompilerSet errorformat=%.%#JS\ %tRROR:\ %m\ @\ %f:%c,
\%E%.%#JS\ ERROR:\ %m,
\%Z@%f:%l:%c,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: javac " Compiler: Java Development Kit Compiler
" Maintainer: Doug Kearns <dougkearns@gmail.com> " Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2004 Nov 27 " Last Change: 2019 Oct 21
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -12,6 +12,15 @@ if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args> command -nargs=* CompilerSet setlocal <args>
endif endif
CompilerSet makeprg=javac let s:cpo_save = &cpo
set cpo&vim
CompilerSet errorformat=%E%f:%l:\ %m,%-Z%p^,%-C%.%#,%-G%.%# CompilerSet makeprg=javac
CompilerSet errorformat=%E%f:%l:\ error:\ %m,
\%W%f:%l:\ warning:\ %m,
\%-Z%p^,
\%-C%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

30
runtime/compiler/jest.vim Normal file
View File

@@ -0,0 +1,30 @@
" Vim compiler file
" Compiler: Jest
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2018 May 15
if exists("current_compiler")
finish
endif
let current_compiler = "jest"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ jest\ --no-colors
CompilerSet makeprg=jest\ --no-colors
CompilerSet errorformat=%E\ \ ●\ %m,
\%Z\ %\\{4}%.%#Error:\ %f:\ %m\ (%l:%c):%\\=,
\%Z\ %\\{6}at\ %\\S%#\ (%f:%l:%c),
\%+C\ %\\{4}%\\w%.%#,
\%+C\ %\\{4}%[-+]%.%#,
\%-C%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

24
runtime/compiler/jjs.vim Normal file
View File

@@ -0,0 +1,24 @@
" Vim compiler file
" Compiler: Nashorn Shell
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2018 Jan 9
if exists("current_compiler")
finish
endif
let current_compiler = "jjs"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=jjs
CompilerSet errorformat=%f:%l:%c\ %m,
\%f:%l\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,25 @@
" Vim compiler file
" Compiler: JSHint
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 Jul 10
if exists("current_compiler")
finish
endif
let current_compiler = "jshint"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ jshint\ --verbose
CompilerSet makeprg=jshint\ --verbose
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m\ (%t%n),
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,25 @@
" Vim compiler file
" Compiler: JSON Lint
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 Jul 10
if exists("current_compiler")
finish
endif
let current_compiler = "jsonlint"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ jsonlint\ --compact\ --quiet
CompilerSet makeprg=jsonlint\ --compact\ --quiet
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ found:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,30 @@
" Vim compiler file
" Compiler: Rhino Shell (JavaScript in Java)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 Jul 10
if exists("current_compiler")
finish
endif
let current_compiler = "rhino"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=java\ -jar\ lib/rhino-X.X.XX.jar\ -w\ -strict
CompilerSet makeprg=rhino
CompilerSet errorformat=%-Gjs:\ %.%#Compilation\ produced%.%#,
\%Ejs:\ \"%f\"\\,\ line\ %l:\ %m,
\%Ejs:\ uncaught\ JavaScript\ runtime\ exception:\ %m,
\%Wjs:\ warning:\ \"%f\"\\,\ line\ %l:\ %m,
\%Zjs:\ %p^,
\%Cjs:\ %.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,23 @@
" Vim compiler file
" Compiler: RuboCop
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 Jul 10
if exists("current_compiler")
finish
endif
let current_compiler = "rubocop"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
CompilerSet makeprg=rubocop\ --format\ emacs
CompilerSet errorformat=%f:%l:%c:\ %t:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: Standard for JavaScript " Compiler: Standard for JavaScript
" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com> " Maintainer: Romain Lafourcade <romainlafourcade@gmail.com>
" Last Change: 2020 May 17 " Last Change: 2020 August 20
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -12,5 +12,5 @@ if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args> command -nargs=* CompilerSet setlocal <args>
endif endif
CompilerSet makeprg=standard CompilerSet makeprg=npx\ standard
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%# CompilerSet errorformat=%f:%l:%c:\ %m,%-G%.%#

View File

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: Stylelint
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2020 Jun 10
if exists("current_compiler")
finish
endif
let current_compiler = "stylelint"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ stylelint\ --formatter\ compact
CompilerSet makeprg=stylelint\ --formatter\ compact
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %trror\ -\ %m,
\%f:\ line\ %l\\,\ col\ %c\\,\ %tarning\ -\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,29 @@
" Vim compiler file
" Compiler: TypeScript Runner
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2020 Feb 10
if exists("current_compiler")
finish
endif
let current_compiler = "node"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ ts-node
CompilerSet makeprg=ts-node
CompilerSet errorformat=%f\ %#(%l\\,%c):\ %trror\ TS%n:\ %m,
\%E%f:%l,
\%+Z%\\w%\\+Error:\ %.%#,
\%C%p^%\\+,
\%C%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

26
runtime/compiler/tsc.vim Normal file
View File

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: TypeScript Compiler
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2020 Feb 10
if exists("current_compiler")
finish
endif
let current_compiler = "tsc"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ tsc
CompilerSet makeprg=tsc
CompilerSet errorformat=%f\ %#(%l\\,%c):\ %trror\ TS%n:\ %m,
\%trror\ TS%n:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,28 @@
" Vim compiler file
" Compiler: TypeDoc
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2020 Feb 10
if exists("current_compiler")
finish
endif
let current_compiler = "typedoc"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ typedoc
CompilerSet makeprg=typedoc
CompilerSet errorformat=%EError:\ %f(%l),
\%WWarning:\ %f(%l),
\%+IDocumentation\ generated\ at\ %f,
\%Z\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,7 @@
" Vim compiler file " Vim compiler file
" Compiler: xmllint " Compiler: Libxml2 Command-Line Tool
" Maintainer: Doug Kearns <dougkearns@gmail.com> " Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2013 Jul 8 " Last Change: 2020 Jul 30
if exists("current_compiler") if exists("current_compiler")
finish finish
@@ -13,13 +13,15 @@ if exists(":CompilerSet") != 2 " older Vim always used :setlocal
endif endif
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo-=C set cpo&vim
CompilerSet makeprg=xmllint\ --valid\ --noout CompilerSet makeprg=xmllint\ --valid\ --noout
CompilerSet errorformat=%E%f:%l:\ %.%#\ error\ :\ %m,
CompilerSet errorformat=%+E%f:%l:\ %.%#\ error\ :\ %m, \%W%f:%l:\ %.%#\ warning\ :\ %m,
\%+W%f:%l:\ %.%#\ warning\ :\ %m,
\%-Z%p^, \%-Z%p^,
\%C%.%#,
\%terror:\ %m,
\%tarning:\ %m,
\%-G%.%# \%-G%.%#
let &cpo = s:cpo_save let &cpo = s:cpo_save

26
runtime/compiler/xo.vim Normal file
View File

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: XO
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2019 Jul 10
if exists("current_compiler")
finish
endif
let current_compiler = "xo"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" CompilerSet makeprg=npx\ xo\ --reporter\ compact
CompilerSet makeprg=xo\ --reporter\ compact
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %trror\ %m,
\%f:\ line\ %l\\,\ col\ %c\\,\ %tarning\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.2. Last change: 2020 Jun 10 *autocmd.txt* For Vim version 8.2. Last change: 2020 Aug 02
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1425,8 +1425,8 @@ name!
:aug[roup]! {name} Delete the autocmd group {name}. Don't use :aug[roup]! {name} Delete the autocmd group {name}. Don't use
this if there is still an autocommand using this if there is still an autocommand using
this group! You will get a warning if doing this group! You will get a warning if doing
it anyway. when the group is the current group it anyway. When the group is the current
you will get error E936. group you will get error E936.
To enter autocommands for a specific group, use this method: To enter autocommands for a specific group, use this method:
1. Select the group with ":augroup {name}". 1. Select the group with ":augroup {name}".

View File

@@ -1,4 +1,4 @@
*change.txt* For Vim version 8.2. Last change: 2020 Jun 04 *change.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -153,7 +153,7 @@ the 'joinspaces' option is on, these commands insert two spaces after a '.',
'!' or '?' (but if 'cpoptions' includes the 'j' flag, they insert two spaces '!' or '?' (but if 'cpoptions' includes the 'j' flag, they insert two spaces
only after a '.'). only after a '.').
The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting
spaces before and after a multi-byte character |fo-table|. spaces before and after a multibyte character |fo-table|.
The '[ mark is set at the end of the first line that was joined, '] at the end The '[ mark is set at the end of the first line that was joined, '] at the end
of the resulting line. of the resulting line.
@@ -1680,11 +1680,11 @@ b Like 'v', but only auto-wrap if you enter a blank at or before
l Long lines are not broken in insert mode: When a line was longer than l Long lines are not broken in insert mode: When a line was longer than
'textwidth' when the insert command started, Vim does not 'textwidth' when the insert command started, Vim does not
automatically format it. automatically format it.
m Also break at a multi-byte character above 255. This is useful for m Also break at a multibyte character above 255. This is useful for
Asian text where every character is a word on its own. Asian text where every character is a word on its own.
M When joining lines, don't insert a space before or after a multi-byte M When joining lines, don't insert a space before or after a multibyte
character. Overrules the 'B' flag. character. Overrules the 'B' flag.
B When joining lines, don't insert a space between two multi-byte B When joining lines, don't insert a space between two multibyte
characters. Overruled by the 'M' flag. characters. Overruled by the 'M' flag.
1 Don't break a line after a one-letter word. It's broken before it 1 Don't break a line after a one-letter word. It's broken before it
instead (if possible). instead (if possible).

View File

@@ -1,4 +1,4 @@
*channel.txt* For Vim version 8.2. Last change: 2020 Jul 10 *channel.txt* For Vim version 8.2. Last change: 2020 Sep 03
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -608,6 +608,10 @@ ch_logfile({fname} [, {mode}]) *ch_logfile()*
after every message, on Unix you can use "tail -f" to see what after every message, on Unix you can use "tail -f" to see what
is going on in real time. is going on in real time.
To enable the log very early, to see what is received from a
terminal during startup, use |--cmd|: >
vim --cmd "call ch_logfile('logfile', 'w')"
<
This function is not available in the |sandbox|. This function is not available in the |sandbox|.
NOTE: the channel communication is stored in the file, be NOTE: the channel communication is stored in the file, be
aware that this may contain confidential and privacy sensitive aware that this may contain confidential and privacy sensitive
@@ -1256,7 +1260,9 @@ After setting 'buftype' to "prompt" Vim does not automatically start Insert
mode, use `:startinsert` if you want to enter Insert mode, so that the user mode, use `:startinsert` if you want to enter Insert mode, so that the user
can start typing a line. can start typing a line.
The text of the prompt can be set with the |prompt_setprompt()| function. The text of the prompt can be set with the |prompt_setprompt()| function. If
no prompt is set with |prompt_setprompt()|, "% " is used. You can get the
effective prompt text for a buffer, with |prompt_getprompt()|.
The user can go to Normal mode and navigate through the buffer. This can be The user can go to Normal mode and navigate through the buffer. This can be
useful to see older output or copy text. useful to see older output or copy text.

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 8.2. Last change: 2020 Jul 26 *cmdline.txt* For Vim version 8.2. Last change: 2020 Aug 09
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1130,7 +1130,8 @@ CTRL-C Continue in Command-line mode. The command-line under the
in Normal mode. There is no redraw, thus the window will in Normal mode. There is no redraw, thus the window will
remain visible. remain visible.
:quit Discard the command line and go back to Normal mode. :quit Discard the command line and go back to Normal mode.
":close", ":exit", ":xit" and CTRL-\ CTRL-N also work. ":close", CTRL-W c, ":exit", ":xit" and CTRL-\ CTRL-N also
work.
:qall Quit Vim, unless there are changes in some buffer. :qall Quit Vim, unless there are changes in some buffer.
:qall! Quit Vim, discarding changes to any buffer. :qall! Quit Vim, discarding changes to any buffer.

View File

@@ -1,4 +1,4 @@
*develop.txt* For Vim version 8.2. Last change: 2020 Apr 13 *develop.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -34,8 +34,8 @@ balance must be found between them.
VIM IS... VI COMPATIBLE *design-compatible* VIM IS... VI COMPATIBLE *design-compatible*
First of all, it should be possible to use Vim as a drop-in replacement for First of all, it should be possible to use Vim as a drop-in replacement for
Vi. When the user wants to, he can use Vim in compatible mode and hardly Vi. When the user wants to, Vim can be used in compatible mode and hardly
notice any difference with the original Vi. any differences with the original Vi will be noticed.
Exceptions: Exceptions:
- We don't reproduce obvious Vi bugs in Vim. - We don't reproduce obvious Vi bugs in Vim.
@@ -473,7 +473,7 @@ available spell checking libraries and programs. Unfortunately, the result
was that none of them provided sufficient capabilities to be used as the spell was that none of them provided sufficient capabilities to be used as the spell
checking engine in Vim, for various reasons: checking engine in Vim, for various reasons:
- Missing support for multi-byte encodings. At least UTF-8 must be supported, - Missing support for multibyte encodings. At least UTF-8 must be supported,
so that more than one language can be used in the same file. so that more than one language can be used in the same file.
Doing on-the-fly conversion is not always possible (would require iconv Doing on-the-fly conversion is not always possible (would require iconv
support). support).

View File

@@ -921,6 +921,7 @@ char digraph hex dec official name ~
‟ 9" 201F 8223 DOUBLE HIGH-REVERSED-9 QUOTATION MARK ‟ 9" 201F 8223 DOUBLE HIGH-REVERSED-9 QUOTATION MARK
† /- 2020 8224 DAGGER † /- 2020 8224 DAGGER
‡ /= 2021 8225 DOUBLE DAGGER ‡ /= 2021 8225 DOUBLE DAGGER
• oo 2022 8226 BULLET
‥ .. 2025 8229 TWO DOT LEADER ‥ .. 2025 8229 TWO DOT LEADER
… ,. 2026 8230 HORIZONTAL ELLIPSIS … ,. 2026 8230 HORIZONTAL ELLIPSIS
‰ %0 2030 8240 PER MILLE SIGN ‰ %0 2030 8240 PER MILLE SIGN

View File

@@ -1,4 +1,4 @@
*editing.txt* For Vim version 8.2. Last change: 2020 Jul 05 *editing.txt* For Vim version 8.2. Last change: 2020 Aug 17
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -652,7 +652,7 @@ list of the current window.
:args ## x :args ## x
< This will add the "x" item and sort the new list. < This will add the "x" item and sort the new list.
:argd[elete] {pattern} .. *:argd* *:argdelete* *E480* :argd[elete] {pattern} .. *:argd* *:argdelete* *E480* *E610*
Delete files from the argument list that match the Delete files from the argument list that match the
{pattern}s. {pattern} is used like a file pattern, {pattern}s. {pattern} is used like a file pattern,
see |file-pattern|. "%" can be used to delete the see |file-pattern|. "%" can be used to delete the
@@ -662,7 +662,7 @@ list of the current window.
Example: > Example: >
:argdel *.obj :argdel *.obj
:[range]argd[elete] Delete the {range} files from the argument list. :[range]argd[elete] Delete the [range] files from the argument list.
Example: > Example: >
:10,$argdel :10,$argdel
< Deletes arguments 10 and further, keeping 1-9. > < Deletes arguments 10 and further, keeping 1-9. >

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.2. Last change: 2020 Jul 21 *eval.txt* For Vim version 8.2. Last change: 2020 Sep 06
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -120,8 +120,9 @@ base, use |str2nr()|.
*TRUE* *FALSE* *Boolean* *TRUE* *FALSE* *Boolean*
For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE. For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE.
You can also use |v:false| and |v:true|. When TRUE is returned from a You can also use |v:false| and |v:true|. In Vim9 script |false| and |true|.
function it is the Number one, FALSE is the number zero. When TRUE is returned from a function it is the Number one, FALSE is the
number zero.
Note that in the command: > Note that in the command: >
:if "foo" :if "foo"
@@ -1131,19 +1132,25 @@ Evaluation is always from left to right.
expr8[expr1] item of String or |List| *expr-[]* *E111* expr8[expr1] item of String or |List| *expr-[]* *E111*
*E909* *subscript* *E909* *subscript*
In legacy Vim script:
If expr8 is a Number or String this results in a String that contains the If expr8 is a Number or String this results in a String that contains the
expr1'th single byte from expr8. expr8 is used as a String, expr1 as a expr1'th single byte from expr8. expr8 is used as a String (a number is
Number. This doesn't recognize multi-byte encodings, see `byteidx()` for automatically converted to a String), expr1 as a Number. This doesn't
an alternative, or use `split()` to turn the string into a list of characters. recognize multibyte encodings, see `byteidx()` for an alternative, or use
`split()` to turn the string into a list of characters. Example, to get the
Index zero gives the first byte. This is like it works in C. Careful: byte under the cursor: >
text column numbers start with one! Example, to get the byte under the
cursor: >
:let c = getline(".")[col(".") - 1] :let c = getline(".")[col(".") - 1]
In Vim9 script:
If expr8 is a String this results in a String that contains the expr1'th
single character from expr8. To use byte indexes use |strpart()|.
Index zero gives the first byte or character. Careful: text column numbers
start with one!
If the length of the String is less than the index, the result is an empty If the length of the String is less than the index, the result is an empty
String. A negative index always results in an empty string (reason: backward String. A negative index always results in an empty string (reason: backward
compatibility). Use [-1:] to get the last byte. compatibility). Use [-1:] to get the last byte or character.
If expr8 is a |List| then it results the item at index expr1. See |list-index| If expr8 is a |List| then it results the item at index expr1. See |list-index|
for possible index values. If the index is out of range this results in an for possible index values. If the index is out of range this results in an
@@ -1157,10 +1164,16 @@ error.
expr8[expr1a : expr1b] substring or sublist *expr-[:]* expr8[expr1a : expr1b] substring or sublist *expr-[:]*
If expr8 is a Number or String this results in the substring with the bytes If expr8 is a String this results in the substring with the bytes or
from expr1a to and including expr1b. expr8 is used as a String, expr1a and characters from expr1a to and including expr1b. expr8 is used as a String,
expr1b are used as a Number. This doesn't recognize multi-byte encodings, see expr1a and expr1b are used as a Number.
|byteidx()| for computing the indexes.
In legacy Vim script the indexes are byte indexes. This doesn't recognize
multibyte encodings, see |byteidx()| for computing the indexes. If expr8 is
a Number it is first converted to a String.
In Vim9 script the indexes are character indexes. To use byte indexes use
|strpart()|.
If expr1a is omitted zero is used. If expr1b is omitted the length of the If expr1a is omitted zero is used. If expr1b is omitted the length of the
string minus one is used. string minus one is used.
@@ -1173,6 +1186,7 @@ expr1b is smaller than expr1a the result is an empty string.
Examples: > Examples: >
:let c = name[-1:] " last byte of a string :let c = name[-1:] " last byte of a string
:let c = name[0:-1] " the whole string
:let c = name[-2:-2] " last but one byte of a string :let c = name[-2:-2] " last but one byte of a string
:let s = line(".")[4:] " from the fifth byte to the end :let s = line(".")[4:] " from the fifth byte to the end
:let s = s[:-3] " remove last two bytes :let s = s[:-3] " remove last two bytes
@@ -2347,7 +2361,7 @@ assert_equalfile({fname-one}, {fname-two} [, {msg}])
Number assert file contents are equal Number assert file contents are equal
assert_exception({error} [, {msg}]) assert_exception({error} [, {msg}])
Number assert {error} is in v:exception Number assert {error} is in v:exception
assert_fails({cmd} [, {error} [, {msg}]]) assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
Number assert {cmd} fails Number assert {cmd} fails
assert_false({actual} [, {msg}]) assert_false({actual} [, {msg}])
Number assert {actual} is false Number assert {actual} is false
@@ -2413,6 +2427,7 @@ ch_status({handle} [, {options}])
String status of channel {handle} String status of channel {handle}
changenr() Number current change number changenr() Number current change number
char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr} char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
charclass({string}) Number character class of {string}
chdir({dir}) String change current working directory chdir({dir}) String change current working directory
cindent({lnum}) Number C indent for line {lnum} cindent({lnum}) Number C indent for line {lnum}
clearmatches([{win}]) none clear all matches clearmatches([{win}]) none clear all matches
@@ -2533,6 +2548,7 @@ gettabvar({nr}, {varname} [, {def}])
gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
any {name} in {winnr} in tab page {tabnr} any {name} in {winnr} in tab page {tabnr}
gettagstack([{nr}]) Dict get the tag stack of window {nr} gettagstack([{nr}]) Dict get the tag stack of window {nr}
gettext({text}) String lookup translation of {text}
getwininfo([{winid}]) List list of info about each window getwininfo([{winid}]) List list of info about each window
getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
getwinposx() Number X coord in pixels of the Vim window getwinposx() Number X coord in pixels of the Vim window
@@ -2669,6 +2685,7 @@ popup_show({id}) none unhide popup window {id}
pow({x}, {y}) Float {x} to the power of {y} pow({x}, {y}) Float {x} to the power of {y}
prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
printf({fmt}, {expr1}...) String format text printf({fmt}, {expr1}...) String format text
prompt_getprompt({buf}) String get prompt text
prompt_setcallback({buf}, {expr}) none set prompt callback function prompt_setcallback({buf}, {expr}) none set prompt callback function
prompt_setinterrupt({buf}, {text}) none set prompt interrupt function prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
prompt_setprompt({buf}, {text}) none set prompt text prompt_setprompt({buf}, {text}) none set prompt text
@@ -2756,6 +2773,7 @@ setbufline({expr}, {lnum}, {text})
{expr} {expr}
setbufvar({expr}, {varname}, {val}) setbufvar({expr}, {varname}, {val})
none set {varname} in buffer {expr} to {val} none set {varname} in buffer {expr} to {val}
setcellwidths({list}) none set character cell width overrides
setcharsearch({dict}) Dict set character search from {dict} setcharsearch({dict}) Dict set character search from {dict}
setcmdpos({pos}) Number set cursor position in command-line setcmdpos({pos}) Number set cursor position in command-line
setenv({name}, {val}) none set environment variable setenv({name}, {val}) none set environment variable
@@ -2824,7 +2842,8 @@ str2list({expr} [, {utf8}]) List convert each character of {expr} to
str2nr({expr} [, {base} [, {quoted}]]) str2nr({expr} [, {base} [, {quoted}]])
Number convert String to Number Number convert String to Number
strcharpart({str}, {start} [, {len}]) strcharpart({str}, {start} [, {len}])
String {len} characters of {str} at {start} String {len} characters of {str} at
character {start}
strchars({expr} [, {skipcc}]) Number character length of the String {expr} strchars({expr} [, {skipcc}]) Number character length of the String {expr}
strdisplaywidth({expr} [, {col}]) Number display length of the String {expr} strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
strftime({format} [, {time}]) String format time with a specified format strftime({format} [, {time}]) String format time with a specified format
@@ -2833,8 +2852,9 @@ stridx({haystack}, {needle} [, {start}])
Number index of {needle} in {haystack} Number index of {needle} in {haystack}
string({expr}) String String representation of {expr} value string({expr}) String String representation of {expr} value
strlen({expr}) Number length of the String {expr} strlen({expr}) Number length of the String {expr}
strpart({str}, {start} [, {len}]) strpart({str}, {start} [, {len} [, {chars}]])
String {len} bytes of {str} at byte {start} String {len} bytes/chars of {str} at
byte {start}
strptime({format}, {timestring}) strptime({format}, {timestring})
Number Convert {timestring} to unix timestamp Number Convert {timestring} to unix timestamp
strridx({haystack}, {needle} [, {start}]) strridx({haystack}, {needle} [, {start}])
@@ -3343,7 +3363,7 @@ bufnr([{expr} [, {create}]])
above. above.
If the buffer doesn't exist, -1 is returned. Or, if the If the buffer doesn't exist, -1 is returned. Or, if the
{create} argument is present and not zero, a new, unlisted, {create} argument is present and TRUE, a new, unlisted,
buffer is created and its number is returned. Example: > buffer is created and its number is returned. Example: >
let newbuf = bufnr('Scratch001', 1) let newbuf = bufnr('Scratch001', 1)
< Using an empty name uses the current buffer. To create a new < Using an empty name uses the current buffer. To create a new
@@ -3406,7 +3426,8 @@ byte2line({byte}) *byte2line()*
byteidx({expr}, {nr}) *byteidx()* byteidx({expr}, {nr}) *byteidx()*
Return byte index of the {nr}'th character in the string Return byte index of the {nr}'th character in the string
{expr}. Use zero for the first character, it returns zero. {expr}. Use zero for the first character, it then returns
zero.
This function is only useful when there are multibyte This function is only useful when there are multibyte
characters, otherwise the returned value is equal to {nr}. characters, otherwise the returned value is equal to {nr}.
Composing characters are not counted separately, their byte Composing characters are not counted separately, their byte
@@ -3493,7 +3514,7 @@ char2nr({expr} [, {utf8}]) *char2nr()*
Example for "utf-8": > Example for "utf-8": >
char2nr("á") returns 225 char2nr("á") returns 225
char2nr("á"[0]) returns 195 char2nr("á"[0]) returns 195
< With {utf8} set to 1, always treat as utf-8 characters. < With {utf8} set to TRUE, always treat as utf-8 characters.
A combining character is a separate character. A combining character is a separate character.
|nr2char()| does the opposite. |nr2char()| does the opposite.
To turn a string into a list of character numbers: > To turn a string into a list of character numbers: >
@@ -3504,6 +3525,18 @@ char2nr({expr} [, {utf8}]) *char2nr()*
Can also be used as a |method|: > Can also be used as a |method|: >
GetChar()->char2nr() GetChar()->char2nr()
charclass({string}) *charclass()*
Return the character class of the first character in {string}.
The character class is one of:
0 blank
1 punctuation
2 word character
3 emoji
other specific Unicode class
The class is used in patterns and word motions.
chdir({dir}) *chdir()* chdir({dir}) *chdir()*
Change the current working directory to {dir}. The scope of Change the current working directory to {dir}. The scope of
the directory change depends on the directory of the current the directory change depends on the directory of the current
@@ -4273,6 +4306,8 @@ expand({expr} [, {nosuf} [, {list}]]) *expand()*
line number line number
<sflnum> script file line number, also when in <sflnum> script file line number, also when in
a function a function
<SID> "<SNR>123_" where "123" is the
current script ID |<SID>|
<cword> word under the cursor <cword> word under the cursor
<cWORD> WORD under the cursor <cWORD> WORD under the cursor
<client> the {clientid} of the last received <client> the {clientid} of the last received
@@ -4893,31 +4928,32 @@ getbufinfo([{dict}])
Each returned List item is a dictionary with the following Each returned List item is a dictionary with the following
entries: entries:
bufnr buffer number. bufnr Buffer number.
changed TRUE if the buffer is modified. changed TRUE if the buffer is modified.
changedtick number of changes made to the buffer. changedtick Number of changes made to the buffer.
hidden TRUE if the buffer is hidden. hidden TRUE if the buffer is hidden.
lastused timestamp in seconds, like lastused Timestamp in seconds, like
|localtime()|, when the buffer was |localtime()|, when the buffer was
last used. last used.
{only with the |+viminfo| feature} {only with the |+viminfo| feature}
listed TRUE if the buffer is listed. listed TRUE if the buffer is listed.
lnum current line number in buffer. lnum Line number used for the buffer when
linecount number of lines in the buffer (only opened in the current window.
linecount Number of lines in the buffer (only
valid when loaded) valid when loaded)
loaded TRUE if the buffer is loaded. loaded TRUE if the buffer is loaded.
name full path to the file in the buffer. name Full path to the file in the buffer.
signs list of signs placed in the buffer. signs List of signs placed in the buffer.
Each list item is a dictionary with Each list item is a dictionary with
the following fields: the following fields:
id sign identifier id sign identifier
lnum line number lnum line number
name sign name name sign name
variables a reference to the dictionary with variables A reference to the dictionary with
buffer-local variables. buffer-local variables.
windows list of |window-ID|s that display this windows List of |window-ID|s that display this
buffer buffer
popups list of popup |window-ID|s that popups List of popup |window-ID|s that
display this buffer display this buffer
Examples: > Examples: >
@@ -5444,7 +5480,7 @@ getloclist({nr} [, {what}]) *getloclist()*
:echo getloclist(5, {'filewinid': 0}) :echo getloclist(5, {'filewinid': 0})
getmarklist([{expr}] *getmarklist()* getmarklist([{expr}]) *getmarklist()*
Without the {expr} argument returns a |List| with information Without the {expr} argument returns a |List| with information
about all the global marks. |mark| about all the global marks. |mark|
@@ -5689,6 +5725,7 @@ getreginfo([{regname}]) *getreginfo()*
If {regname} is invalid or not set, an empty Dictionary If {regname} is invalid or not set, an empty Dictionary
will be returned. will be returned.
If {regname} is not specified, |v:register| is used. If {regname} is not specified, |v:register| is used.
The returned Dictionary can be passed to |setreg()|.
Can also be used as a |method|: > Can also be used as a |method|: >
GetRegname()->getreginfo() GetRegname()->getreginfo()
@@ -5795,6 +5832,19 @@ gettagstack([{nr}]) *gettagstack()*
Can also be used as a |method|: > Can also be used as a |method|: >
GetWinnr()->gettagstack() GetWinnr()->gettagstack()
gettext({text}) *gettext()*
Translate {text} if possible.
This is mainly for use in the distributed Vim scripts. When
generating message translations the {text} is extracted by
xgettext, the translator can add the translated message in the
.po file and Vim will lookup the translation when gettext() is
called.
For {text} double quoted strings are preferred, because
xgettext does not understand escaping in single quoted
strings.
getwininfo([{winid}]) *getwininfo()* getwininfo([{winid}]) *getwininfo()*
Returns information about windows as a |List| with Dictionaries. Returns information about windows as a |List| with Dictionaries.
@@ -5983,7 +6033,7 @@ has({feature} [, {check}])
zero otherwise. This is useful to check for a typo in zero otherwise. This is useful to check for a typo in
{feature} and to detect dead code. Keep in mind that an older {feature} and to detect dead code. Keep in mind that an older
Vim version will not know about a feature added later and Vim version will not know about a feature added later and
features that have been abandoned will not be know by the features that have been abandoned will not be known by the
current Vim version. current Vim version.
Also see |exists()|. Also see |exists()|.
@@ -7559,7 +7609,7 @@ perleval({expr}) *perleval()*
< {only available when compiled with the |+perl| feature} < {only available when compiled with the |+perl| feature}
popup_ functions are documented here: |popup-functions|. popup_ functions are documented here: |popup-functions|
pow({x}, {y}) *pow()* pow({x}, {y}) *pow()*
@@ -7787,6 +7837,17 @@ printf({fmt}, {expr1} ...) *printf()*
arguments an error is given. Up to 18 arguments can be used. arguments an error is given. Up to 18 arguments can be used.
prompt_getprompt({buf}) *prompt_getprompt()*
Returns the effective prompt text for buffer {buf}. {buf} can
be a buffer name or number. |prompt-buffer|.
If the buffer doesn't exist or isn't a prompt buffer, an empty
string is returned.
Can also be used as a |method|: >
GetBuffer()->prompt_getprompt()
prompt_setcallback({buf}, {expr}) *prompt_setcallback()* prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
Set prompt callback for buffer {buf} to {expr}. When {expr} Set prompt callback for buffer {buf} to {expr}. When {expr}
is an empty string the callback is removed. This has only is an empty string the callback is removed. This has only
@@ -7842,7 +7903,7 @@ prompt_setprompt({buf}, {text}) *prompt_setprompt()*
Can also be used as a |method|: > Can also be used as a |method|: >
GetBuffer()->prompt_setprompt('command: ') GetBuffer()->prompt_setprompt('command: ')
prop_ functions are documented here: |text-prop-functions|. prop_ functions are documented here: |text-prop-functions|
pum_getpos() *pum_getpos()* pum_getpos() *pum_getpos()*
If the popup menu (see |ins-completion-menu|) is not visible, If the popup menu (see |ins-completion-menu|) is not visible,
@@ -8707,7 +8768,8 @@ searchcount([{options}]) *searchcount()*
pos |List| `[lnum, col, off]` value pos |List| `[lnum, col, off]` value
when recomputing the result. when recomputing the result.
this changes "current" result this changes "current" result
value. see |cursor()|, |getpos() value. see |cursor()|,
|getpos()|
(default: cursor's position) (default: cursor's position)
@@ -8918,6 +8980,31 @@ setbufvar({expr}, {varname}, {val}) *setbufvar()*
third argument: > third argument: >
GetValue()->setbufvar(buf, varname) GetValue()->setbufvar(buf, varname)
setcellwidths({list}) *setcellwidths()*
Specify overrides for cell widths of character ranges. This
tells Vim how wide characters are, counted in screen cells.
This overrides 'ambiwidth'. Example: >
setcellwidths([[0xad, 0xad, 1],
\ [0x2194, 0x2199, 2]])
< *E1109* *E1110* *E1111* *E1112* *E1113*
The {list} argument is a list of lists with each three
numbers. These three numbers are [low, high, width]. "low"
and "high" can be the same, in which case this refers to one
character. Otherwise it is the range of characters from "low"
to "high" (inclusive). "width" is either 1 or 2, indicating
the character width in screen cells.
An error is given if the argument is invalid, also when a
range overlaps with another.
Only characters with value 0x100 and higher can be used.
To clear the overrides pass an empty list: >
setcellwidths([]);
< You can use the script $VIMRUNTIME/tools/emoji_list.vim to see
the effect for known emoji characters.
setcharsearch({dict}) *setcharsearch()* setcharsearch({dict}) *setcharsearch()*
Set the current character search information to {dict}, Set the current character search information to {dict},
which contains one or more of the following entries: which contains one or more of the following entries:
@@ -9109,7 +9196,7 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
argument is ignored. See below for the supported items in argument is ignored. See below for the supported items in
{what}. {what}.
*setqflist-what* *setqflist-what*
When {what} is not present, the items in {list} or used. Each When {what} is not present, the items in {list} are used. Each
item must be a dictionary. Non-dictionary items in {list} are item must be a dictionary. Non-dictionary items in {list} are
ignored. Each dictionary item can contain the following ignored. Each dictionary item can contain the following
entries: entries:
@@ -9330,7 +9417,7 @@ settagstack({nr}, {dict} [, {action}]) *settagstack()*
Returns zero for success, -1 for failure. Returns zero for success, -1 for failure.
Examples (for more examples see |tagstack-examples||): Examples (for more examples see |tagstack-examples|):
Empty the tag stack of window 3: > Empty the tag stack of window 3: >
call settagstack(3, {'items' : []}) call settagstack(3, {'items' : []})
@@ -9932,17 +10019,22 @@ strlen({expr}) The result is a Number, which is the length of the String
{expr} in bytes. {expr} in bytes.
If the argument is a Number it is first converted to a String. If the argument is a Number it is first converted to a String.
For other types an error is given. For other types an error is given.
If you want to count the number of multi-byte characters use If you want to count the number of multibyte characters use
|strchars()|. |strchars()|.
Also see |len()|, |strdisplaywidth()| and |strwidth()|. Also see |len()|, |strdisplaywidth()| and |strwidth()|.
Can also be used as a |method|: > Can also be used as a |method|: >
GetString()->strlen() GetString()->strlen()
strpart({src}, {start} [, {len}]) *strpart()* strpart({src}, {start} [, {len} [, {chars}]]) *strpart()*
The result is a String, which is part of {src}, starting from The result is a String, which is part of {src}, starting from
byte {start}, with the byte length {len}. byte {start}, with the byte length {len}.
To count characters instead of bytes use |strcharpart()|. When {chars} is present and TRUE then {len} is the number of
characters positions (composing characters are not counted
separately, thus "1" means one base character and any
following composing characters).
To count {start} as characters instead of bytes use
|strcharpart()|.
When bytes are selected which do not exist, this doesn't When bytes are selected which do not exist, this doesn't
result in an error, the bytes are simply omitted. result in an error, the bytes are simply omitted.
@@ -9954,8 +10046,8 @@ strpart({src}, {start} [, {len}]) *strpart()*
strpart("abcdefg", 3) == "defg" strpart("abcdefg", 3) == "defg"
< Note: To get the first character, {start} must be 0. For < Note: To get the first character, {start} must be 0. For
example, to get three bytes under and after the cursor: > example, to get the character under the cursor: >
strpart(getline("."), col(".") - 1, 3) strpart(getline("."), col(".") - 1, 1, v:true)
< <
Can also be used as a |method|: > Can also be used as a |method|: >
GetText()->strpart(5) GetText()->strpart(5)
@@ -10130,7 +10222,7 @@ swapname({expr}) *swapname()*
The result is the swap file path of the buffer {expr}. The result is the swap file path of the buffer {expr}.
For the use of {expr}, see |bufname()| above. For the use of {expr}, see |bufname()| above.
If buffer {expr} is the current buffer, the result is equal to If buffer {expr} is the current buffer, the result is equal to
|:swapname| (unless no swap file). |:swapname| (unless there is no swap file).
If buffer {expr} has no swap file, returns an empty string. If buffer {expr} has no swap file, returns an empty string.
Can also be used as a |method|: > Can also be used as a |method|: >
@@ -10353,8 +10445,13 @@ tabpagebuflist([{arg}]) *tabpagebuflist()*
tabpagenr([{arg}]) *tabpagenr()* tabpagenr([{arg}]) *tabpagenr()*
The result is a Number, which is the number of the current The result is a Number, which is the number of the current
tab page. The first tab page has number 1. tab page. The first tab page has number 1.
When the optional argument is "$", the number of the last tab
page is returned (the tab page count). The optional argument {arg} supports the following values:
$ the number of the last tab page (the tab page
count).
# the number of the last accessed tab page
(where |g<Tab>| goes to). if there is no
previous tab page 0 is returned.
The number can be used with the |:tab| command. The number can be used with the |:tab| command.
@@ -10944,7 +11041,8 @@ win_screenpos({nr}) *win_screenpos()*
Return the screen position of window {nr} as a list with two Return the screen position of window {nr} as a list with two
numbers: [row, col]. The first window always has position numbers: [row, col]. The first window always has position
[1, 1], unless there is a tabline, then it is [2, 1]. [1, 1], unless there is a tabline, then it is [2, 1].
{nr} can be the window number or the |window-ID|. {nr} can be the window number or the |window-ID|. Use zero
for the current window.
Return [0, 0] if the window cannot be found in the current Return [0, 0] if the window cannot be found in the current
tabpage. tabpage.
@@ -11363,7 +11461,7 @@ mouse_urxvt Compiled with support for urxvt mouse.
mouse_xterm Compiled with support for xterm mouse. mouse_xterm Compiled with support for xterm mouse.
mouseshape Compiled with support for 'mouseshape'. mouseshape Compiled with support for 'mouseshape'.
multi_byte Compiled with support for 'encoding' (always true) multi_byte Compiled with support for 'encoding' (always true)
multi_byte_encoding 'encoding' is set to a multi-byte encoding. multi_byte_encoding 'encoding' is set to a multibyte encoding.
multi_byte_ime Compiled with support for IME input method. multi_byte_ime Compiled with support for IME input method.
multi_lang Compiled with support for multiple languages. multi_lang Compiled with support for multiple languages.
mzscheme Compiled with MzScheme interface |mzscheme|. mzscheme Compiled with MzScheme interface |mzscheme|.
@@ -12129,7 +12227,8 @@ text...
{endmarker} {endmarker}
Set internal variable {var-name} to a |List| Set internal variable {var-name} to a |List|
containing the lines of text bounded by the string containing the lines of text bounded by the string
{endmarker}. {endmarker}. The lines of text is used as a
|literal-string|.
{endmarker} must not contain white space. {endmarker} must not contain white space.
{endmarker} cannot start with a lower case character. {endmarker} cannot start with a lower case character.
The last line should end only with the {endmarker} The last line should end only with the {endmarker}
@@ -12240,10 +12339,18 @@ text...
:const x = 1 :const x = 1
< is equivalent to: > < is equivalent to: >
:let x = 1 :let x = 1
:lockvar 1 x :lockvar! x
< This is useful if you want to make sure the variable < This is useful if you want to make sure the variable
is not modified. is not modified. If the value is a List or Dictionary
*E995* literal then the items also cannot be changed: >
const ll = [1, 2, 3]
let ll[1] = 5 " Error!
< Nested references are not locked: >
let lvar = ['a']
const lconst = [0, lvar]
let lconst[0] = 2 " Error!
let lconst[1][0] = 'b' " OK
< *E995*
|:const| does not allow to for changing a variable: > |:const| does not allow to for changing a variable: >
:let x = 1 :let x = 1
:const x = 2 " Error! :const x = 2 " Error!

View File

@@ -163,8 +163,8 @@ file. It will be overwritten when installing a new version of Vim.
A. If you want to overrule all default file type checks. A. If you want to overrule all default file type checks.
This works by writing one file for each filetype. The disadvantage is that This works by writing one file for each filetype. The disadvantage is that
means there can be many files. The advantage is that you can simply drop there can be many files. The advantage is that you can simply drop this
this file in the right directory to make it work. file in the right directory to make it work.
*ftdetect* *ftdetect*
1. Create your user runtime directory. You would normally use the first 1. Create your user runtime directory. You would normally use the first
item of the 'runtimepath' option. Then create the directory "ftdetect" item of the 'runtimepath' option. Then create the directory "ftdetect"

View File

@@ -1096,8 +1096,9 @@ That's all. XLFDs are not used. For Chinese this is reported to work well: >
For Mac OSX you can use something like this: > For Mac OSX you can use something like this: >
:set guifont=Monaco:h10 :set guifont=Monaco:h10
Also see 'macatsui', it can help fix display problems.
*E236* Mono-spaced fonts *E236*
Note that the fonts must be mono-spaced (all characters have the same width). Note that the fonts must be mono-spaced (all characters have the same width).
An exception is GTK: all fonts are accepted, but mono-spaced fonts look best. An exception is GTK: all fonts are accepted, but mono-spaced fonts look best.

View File

@@ -451,7 +451,7 @@ with the Intellimouse driver 2.2 and when "Universal Scrolling" is turned on.
XPM support *w32-xpm-support* XPM support *w32-xpm-support*
GVim can be build on MS-Windows with support for XPM files. |+xpm_w32| GVim can be built on MS-Windows with support for XPM files. |+xpm_w32|
See the Make_mvc.mak file for instructions, search for XPM. See the Make_mvc.mak file for instructions, search for XPM.
To try out if XPM support works do this: > To try out if XPM support works do this: >

View File

@@ -1,4 +1,4 @@
*help.txt* For Vim version 8.2. Last change: 2020 Apr 05 *help.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM - main help file VIM - main help file
k k
@@ -158,7 +158,7 @@ Programming language support ~
Language support ~ Language support ~
|digraph.txt| list of available digraphs |digraph.txt| list of available digraphs
|mbyte.txt| multi-byte text support |mbyte.txt| multibyte text support
|mlang.txt| non-English language support |mlang.txt| non-English language support
|rileft.txt| right-to-left editing mode |rileft.txt| right-to-left editing mode
|arabic.txt| Arabic language support and editing |arabic.txt| Arabic language support and editing

View File

@@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 8.2. Last change: 2020 Mar 01 *helphelp.txt* For Vim version 8.2. Last change: 2020 Jul 27
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -369,14 +369,16 @@ highlighting. So do these:
You can find the details in $VIMRUNTIME/syntax/help.vim You can find the details in $VIMRUNTIME/syntax/help.vim
*inclusion* *inclusion*
Some people make a big deal about using "his" when referring to the user, Vim is for everybody, no matter race, gender or anything. Some people make a
thinking it means we assume the user is male. That is of course not the case, big deal about using "he" or "his" when referring to the user, thinking it
it's just a habit of writing help text, which quite often is many years old. means we assume the user is male. That is not the case, it's just a habit of
Also, a lot of the text is written by contributors for who English is not writing help text, which quite often is many years old. Also, a lot of the
their first language. We do not make any assumptions about the gender of the text is written by contributors for whom English is not their first language.
user, no matter how the text is phrased. And we do not want to waste time on We do not make any assumptions about the gender of the user, no matter how the
this discussion. The goal is that the reader understands how Vim works, the text is phrased. Some people have suggested using "they", but that is not
exact wording is secondary. regular English. We do not want to spend much time on this discussion. The
goal is that the reader understands how Vim works, the exact wording is
secondary.
vim:tw=78:ts=8:noet:ft=help:norl: vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -275,7 +275,7 @@ Options:
$win delcmd {cmd} *tcl-window-delcmd* $win delcmd {cmd} *tcl-window-delcmd*
Registers the Tcl command {cmd} as a deletion callback for the window. Registers the Tcl command {cmd} as a deletion callback for the window.
This command is executed (in the global scope) just before the window This command is executed (in the global scope) just before the window
is closed. Complex commands should be build with "list": > is closed. Complex commands should be built with "list": >
$win delcmd [list puts vimerr "window deleted"] $win delcmd [list puts vimerr "window deleted"]
< See also |tcl-buffer-delcmd|. < See also |tcl-buffer-delcmd|.
@@ -357,7 +357,7 @@ Options:
$buf delcmd {cmd} *tcl-buffer-delcmd* $buf delcmd {cmd} *tcl-buffer-delcmd*
Registers the Tcl command {cmd} as a deletion callback for the buffer. Registers the Tcl command {cmd} as a deletion callback for the buffer.
This command is executed (in the global scope) just before the buffer This command is executed (in the global scope) just before the buffer
is deleted. Complex commands should be build with "list": > is deleted. Complex commands should be built with "list": >
$buf delcmd [list puts vimerr "buffer [$buf number] gone"] $buf delcmd [list puts vimerr "buffer [$buf number] gone"]
< See also |tcl-window-delcmd|. < See also |tcl-window-delcmd|.

View File

@@ -414,11 +414,11 @@ The examples below assume a 'shiftwidth' of 4.
< <
*cino-(* *cino-(*
(N When in unclosed parentheses, indent N characters from the line (N When in unclosed parentheses, indent N characters from the line
with the unclosed parentheses. Add a 'shiftwidth' for every with the unclosed parenthesis. Add a 'shiftwidth' for every
extra unclosed parentheses. When N is 0 or the unclosed extra unclosed parentheses. When N is 0 or the unclosed
parentheses is the first non-white character in its line, line parenthesis is the first non-white character in its line, line
up with the next non-white character after the unclosed up with the next non-white character after the unclosed
parentheses. (default 'shiftwidth' * 2). parenthesis. (default 'shiftwidth' * 2).
cino= cino=(0 > cino= cino=(0 >
if (c1 && (c2 || if (c1 && (c2 || if (c1 && (c2 || if (c1 && (c2 ||
@@ -439,7 +439,7 @@ The examples below assume a 'shiftwidth' of 4.
< <
*cino-U* *cino-U*
UN When N is non-zero, do not ignore the indenting specified by UN When N is non-zero, do not ignore the indenting specified by
( or u in case that the unclosed parentheses is the first ( or u in case that the unclosed parenthesis is the first
non-white character in its line. (default 0). non-white character in its line. (default 0).
cino= or cino=(s cino=(s,U1 > cino= or cino=(s cino=(s,U1 >
@@ -452,8 +452,8 @@ The examples below assume a 'shiftwidth' of 4.
*cino-w* *cino-w*
wN When in unclosed parentheses and N is non-zero and either wN When in unclosed parentheses and N is non-zero and either
using "(0" or "u0", respectively, or using "U0" and the unclosed using "(0" or "u0", respectively, or using "U0" and the unclosed
parentheses is the first non-white character in its line, line parenthesis is the first non-white character in its line, line
up with the character immediately after the unclosed parentheses up with the character immediately after the unclosed parenthesis
rather than the first non-white character. (default 0). rather than the first non-white character. (default 0).
cino=(0 cino=(0,w1 > cino=(0 cino=(0,w1 >
@@ -464,11 +464,11 @@ The examples below assume a 'shiftwidth' of 4.
< <
*cino-W* *cino-W*
WN When in unclosed parentheses and N is non-zero and either WN When in unclosed parentheses and N is non-zero and either
using "(0" or "u0", respectively and the unclosed parentheses is using "(0" or "u0", respectively and the unclosed parenthesis is
the last non-white character in its line and it is not the the last non-white character in its line and it is not the
closing parentheses, indent the following line N characters closing parenthesis, indent the following line N characters
relative to the outer context (i.e. start of the line or the relative to the outer context (i.e. start of the line or the
next unclosed parentheses). (default: 0). next unclosed parenthesis). (default: 0).
cino=(0 cino=(0,W4 > cino=(0 cino=(0,W4 >
a_long_line( a_long_line( a_long_line( a_long_line(
@@ -495,8 +495,8 @@ The examples below assume a 'shiftwidth' of 4.
< <
*cino-m* *cino-m*
mN When N is non-zero, line up a line starting with a closing mN When N is non-zero, line up a line starting with a closing
parentheses with the first character of the line with the parenthesis with the first character of the line with the
matching opening parentheses. (default 0). matching opening parenthesis. (default 0).
cino=(s cino=(s,m1 > cino=(s cino=(s,m1 >
c = c1 && ( c = c1 && ( c = c1 && ( c = c1 && (
@@ -510,7 +510,7 @@ The examples below assume a 'shiftwidth' of 4.
< <
*cino-M* *cino-M*
MN When N is non-zero, line up a line starting with a closing MN When N is non-zero, line up a line starting with a closing
parentheses with the first character of the previous line. parenthesis with the first character of the previous line.
(default 0). (default 0).
cino= cino=M1 > cino= cino=M1 >
@@ -569,7 +569,7 @@ The examples below assume a 'shiftwidth' of 4.
recognize preprocessor lines; right-shifting lines that start recognize preprocessor lines; right-shifting lines that start
with "#" does not work. with "#" does not work.
*cino-P*
PN When N is non-zero recognize C pragmas, and indent them like any PN When N is non-zero recognize C pragmas, and indent them like any
other code; does not concern other preprocessor directives. other code; does not concern other preprocessor directives.
When N is zero (default): don't recognize C pragmas, treating When N is zero (default): don't recognize C pragmas, treating
@@ -996,7 +996,7 @@ Indent after a nested paren: >
Indent for a continuation line: > Indent for a continuation line: >
let g:pyindent_continue = 'shiftwidth() * 2' let g:pyindent_continue = 'shiftwidth() * 2'
The method uses |searchpair()| to look back for unclosed parenthesis. This The method uses |searchpair()| to look back for unclosed parentheses. This
can sometimes be slow, thus it timeouts after 150 msec. If you notice the can sometimes be slow, thus it timeouts after 150 msec. If you notice the
indenting isn't correct, you can set a larger timeout in msec: > indenting isn't correct, you can set a larger timeout in msec: >
let g:pyindent_searchpair_timeout = 500 let g:pyindent_searchpair_timeout = 500

View File

@@ -440,6 +440,7 @@ tag char note action in Normal mode ~
|<C-LeftMouse>| <C-LeftMouse> ":ta" to the keyword at the mouse click |<C-LeftMouse>| <C-LeftMouse> ":ta" to the keyword at the mouse click
|<C-Right>| <C-Right> 1 same as "w" |<C-Right>| <C-Right> 1 same as "w"
|<C-RightMouse>| <C-RightMouse> same as "CTRL-T" |<C-RightMouse>| <C-RightMouse> same as "CTRL-T"
|<C-Tab>| <C-Tab> same as "g<Tab>"
|<Del>| ["x]<Del> 2 same as "x" |<Del>| ["x]<Del> 2 same as "x"
|N<Del>| {count}<Del> remove the last digit from {count} |N<Del>| {count}<Del> remove the last digit from {count}
|<Down>| <Down> 1 same as "j" |<Down>| <Down> 1 same as "j"
@@ -587,6 +588,8 @@ tag command action in Normal mode ~
following the file name. following the file name.
|CTRL-W_gt| CTRL-W g t same as `gt`: go to next tab page |CTRL-W_gt| CTRL-W g t same as `gt`: go to next tab page
|CTRL-W_gT| CTRL-W g T same as `gT`: go to previous tab page |CTRL-W_gT| CTRL-W g T same as `gT`: go to previous tab page
|CTRL-W_g<Tab>| CTRL-W g <Tab> same as |g<Tab>|: go to last accessed tab
page.
|CTRL-W_h| CTRL-W h go to Nth left window (stop at first window) |CTRL-W_h| CTRL-W h go to Nth left window (stop at first window)
|CTRL-W_i| CTRL-W i split window and jump to declaration of |CTRL-W_i| CTRL-W i split window and jump to declaration of
identifier under the cursor identifier under the cursor
@@ -805,6 +808,7 @@ tag char note action in Normal mode ~
|g<LeftMouse>| g<LeftMouse> same as <C-LeftMouse> |g<LeftMouse>| g<LeftMouse> same as <C-LeftMouse>
g<MiddleMouse> same as <C-MiddleMouse> g<MiddleMouse> same as <C-MiddleMouse>
|g<RightMouse>| g<RightMouse> same as <C-RightMouse> |g<RightMouse>| g<RightMouse> same as <C-RightMouse>
|g<Tab>| g<Tab> go to the last accessed tab page.
|g<Up>| g<Up> 1 same as "gk" |g<Up>| g<Up> 1 same as "gk"
============================================================================== ==============================================================================

View File

@@ -1,4 +1,4 @@
*intro.txt* For Vim version 8.2. Last change: 2020 May 30 *intro.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -232,8 +232,8 @@ Vim would never have become what it is now, without the help of these people!
Flemming Madsen X11 client-server, various features and patches Flemming Madsen X11 client-server, various features and patches
Tony Mechelynck answers many user questions Tony Mechelynck answers many user questions
Paul Moore Python interface extensions, many patches Paul Moore Python interface extensions, many patches
Katsuhito Nagano Work on multi-byte versions Katsuhito Nagano Work on multibyte versions
Sung-Hyun Nam Work on multi-byte versions Sung-Hyun Nam Work on multibyte versions
Vince Negri Win32 GUI and generic console enhancements Vince Negri Win32 GUI and generic console enhancements
Steve Oualline Author of the first Vim book |frombook| Steve Oualline Author of the first Vim book |frombook|
Dominique Pelle Valgrind reports and many fixes Dominique Pelle Valgrind reports and many fixes
@@ -510,7 +510,7 @@ the ":map" command. The rules are:
<M-a> Meta- a ('a' with bit 8 set) <M-a> Meta- a ('a' with bit 8 set)
<M-A> Meta- A ('A' with bit 8 set) <M-A> Meta- A ('A' with bit 8 set)
<t_kd> "kd" termcap entry (cursor down key) <t_kd> "kd" termcap entry (cursor down key)
Although you can specify <M-{char}> with {char} being a multi-byte Although you can specify <M-{char}> with {char} being a multibyte
character, Vim may not be able to know what byte sequence that is and then character, Vim may not be able to know what byte sequence that is and then
it won't work. it won't work.

View File

@@ -1,4 +1,4 @@
*map.txt* For Vim version 8.2. Last change: 2020 Apr 23 *map.txt* For Vim version 8.2. Last change: 2020 Sep 06
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -191,6 +191,12 @@ whether to use the "," mapping or the longer one. To avoid this add the
<nowait> argument. Then the mapping will be used when it matches, Vim does <nowait> argument. Then the mapping will be used when it matches, Vim does
not wait for more characters to be typed. However, if the characters were not wait for more characters to be typed. However, if the characters were
already typed they are used. already typed they are used.
Note that this works when the <nowait> mapping fully matches and is found
before any partial matches. This works when:
- There is only one matching buffer-local mapping, since these are always
found before global mappings.
- There is another buffer-local mapping that partly matches, but it is
defined earlier (last defined mapping is found first).
*:map-<silent>* *:map-silent* *:map-<silent>* *:map-silent*
To define a mapping which will not be echoed on the command line, add To define a mapping which will not be echoed on the command line, add
@@ -283,15 +289,8 @@ Here is an example that inserts a list number that increases: >
CTRL-L inserts the next number, CTRL-R resets the count. CTRL-R returns an CTRL-L inserts the next number, CTRL-R resets the count. CTRL-R returns an
empty string, so that nothing is inserted. empty string, so that nothing is inserted.
Note that there are some tricks to make special keys work and escape CSI bytes Note that using 0x80 as a single byte before other text does not work, it will
in the text. The |:map| command also does this, thus you must avoid that it be seen as a special key.
is done twice. This does not work: >
:imap <expr> <F3> "<Char-0x611B>"
Because the <Char- sequence is escaped for being a |:imap| argument and then
again for using <expr>. This does work: >
:imap <expr> <F3> "\u611B"
Using 0x80 as a single byte before other text does not work, it will be seen
as a special key.
1.3 MAPPING AND MODES *:map-modes* 1.3 MAPPING AND MODES *:map-modes*
@@ -595,7 +594,7 @@ construct can be used:
<Char-033> character 27 <Char-033> character 27
<Char-0x7f> character 127 <Char-0x7f> character 127
<S-Char-114> character 114 ('r') shifted ('R') <S-Char-114> character 114 ('r') shifted ('R')
This is useful to specify a (multi-byte) character in a 'keymap' file. This is useful to specify a (multibyte) character in a 'keymap' file.
Upper and lowercase differences are ignored. Upper and lowercase differences are ignored.
*map-comments* *map-comments*
@@ -875,35 +874,47 @@ g@{motion} Call the function set by the 'operatorfunc' option.
Here is an example that counts the number of spaces with <F4>: > Here is an example that counts the number of spaces with <F4>: >
nmap <silent> <F4> :set opfunc=CountSpaces<CR>g@ nnoremap <expr> <F4> CountSpaces()
vmap <silent> <F4> :<C-U>call CountSpaces(visualmode(), 1)<CR> xnoremap <expr> <F4> CountSpaces()
" doubling <F4> works on a line
nnoremap <expr> <F4><F4> CountSpaces() .. '_'
function! CountSpaces(type, ...) function CountSpaces(type = '') abort
let sel_save = &selection if a:type == ''
let &selection = "inclusive" set opfunc=CountSpaces
let reg_save = @@ return 'g@'
if a:0 " Invoked from Visual mode, use gv command.
silent exe "normal! gvy"
elseif a:type == 'line'
silent exe "normal! '[V']y"
else
silent exe "normal! `[v`]y"
endif endif
echomsg strlen(substitute(@@, '[^ ]', '', 'g')) let sel_save = &selection
let reg_save = getreginfo('"')
let cb_save = &clipboard
let visual_marks_save = [getpos("'<"), getpos("'>")]
try
set clipboard= selection=inclusive
let commands = #{line: "'[V']y", char: "`[v`]y", block: "`[\<c-v>`]y"}
silent exe 'noautocmd keepjumps normal! ' .. get(commands, a:type, '')
echom getreg('"')->count(' ')
finally
call setreg('"', reg_save)
call setpos("'<", visual_marks_save[0])
call setpos("'>", visual_marks_save[1])
let &clipboard = cb_save
let &selection = sel_save let &selection = sel_save
let @@ = reg_save endtry
endfunction endfunction
An <expr> mapping is used to be able to fetch any prefixed count and register.
This also avoids using a command line, which would trigger CmdlineEnter and
CmdlineLeave autocommands.
Note that the 'selection' option is temporarily set to "inclusive" to be able Note that the 'selection' option is temporarily set to "inclusive" to be able
to yank exactly the right text by using Visual mode from the '[ to the '] to yank exactly the right text by using Visual mode from the '[ to the ']
mark. mark.
Also note that there is a separate mapping for Visual mode. It removes the Also note that the 'clipboard' option is temporarily emptied to avoid
"'<,'>" range that ":" inserts in Visual mode and invokes the function with clobbering the `"*` or `"+` registers, if its value contains the item `unnamed`
visualmode() and an extra argument. or `unnamedplus`.
============================================================================== ==============================================================================
2. Abbreviations *abbreviations* *Abbreviations* 2. Abbreviations *abbreviations* *Abbreviations*
@@ -1167,6 +1178,10 @@ When executing an autocommand or a user command, it will run in the context of
the script it was defined in. This makes it possible that the command calls a the script it was defined in. This makes it possible that the command calls a
local function or uses a local mapping. local function or uses a local mapping.
In case the value is used in a context where <SID> cannot be correctly
expanded, use the expand() function: >
let &includexpr = expand('<SID>') .. 'My_includeexpr()'
Otherwise, using "<SID>" outside of a script context is an error. Otherwise, using "<SID>" outside of a script context is an error.
If you need to get the script number to use in a complicated script, you can If you need to get the script number to use in a complicated script, you can

View File

@@ -1,4 +1,4 @@
*mbyte.txt* For Vim version 8.2. Last change: 2019 Jul 04 *mbyte.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar et al. VIM REFERENCE MANUAL by Bram Moolenaar et al.
@@ -36,7 +36,7 @@ characters or boxes when using another encoding.
This is a summary of the multibyte features in Vim. If you are lucky it works This is a summary of the multibyte features in Vim. If you are lucky it works
as described and you can start using Vim without much trouble. If something as described and you can start using Vim without much trouble. If something
doesn't work you will have to read the rest. Don't be surprised if it takes doesn't work you will have to read the rest. Don't be surprised if it takes
quite a bit of work and experimenting to make Vim use all the multi-byte quite a bit of work and experimenting to make Vim use all the multibyte
features. Unfortunately, every system has its own way to deal with multibyte features. Unfortunately, every system has its own way to deal with multibyte
languages and it is quite complicated. languages and it is quite complicated.
@@ -123,7 +123,7 @@ You can also set 'guifont' alone, Vim will try to find a matching
INPUT INPUT
There are several ways to enter multi-byte characters: There are several ways to enter multibyte characters:
- For X11 XIM can be used. See |XIM|. - For X11 XIM can be used. See |XIM|.
- For MS-Windows IME can be used. See |IME|. - For MS-Windows IME can be used. See |IME|.
- For all systems keymaps can be used. See |mbyte-keymap|. - For all systems keymaps can be used. See |mbyte-keymap|.
@@ -237,11 +237,11 @@ encoded with one byte, we call this a single-byte encoding. The most often
used one is called "latin1". This limits the number of characters to 256. used one is called "latin1". This limits the number of characters to 256.
Some of these are control characters, thus even fewer can be used for text. Some of these are control characters, thus even fewer can be used for text.
When some characters use two or more bytes, we call this a multi-byte When some characters use two or more bytes, we call this a multibyte
encoding. This allows using much more than 256 characters, which is required encoding. This allows using much more than 256 characters, which is required
for most East Asian languages. for most East Asian languages.
Most multi-byte encodings use one byte for the first 127 characters. These Most multibyte encodings use one byte for the first 127 characters. These
are equal to ASCII, which makes it easy to exchange plain-ASCII text, no are equal to ASCII, which makes it easy to exchange plain-ASCII text, no
matter what language is used. Thus you might see the right text even when the matter what language is used. Thus you might see the right text even when the
encoding was set wrong. encoding was set wrong.
@@ -488,11 +488,11 @@ possible.
============================================================================== ==============================================================================
4. Using a terminal *mbyte-terminal* 4. Using a terminal *mbyte-terminal*
The GUI fully supports multi-byte characters. It is also possible in a The GUI fully supports multibyte characters. It is also possible in a
terminal, if the terminal supports the same encoding that Vim uses. Thus this terminal, if the terminal supports the same encoding that Vim uses. Thus this
is less flexible. is less flexible.
For example, you can run Vim in a xterm with added multi-byte support and/or For example, you can run Vim in a xterm with added multibyte support and/or
|XIM|. Examples are kterm (Kanji term) and hanterm (for Korean), Eterm |XIM|. Examples are kterm (Kanji term) and hanterm (for Korean), Eterm
(Enlightened terminal) and rxvt. (Enlightened terminal) and rxvt.
@@ -544,7 +544,7 @@ For Vim you may need to set 'encoding' to "utf-8".
5. Fonts on X11 *mbyte-fonts-X11* 5. Fonts on X11 *mbyte-fonts-X11*
Unfortunately, using fonts in X11 is complicated. The name of a single-byte Unfortunately, using fonts in X11 is complicated. The name of a single-byte
font is a long string. For multi-byte fonts we need several of these... font is a long string. For multibyte fonts we need several of these...
Note: Most of this is no longer relevant for GTK+ 2. Selecting a font via Note: Most of this is no longer relevant for GTK+ 2. Selecting a font via
its XLFD is not supported; see 'guifont' for an example of how to its XLFD is not supported; see 'guifont' for an example of how to
@@ -610,7 +610,7 @@ written like:
X FONTSET X FONTSET
*fontset* *xfontset* *fontset* *xfontset*
A single-byte charset is typically associated with one font. For multi-byte A single-byte charset is typically associated with one font. For multibyte
charsets a combination of fonts is often used. This means that one group of charsets a combination of fonts is often used. This means that one group of
characters are used from one font and another group from another font (which characters are used from one font and another group from another font (which
might be double wide). This collection of fonts is called a fontset. might be double wide). This collection of fonts is called a fontset.
@@ -1436,7 +1436,7 @@ not everybody is able to type a composing character.
============================================================================== ==============================================================================
12. Overview of options *mbyte-options* 12. Overview of options *mbyte-options*
These options are relevant for editing multi-byte files. Check the help in These options are relevant for editing multibyte files. Check the help in
options.txt for detailed information. options.txt for detailed information.
'encoding' Encoding used for the keyboard and display. It is also the 'encoding' Encoding used for the keyboard and display. It is also the
@@ -1456,14 +1456,14 @@ options.txt for detailed information.
languages where a sequence of characters can be broken languages where a sequence of characters can be broken
anywhere. anywhere.
'guifontset' The list of font names used for a multi-byte encoding. When 'guifontset' The list of font names used for a multibyte encoding. When
this option is not empty, it replaces 'guifont'. this option is not empty, it replaces 'guifont'.
'keymap' Specify the name of a keyboard mapping. 'keymap' Specify the name of a keyboard mapping.
============================================================================== ==============================================================================
Contributions specifically for the multi-byte features by: Contributions specifically for the multibyte features by:
Chi-Deok Hwang <hwang@mizi.co.kr> Chi-Deok Hwang <hwang@mizi.co.kr>
SungHyun Nam <goweol@gmail.com> SungHyun Nam <goweol@gmail.com>
K.Nagano <nagano@atese.advantest.co.jp> K.Nagano <nagano@atese.advantest.co.jp>

View File

@@ -1,4 +1,4 @@
*message.txt* For Vim version 8.2. Last change: 2020 Jan 01 *message.txt* For Vim version 8.2. Last change: 2020 Sep 07
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -19,13 +19,14 @@ The ":messages" command can be used to view previously given messages. This
is especially useful when messages have been overwritten or truncated. This is especially useful when messages have been overwritten or truncated. This
depends on the 'shortmess' option. depends on the 'shortmess' option.
:messages Show all messages. :mes[sages] Show all messages.
:{count}messages Show the {count} most recent messages. :{count}mes[sages] Show the {count} most recent messages.
:messages clear Clear all messages. :mes[sages] clear Clear all messages.
:{count}messages clear Clear messages, keeping only the {count} most :{count}mes[sages] clear
Clear messages, keeping only the {count} most
recent ones. recent ones.
The number of remembered messages is fixed at 20 for the tiny version and 200 The number of remembered messages is fixed at 20 for the tiny version and 200
@@ -74,7 +75,7 @@ See `:messages` above.
LIST OF MESSAGES LIST OF MESSAGES
*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317* *E222* *E228* *E232* *E293* *E298* *E304* *E317*
*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322* *E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
*E323* *E341* *E473* *E570* *E685* *E292* > *E323* *E341* *E473* *E570* *E685* *E292* >
Add to read buffer Add to read buffer

View File

@@ -1,4 +1,4 @@
*mlang.txt* For Vim version 8.2. Last change: 2020 Jun 16 *mlang.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -7,7 +7,7 @@
Multi-language features *multilang* *multi-lang* Multi-language features *multilang* *multi-lang*
This is about using messages and menus in various languages. For editing This is about using messages and menus in various languages. For editing
multi-byte text see |multibyte|. multibyte text see |multibyte|.
The basics are explained in the user manual: |usr_45.txt|. The basics are explained in the user manual: |usr_45.txt|.

View File

@@ -1,4 +1,4 @@
*motion.txt* For Vim version 8.2. Last change: 2019 Nov 16 *motion.txt* For Vim version 8.2. Last change: 2020 Aug 24
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -495,10 +495,11 @@ a set of section macros, specified by the pairs of characters in the
'sections' option. The default is "SHNHH HUnhsh", which defines a section to 'sections' option. The default is "SHNHH HUnhsh", which defines a section to
start at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh". start at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh".
The "]" and "[" commands stop at the '{' or '}' in the first column. This is The "]]" and "[[" commands stop at the '{' in the first column. This is
useful to find the start or end of a function in a C program. Note that the useful to find the start of a function in a C program. To search for a '}' in
first character of the command determines the search direction and the the first column, the end of a C function, use "][" (forward) or "[]"
second character the type of brace found. (backward). Note that the first character of the command determines the
search direction.
If your '{' or '}' are not in the first column, and you would like to use "[[" If your '{' or '}' are not in the first column, and you would like to use "[["
and "]]" anyway, try these mappings: > and "]]" anyway, try these mappings: >
@@ -1142,7 +1143,7 @@ sequence of small changes in a line, for example "xxxxx", adds many positions
to the change list. When 'textwidth' is zero 'wrapmargin' is used. When that to the change list. When 'textwidth' is zero 'wrapmargin' is used. When that
also isn't set a fixed number of 79 is used. Detail: For the computations also isn't set a fixed number of 79 is used. Detail: For the computations
bytes are used, not characters, to avoid a speed penalty (this only matters bytes are used, not characters, to avoid a speed penalty (this only matters
for multi-byte encodings). for multibyte encodings).
Note that when text has been inserted or deleted the cursor position might be Note that when text has been inserted or deleted the cursor position might be
a bit different from the position of the change. Especially when lines have a bit different from the position of the change. Especially when lines have

View File

@@ -1,4 +1,4 @@
*netbeans.txt* For Vim version 8.2. Last change: 2020 Apr 19 *netbeans.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Gordon Prieur et al. VIM REFERENCE MANUAL by Gordon Prieur et al.
@@ -362,12 +362,12 @@ color Argument with either a decimal number, "none" (without the
offset A number argument that indicates a byte position in a buffer. offset A number argument that indicates a byte position in a buffer.
The first byte has offset zero. Line breaks are counted for The first byte has offset zero. Line breaks are counted for
how they appear in the file (CR/LF counts for two bytes). how they appear in the file (CR/LF counts for two bytes).
Note that a multi-byte character is counted for the number of Note that a multibyte character is counted for the number of
bytes it takes. bytes it takes.
lnum/col Argument with a line number and column number position. The lnum/col Argument with a line number and column number position. The
line number starts with one, the column is the byte position, line number starts with one, the column is the byte position,
starting with zero. Note that a multi-byte character counts starting with zero. Note that a multibyte character counts
for several columns. for several columns.
pathname String argument: file name with full path. pathname String argument: file name with full path.

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2020 Jul 18 *options.txt* For Vim version 8.2. Last change: 2020 Sep 06
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -703,6 +703,9 @@ A jump table for the options with a short description can be found at |Q_op|.
The value "double" cannot be used if 'listchars' or 'fillchars' The value "double" cannot be used if 'listchars' or 'fillchars'
contains a character that would be double width. contains a character that would be double width.
The values are overruled for characters specified with
|setcellwidths()|.
There are a number of CJK fonts for which the width of glyphs for There are a number of CJK fonts for which the width of glyphs for
those characters are solely based on how many octets they take in those characters are solely based on how many octets they take in
legacy/traditional CJK encodings. In those encodings, Euro, legacy/traditional CJK encodings. In those encodings, Euro,
@@ -727,8 +730,8 @@ A jump table for the options with a short description can be found at |Q_op|.
'antialias' 'anti' boolean (default: off) 'antialias' 'anti' boolean (default: off)
global global
{only available when compiled with GUI enabled {only available when compiled with GUI enabled
on Mac OS X} on macOS}
This option only has an effect in the GUI version of Vim on Mac OS X This option only has an effect in the GUI version of Vim on macOS
v10.2 or later. When on, Vim will use smooth ("antialiased") fonts, v10.2 or later. When on, Vim will use smooth ("antialiased") fonts,
which can be easier to read at certain sizes on certain displays. which can be easier to read at certain sizes on certain displays.
Setting this option can sometimes cause problems if 'guifont' is set Setting this option can sometimes cause problems if 'guifont' is set
@@ -2715,6 +2718,11 @@ A jump table for the options with a short description can be found at |Q_op|.
for Unix: ".,~/tmp,/var/tmp,/tmp") for Unix: ".,~/tmp,/var/tmp,/tmp")
global global
List of directory names for the swap file, separated with commas. List of directory names for the swap file, separated with commas.
Recommended value: ".,~/vimswap//" - this will put the swap file next
to the edited file if possible, and in your personal swap directory
otherwise. Make sure "~/vimswap//" is only readable for you.
Possible items:
- The swap file will be created in the first directory where this is - The swap file will be created in the first directory where this is
possible. possible.
- Empty means that no swap file will be used (recovery is - Empty means that no swap file will be used (recovery is
@@ -2728,8 +2736,9 @@ A jump table for the options with a short description can be found at |Q_op|.
is replaced with the path name of the edited file. is replaced with the path name of the edited file.
- For Unix and Win32, if a directory ends in two path separators "//", - For Unix and Win32, if a directory ends in two path separators "//",
the swap file name will be built from the complete path to the file the swap file name will be built from the complete path to the file
with all path separators substituted to percent '%' signs. This will with all path separators replaced by percent '%' signs (including
ensure file name uniqueness in the preserve directory. the colon following the drive letter on Win32). This will ensure
file name uniqueness in the preserve directory.
On Win32, it is also possible to end with "\\". However, When a On Win32, it is also possible to end with "\\". However, When a
separating comma is following, you must use "//", since "\\" will separating comma is following, you must use "//", since "\\" will
include the comma in the file name. Therefore it is recommended to include the comma in the file name. Therefore it is recommended to
@@ -2749,9 +2758,10 @@ A jump table for the options with a short description can be found at |Q_op|.
the same file twice will result in a warning. Using "/tmp" on Unix is the same file twice will result in a warning. Using "/tmp" on Unix is
discouraged: When the system crashes you lose the swap file. discouraged: When the system crashes you lose the swap file.
"/var/tmp" is often not cleared when rebooting, thus is a better "/var/tmp" is often not cleared when rebooting, thus is a better
choice than "/tmp". But it can contain a lot of files, your swap choice than "/tmp". But others on the computer may be able to see the
files get lost in the crowd. That is why a "tmp" directory in your files, and it can contain a lot of files, your swap files get lost in
home directory is tried first. the crowd. That is why a "tmp" directory in your home directory is
tried first.
The use of |:set+=| and |:set-=| is preferred when adding or removing The use of |:set+=| and |:set-=| is preferred when adding or removing
directories from the list. This avoids problems when a future version directories from the list. This avoids problems when a future version
uses another default. uses another default.
@@ -2826,7 +2836,7 @@ A jump table for the options with a short description can be found at |Q_op|.
This is specified with 'fileencoding'. The conversion is done with This is specified with 'fileencoding'. The conversion is done with
iconv() or as specified with 'charconvert'. iconv() or as specified with 'charconvert'.
If you need to know whether 'encoding' is a multi-byte encoding, you If you need to know whether 'encoding' is a multibyte encoding, you
can use: > can use: >
if has("multi_byte_encoding") if has("multi_byte_encoding")
< <
@@ -4540,7 +4550,7 @@ A jump table for the options with a short description can be found at |Q_op|.
set and to the Vim default value when 'compatible' is reset. set and to the Vim default value when 'compatible' is reset.
*'isprint'* *'isp'* *'isprint'* *'isp'*
'isprint' 'isp' string (default for Win32 and Macintosh: 'isprint' 'isp' string (default for Win32 and macOS:
"@,~-255"; otherwise: "@,161-255") "@,~-255"; otherwise: "@,161-255")
global global
The characters given by this option are displayed directly on the The characters given by this option are displayed directly on the
@@ -4917,18 +4927,8 @@ A jump table for the options with a short description can be found at |Q_op|.
*'macatsui'* *'nomacatsui'* *'macatsui'* *'nomacatsui'*
'macatsui' boolean (default on) 'macatsui' boolean (default on)
global global
{only available in Mac GUI version} {not supported}
This is a workaround for when drawing doesn't work properly. When set No longer supported, as the Mac OS X GUI code was removed.
and compiled with multi-byte support ATSUI text drawing is used. When
not set ATSUI text drawing is not used. Switch this option off when
you experience drawing problems. In a future version the problems may
be solved and this option becomes obsolete. Therefore use this method
to unset it: >
if exists('&macatsui')
set nomacatsui
endif
< Another option to check if you have drawing problems is
'termencoding'.
*'magic'* *'nomagic'* *'magic'* *'nomagic'*
'magic' boolean (default on) 'magic' boolean (default on)
@@ -6191,7 +6191,7 @@ A jump table for the options with a short description can be found at |Q_op|.
screen. If the statusline is given by 'statusline' (i.e. not empty), screen. If the statusline is given by 'statusline' (i.e. not empty),
this option takes precedence over 'ruler' and 'rulerformat' this option takes precedence over 'ruler' and 'rulerformat'
If the number of characters displayed is different from the number of If the number of characters displayed is different from the number of
bytes in the text (e.g., for a TAB or a multi-byte character), both bytes in the text (e.g., for a TAB or a multibyte character), both
the text column (byte number) and the screen column are shown, the text column (byte number) and the screen column are shown,
separated with a dash. separated with a dash.
For an empty line "0-1" is shown. For an empty line "0-1" is shown.
@@ -6234,7 +6234,7 @@ A jump table for the options with a short description can be found at |Q_op|.
$VIMRUNTIME, $VIMRUNTIME,
$VIM/vimfiles/after, $VIM/vimfiles/after,
$HOME/vimfiles/after" $HOME/vimfiles/after"
Macintosh: "$VIM:vimfiles, macOS: "$VIM:vimfiles,
$VIMRUNTIME, $VIMRUNTIME,
$VIM:vimfiles:after" $VIM:vimfiles:after"
Haiku: "$BE_USER_SETTINGS/vim, Haiku: "$BE_USER_SETTINGS/vim,
@@ -6564,7 +6564,7 @@ A jump table for the options with a short description can be found at |Q_op|.
For the Amiga the default is ">". For MS-Windows the default is For the Amiga the default is ">". For MS-Windows the default is
">%s 2>&1". The output is directly saved in a file and not echoed to ">%s 2>&1". The output is directly saved in a file and not echoed to
the screen. the screen.
For Unix the default it "| tee". The stdout of the compiler is saved For Unix the default is "| tee". The stdout of the compiler is saved
in a file and echoed to the screen. If the 'shell' option is "csh" or in a file and echoed to the screen. If the 'shell' option is "csh" or
"tcsh" after initializations, the default becomes "|& tee". If the "tcsh" after initializations, the default becomes "|& tee". If the
'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta", 'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
@@ -7738,14 +7738,12 @@ A jump table for the options with a short description can be found at |Q_op|.
For further details see |arabic.txt|. For further details see |arabic.txt|.
*'termencoding'* *'tenc'* *'termencoding'* *'tenc'*
'termencoding' 'tenc' string (default ""; with GTK+ GUI: "utf-8"; with 'termencoding' 'tenc' string (default ""; with GTK+ GUI: "utf-8")
Macintosh GUI: "macroman")
global global
Encoding used for the terminal. This specifies what character Encoding used for the terminal. This specifies what character
encoding the keyboard produces and the display will understand. For encoding the keyboard produces and the display will understand. For
the GUI it only applies to the keyboard ('encoding' is used for the the GUI it only applies to the keyboard ('encoding' is used for the
display). Except for the Mac when 'macatsui' is off, then display).
'termencoding' should be "macroman".
*E617* *E950* *E617* *E950*
Note: This does not apply to the GTK+ GUI. After the GUI has been Note: This does not apply to the GTK+ GUI. After the GUI has been
successfully initialized, 'termencoding' is forcibly set to "utf-8". successfully initialized, 'termencoding' is forcibly set to "utf-8".
@@ -7810,8 +7808,8 @@ A jump table for the options with a short description can be found at |Q_op|.
*'termwinsize'* *'tws'* *'termwinsize'* *'tws'*
'termwinsize' 'tws' string (default "") 'termwinsize' 'tws' string (default "")
local to window local to window
Size of the |terminal| window. Format: {rows}x{columns} or Size used when opening the |terminal| window. Format:
{rows}*{columns}. {rows}x{columns} or {rows}*{columns}.
- When empty the terminal gets the size from the window. - When empty the terminal gets the size from the window.
- When set with a "x" (e.g., "24x80") the terminal size is not - When set with a "x" (e.g., "24x80") the terminal size is not
adjusted to the window size. If the window is smaller only the adjusted to the window size. If the window is smaller only the
@@ -7822,6 +7820,8 @@ A jump table for the options with a short description can be found at |Q_op|.
- When rows is zero then use the height of the window. - When rows is zero then use the height of the window.
- When columns is zero then use the width of the window. - When columns is zero then use the width of the window.
- Using "0x0" or "0*0" is the same as empty. - Using "0x0" or "0*0" is the same as empty.
- Can be overruled in the |term_start()| options with "term_rows" and
"term_cols".
Examples: Examples:
"30x0" uses 30 rows and the current window width. "30x0" uses 30 rows and the current window width.
@@ -8368,7 +8368,7 @@ A jump table for the options with a short description can be found at |Q_op|.
>= 14 Anything pending in a ":finally" clause. >= 14 Anything pending in a ":finally" clause.
>= 15 Every executed Ex command from a script (truncated at 200 >= 15 Every executed Ex command from a script (truncated at 200
characters). characters).
>= 16 Every executed Ex command >= 16 Every executed Ex command.
This option can also be set with the "-V" argument. See |-V|. This option can also be set with the "-V" argument. See |-V|.
This option is also set by the |:verbose| command. This option is also set by the |:verbose| command.
@@ -8391,7 +8391,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'viewdir' 'vdir' string (default for Amiga and Win32: 'viewdir' 'vdir' string (default for Amiga and Win32:
"$VIM/vimfiles/view", "$VIM/vimfiles/view",
for Unix: "~/.vim/view", for Unix: "~/.vim/view",
for Macintosh: "$VIM:vimfiles:view" for macOS: "$VIM:vimfiles:view"
for VMS: "sys$login:vimfiles/view") for VMS: "sys$login:vimfiles/view")
global global
{not available when compiled without the |+mksession| {not available when compiled without the |+mksession|
@@ -8907,7 +8907,7 @@ A jump table for the options with a short description can be found at |Q_op|.
{only available when compiled with the |terminal| {only available when compiled with the |terminal|
feature on MS-Windows} feature on MS-Windows}
Specifies the name of the winpty shared library, used for the Specifies the name of the winpty shared library, used for the
|:terminal| command. The default depends on whether was build as a |:terminal| command. The default depends on whether Vim was built as a
32-bit or 64-bit executable. If not found, "winpty.dll" is tried as 32-bit or 64-bit executable. If not found, "winpty.dll" is tried as
a fallback. a fallback.
Environment variables are expanded |:set_env|. Environment variables are expanded |:set_env|.

View File

@@ -88,7 +88,7 @@ VAX C compiler is not fully ANSI C compatible in pre-processor directives
semantics, therefore you have to use a converter program that will do the lion semantics, therefore you have to use a converter program that will do the lion
part of the job. For detailed instructions read file INSTALLvms.txt part of the job. For detailed instructions read file INSTALLvms.txt
MMS_VIM.EXE is build together with VIM.EXE, but for XXD.EXE you should MMS_VIM.EXE is built together with VIM.EXE, but for XXD.EXE you should
change to a subdirectory and build it separately. change to a subdirectory and build it separately.
CTAGS is not part of the Vim source distribution anymore, however the OpenVMS CTAGS is not part of the Vim source distribution anymore, however the OpenVMS

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.2. Last change: 2020 Jul 10 *pattern.txt* For Vim version 8.2. Last change: 2020 Sep 01
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -797,11 +797,12 @@ An ordinary atom can be:
^beep( the start of the C function "beep" (probably). ^beep( the start of the C function "beep" (probably).
*/\^* */\^*
\^ Matches literal '^'. Can be used at any position in the pattern. \^ Matches literal '^'. Can be used at any position in the pattern, but
not inside [].
*/\_^* */\_^*
\_^ Matches start-of-line. |/zero-width| Can be used at any position in \_^ Matches start-of-line. |/zero-width| Can be used at any position in
the pattern. the pattern, but not inside [].
Example matches ~ Example matches ~
\_s*\_^foo white space and blank lines and then "foo" at \_s*\_^foo white space and blank lines and then "foo" at
start-of-line start-of-line
@@ -812,12 +813,13 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
|/zero-width| |/zero-width|
*/\$* */\$*
\$ Matches literal '$'. Can be used at any position in the pattern. \$ Matches literal '$'. Can be used at any position in the pattern, but
not inside [].
*/\_$* */\_$*
\_$ Matches end-of-line. |/zero-width| Can be used at any position in the \_$ Matches end-of-line. |/zero-width| Can be used at any position in the
pattern. Note that "a\_$b" never matches, since "b" cannot match an pattern, but not inside []. Note that "a\_$b" never matches, since
end-of-line. Use "a\nb" instead |/\n|. "b" cannot match an end-of-line. Use "a\nb" instead |/\n|.
Example matches ~ Example matches ~
foo\_$\_s* "foo" at end-of-line and following white space and foo\_$\_s* "foo" at end-of-line and following white space and
blank lines blank lines
@@ -840,8 +842,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
|/zero-width| |/zero-width|
*/\zs* */\zs*
\zs Matches at any position, and sets the start of the match there: The \zs Matches at any position, but not inside [], and sets the start of the
next char is the first char of the whole match. |/zero-width| match there: The next char is the first char of the whole match.
|/zero-width|
Example: > Example: >
/^\s*\zsif /^\s*\zsif
< matches an "if" at the start of a line, ignoring white space. < matches an "if" at the start of a line, ignoring white space.
@@ -852,8 +855,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
This cannot be followed by a multi. *E888* This cannot be followed by a multi. *E888*
{not available when compiled without the |+syntax| feature} {not available when compiled without the |+syntax| feature}
*/\ze* */\ze*
\ze Matches at any position, and sets the end of the match there: The \ze Matches at any position, but not inside [], and sets the end of the
previous char is the last char of the whole match. |/zero-width| match there: The previous char is the last char of the whole match.
|/zero-width|
Can be used multiple times, the last one encountered in a matching Can be used multiple times, the last one encountered in a matching
branch is used. branch is used.
Example: "end\ze\(if\|for\)" matches the "end" in "endif" and Example: "end\ze\(if\|for\)" matches the "end" in "endif" and
@@ -939,7 +943,7 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
These three can be used to match specific columns in a buffer or These three can be used to match specific columns in a buffer or
string. The "23" can be any column number. The first column is 1. string. The "23" can be any column number. The first column is 1.
Actually, the column is the byte number (thus it's not exactly right Actually, the column is the byte number (thus it's not exactly right
for multi-byte characters). for multibyte characters).
WARNING: When inserting or deleting text Vim does not automatically WARNING: When inserting or deleting text Vim does not automatically
update the matches. This means Syntax highlighting quickly becomes update the matches. This means Syntax highlighting quickly becomes
wrong. wrong.
@@ -994,7 +998,7 @@ Character classes:
\p printable character (see 'isprint' option) */\p* \p printable character (see 'isprint' option) */\p*
\P like "\p", but excluding digits */\P* \P like "\p", but excluding digits */\P*
NOTE: the above also work for multi-byte characters. The ones below only NOTE: the above also work for multibyte characters. The ones below only
match ASCII characters, as indicated by the range. match ASCII characters, as indicated by the range.
*whitespace* *white-space* *whitespace* *white-space*
@@ -1131,9 +1135,9 @@ x A single character, with no special meaning, matches itself
a list of at least one character, each of which is either '-', '.', a list of at least one character, each of which is either '-', '.',
'/', alphabetic, numeric, '_' or '~'. '/', alphabetic, numeric, '_' or '~'.
These items only work for 8-bit characters, except [:lower:] and These items only work for 8-bit characters, except [:lower:] and
[:upper:] also work for multi-byte characters when using the new [:upper:] also work for multibyte characters when using the new
regexp engine. See |two-engines|. In the future these items may regexp engine. See |two-engines|. In the future these items may
work for multi-byte characters. For now, to get all "alpha" work for multibyte characters. For now, to get all "alpha"
characters you can use: [[:lower:][:upper:]]. characters you can use: [[:lower:][:upper:]].
The "Func" column shows what library function is used. The The "Func" column shows what library function is used. The
@@ -1257,8 +1261,8 @@ When working with expression evaluation, a <NL> character in the pattern
matches a <NL> in the string. The use of "\n" (backslash n) to match a <NL> matches a <NL> in the string. The use of "\n" (backslash n) to match a <NL>
doesn't work there, it only works to match text in the buffer. doesn't work there, it only works to match text in the buffer.
*pattern-multi-byte* *pattern-multi-byte* *pattern-multibyte*
Patterns will also work with multi-byte characters, mostly as you would Patterns will also work with multibyte characters, mostly as you would
expect. But invalid bytes may cause trouble, a pattern with an invalid byte expect. But invalid bytes may cause trouble, a pattern with an invalid byte
will probably never match. will probably never match.

View File

@@ -1,4 +1,4 @@
*pi_netrw.txt* For Vim version 8.2. Last change: 2020 Jan 14 *pi_netrw.txt* For Vim version 8.2. Last change: 2020 Aug 15
------------------------------------------------ ------------------------------------------------
NETRW REFERENCE MANUAL by Charles E. Campbell NETRW REFERENCE MANUAL by Charles E. Campbell
@@ -3054,7 +3054,7 @@ your browsing preferences. (see also: |netrw-settings|)
(see |netrw-c-tab|). (see |netrw-c-tab|).
*g:netrw_xstrlen* Controls how netrw computes string lengths, *g:netrw_xstrlen* Controls how netrw computes string lengths,
including multi-byte characters' string including multibyte characters' string
length. (thanks to N Weibull, T Mechelynck) length. (thanks to N Weibull, T Mechelynck)
=0: uses Vim's built-in strlen() =0: uses Vim's built-in strlen()
=1: number of codepoints (Latin a + combining =1: number of codepoints (Latin a + combining

View File

@@ -1,4 +1,4 @@
*popup.txt* For Vim version 8.2. Last change: 2020 May 18 *popup.txt* For Vim version 8.2. Last change: 2020 Jul 27
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -74,9 +74,9 @@ wrapping, lines in the buffer. It can be limited with the "maxheight"
property. You can use empty lines to increase the height or the "minheight" property. You can use empty lines to increase the height or the "minheight"
property. property.
The width of the window is normally equal to the longest line in the buffer. The width of the window is normally equal to the longest visible line in the
It can be limited with the "maxwidth" property. You can use spaces to buffer. It can be limited with the "maxwidth" property. You can use spaces
increase the width or use the "minwidth" property. to increase the width or use the "minwidth" property.
By default the 'wrap' option is set, so that no text disappears. Otherwise, By default the 'wrap' option is set, so that no text disappears. Otherwise,
if there is not enough space then the window is shifted left in order to if there is not enough space then the window is shifted left in order to

View File

@@ -1,4 +1,4 @@
*print.txt* For Vim version 8.2. Last change: 2019 Dec 17 *print.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -114,7 +114,7 @@ If 'printencoding' is empty or Vim cannot find the file then it will use
encoding file. If Vim is unable to find a character encoding file then it encoding file. If Vim is unable to find a character encoding file then it
will use the "latin1" print character encoding file. will use the "latin1" print character encoding file.
When 'encoding' is set to a multi-byte encoding, Vim will try to convert When 'encoding' is set to a multibyte encoding, Vim will try to convert
characters to the printing encoding for printing (if 'printencoding' is empty characters to the printing encoding for printing (if 'printencoding' is empty
then the conversion will be to latin1). Conversion to a printing encoding then the conversion will be to latin1). Conversion to a printing encoding
other than latin1 will require Vim to be compiled with the |+iconv| feature. other than latin1 will require Vim to be compiled with the |+iconv| feature.
@@ -269,7 +269,7 @@ Japanese text you would do the following; >
:set printmbcharset=JIS_X_1983 :set printmbcharset=JIS_X_1983
If 'printmbcharset' is not one of the above values then it is assumed to If 'printmbcharset' is not one of the above values then it is assumed to
specify a custom multi-byte character set and no check will be made that it is specify a custom multibyte character set and no check will be made that it is
compatible with the value for 'printencoding'. Vim will look for a file compatible with the value for 'printencoding'. Vim will look for a file
defining the character set in the "print" directory in 'runtimepath'. defining the character set in the "print" directory in 'runtimepath'.
@@ -304,7 +304,7 @@ printing of characters in the ASCII code range.
a:yes Use ASCII character set for codes in the ASCII a:yes Use ASCII character set for codes in the ASCII
a:no (default) code range. a:no (default) code range.
The following is an example of specifying two multi-byte fonts, one for normal The following is an example of specifying two multibyte fonts, one for normal
and italic printing and one for bold and bold-italic printing, and using and italic printing and one for bold and bold-italic printing, and using
Courier to print codes in the ASCII code range but using the national Courier to print codes in the ASCII code range but using the national
character set: > character set: >
@@ -420,10 +420,10 @@ There are currently a number of limitations with PostScript printing:
possible to get all the characters in an encoding to print by installing a possible to get all the characters in an encoding to print by installing a
new version of the Courier font family. new version of the Courier font family.
- Multi-byte support - Currently Vim will try to convert multi-byte characters - Multi-byte support - Currently Vim will try to convert multibyte characters
to the 8-bit encoding specified by 'printencoding' (or latin1 if it is to the 8-bit encoding specified by 'printencoding' (or latin1 if it is
empty). Any characters that are not successfully converted are shown as empty). Any characters that are not successfully converted are shown as
unknown characters. Printing will fail if Vim cannot convert the multi-byte unknown characters. Printing will fail if Vim cannot convert the multibyte
to the 8-bit encoding. to the 8-bit encoding.
============================================================================== ==============================================================================
@@ -508,7 +508,7 @@ print ASCII text using the national character set you may see some unexpected
characters. If you want true ASCII code printing then you need to configure characters. If you want true ASCII code printing then you need to configure
Vim to output ASCII characters for the ASCII code range with 'printmbfont'. Vim to output ASCII characters for the ASCII code range with 'printmbfont'.
It is possible to define your own multi-byte character set although this It is possible to define your own multibyte character set although this
should not be attempted lightly. A discussion on the process if beyond the should not be attempted lightly. A discussion on the process if beyond the
scope of these help files. You can find details on CMap (character map) files scope of these help files. You can find details on CMap (character map) files
in the document 'Adobe CMap and CIDFont Files Specification, Version 1.0', in the document 'Adobe CMap and CIDFont Files Specification, Version 1.0',

View File

@@ -1705,7 +1705,7 @@ special problem here is that it doesn't print information on leaving the
directory and that it doesn't print the absolute path. directory and that it doesn't print the absolute path.
To solve the problem with relative paths and missing "leave directory" To solve the problem with relative paths and missing "leave directory"
messages Vim uses following algorithm: messages Vim uses the following algorithm:
1) Check if the given directory is a subdirectory of the current directory. 1) Check if the given directory is a subdirectory of the current directory.
If this is true, store it as the current directory. If this is true, store it as the current directory.
@@ -1938,7 +1938,7 @@ list window is:
The values displayed in each line correspond to the "bufnr", "lnum", "col" and The values displayed in each line correspond to the "bufnr", "lnum", "col" and
"text" fields returned by the |getqflist()| function. "text" fields returned by the |getqflist()| function.
For some quickfix/location lists, the displayed text need to be customized. For some quickfix/location lists, the displayed text needs to be customized.
For example, if only the filename is present for a quickfix entry, then the For example, if only the filename is present for a quickfix entry, then the
two "|" field separator characters after the filename are not needed. Another two "|" field separator characters after the filename are not needed. Another
use case is to customize the path displayed for a filename. By default, the use case is to customize the path displayed for a filename. By default, the

View File

@@ -1,4 +1,4 @@
*quickref.txt* For Vim version 8.2. Last change: 2020 Jun 10 *quickref.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -696,7 +696,7 @@ Short explanation of each option: *option-list*
'eventignore' 'ei' autocommand events that are ignored 'eventignore' 'ei' autocommand events that are ignored
'expandtab' 'et' use spaces when <Tab> is inserted 'expandtab' 'et' use spaces when <Tab> is inserted
'exrc' 'ex' read .vimrc and .exrc in the current directory 'exrc' 'ex' read .vimrc and .exrc in the current directory
'fileencoding' 'fenc' file encoding for multi-byte text 'fileencoding' 'fenc' file encoding for multibyte text
'fileencodings' 'fencs' automatically detected character encodings 'fileencodings' 'fencs' automatically detected character encodings
'fileformat' 'ff' file format used for file I/O 'fileformat' 'ff' file format used for file I/O
'fileformats' 'ffs' automatically detected values for 'fileformat' 'fileformats' 'ffs' automatically detected values for 'fileformat'
@@ -728,7 +728,7 @@ Short explanation of each option: *option-list*
'grepprg' 'gp' program to use for ":grep" 'grepprg' 'gp' program to use for ":grep"
'guicursor' 'gcr' GUI: settings for cursor shape and blinking 'guicursor' 'gcr' GUI: settings for cursor shape and blinking
'guifont' 'gfn' GUI: Name(s) of font(s) to be used 'guifont' 'gfn' GUI: Name(s) of font(s) to be used
'guifontset' 'gfs' GUI: Names of multi-byte fonts to be used 'guifontset' 'gfs' GUI: Names of multibyte fonts to be used
'guifontwide' 'gfw' list of font names for double-wide characters 'guifontwide' 'gfw' list of font names for double-wide characters
'guiheadroom' 'ghr' GUI: pixels room for window decorations 'guiheadroom' 'ghr' GUI: pixels room for window decorations
'guioptions' 'go' GUI: Which components and options are used 'guioptions' 'go' GUI: Which components and options are used

View File

@@ -1,4 +1,4 @@
*recover.txt* For Vim version 8.2. Last change: 2020 May 09 *recover.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -64,8 +64,8 @@ Disadvantages:
directories (although Vim tries to avoid that by comparing the path name). directories (although Vim tries to avoid that by comparing the path name).
This will result in bogus ATTENTION warning messages. This will result in bogus ATTENTION warning messages.
- When you use your home directory, and somebody else tries to edit the same - When you use your home directory, and somebody else tries to edit the same
file, he will not see your swap file and will not get the ATTENTION warning file, that user will not see your swap file and will not get the ATTENTION
message. warning message.
On the Amiga you can also use a recoverable ram disk, but there is no 100% On the Amiga you can also use a recoverable ram disk, but there is no 100%
guarantee that this works. Putting swap files in a normal ram disk (like RAM: guarantee that this works. Putting swap files in a normal ram disk (like RAM:
on the Amiga) or in a place that is cleared when rebooting (like /tmp on Unix) on the Amiga) or in a place that is cleared when rebooting (like /tmp on Unix)

View File

@@ -179,7 +179,7 @@ name on the 'VimRegistry' property on the root window.
A non GUI Vim with access to the X11 display (|xterm-clipboard| enabled), can A non GUI Vim with access to the X11 display (|xterm-clipboard| enabled), can
also act as a command server if a server name is explicitly given with the also act as a command server if a server name is explicitly given with the
--servername argument, or when Vim was build with the |+autoservername| --servername argument, or when Vim was built with the |+autoservername|
feature. feature.
An empty --servername argument will cause the command server to be disabled. An empty --servername argument will cause the command server to be disabled.

View File

@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 8.2. Last change: 2020 May 14 *repeat.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -643,7 +643,7 @@ 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 If you have two unrelated plugins you would use two packages, so that Vim
users can choose 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 package with optional plugins, and tell the user to add the preferred ones with
`:packadd`. `:packadd`.
Decide how you want to distribute the package. You can create an archive or Decide how you want to distribute the package. You can create an archive or
@@ -679,7 +679,7 @@ You could add this packadd command in one of your plugins, to be executed when
the optional plugin is needed. the optional plugin is needed.
Run the `:helptags` command to generate the doc/tags file. Including this Run the `:helptags` command to generate the doc/tags file. Including this
generated file in the package means that the user can drop the package in his generated file in the package means that the user can drop the package in the
pack directory and the help command works right away. Don't forget to re-run pack directory and the help command works right away. Don't forget to re-run
the command after changing the plugin help: > the command after changing the plugin help: >
:helptags path/start/foobar/doc :helptags path/start/foobar/doc

View File

@@ -1,4 +1,4 @@
*sign.txt* For Vim version 8.2. Last change: 2019 Nov 30 *sign.txt* For Vim version 8.2. Last change: 2020 Aug 31
VIM REFERENCE MANUAL by Gordon Prieur VIM REFERENCE MANUAL by Gordon Prieur
@@ -85,6 +85,10 @@ When the line on which the sign is placed is deleted, the sign is moved to the
next line (or the last line of the buffer, if there is no next line). When next line (or the last line of the buffer, if there is no next line). When
the delete is undone the sign does not move back. the delete is undone the sign does not move back.
When a sign with line highlighting and 'cursorline' highlighting are both
present, if the priority is 100 or more then the sign highlighting takes
precedence, otherwise the 'cursorline' highlighting.
============================================================================== ==============================================================================
2. Commands *sign-commands* *:sig* *:sign* 2. Commands *sign-commands* *:sig* *:sign*

View File

@@ -1,4 +1,4 @@
*spell.txt* For Vim version 8.2. Last change: 2020 Jul 10 *spell.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -887,7 +887,7 @@ time ":mkspell" is used. Vim will then convert everything to 'encoding' and
generate a spell file for 'encoding'. If some of the used characters to not generate a spell file for 'encoding'. If some of the used characters to not
fit in 'encoding' you will get an error message. fit in 'encoding' you will get an error message.
*spell-affix-mbyte* *spell-affix-mbyte*
When using a multi-byte encoding it's possible to use more different affix When using a multibyte encoding it's possible to use more different affix
flags. But Myspell doesn't support that, thus you may not want to use it flags. But Myspell doesn't support that, thus you may not want to use it
anyway. For compatibility use an 8-bit encoding. anyway. For compatibility use an 8-bit encoding.
@@ -1445,7 +1445,7 @@ are spelling mistakes this may not be quite right.
Common words can be specified with the COMMON item. This will give better Common words can be specified with the COMMON item. This will give better
suggestions when editing a short file. Example: suggestions when editing a short file. Example:
COMMON the of to and a in is it you that he was for on are ~ COMMON the of to and a in is it you that he she was for on are ~
The words must be separated by white space, up to 25 per line. The words must be separated by white space, up to 25 per line.
When multiple regions are specified in a ":mkspell" command the common words When multiple regions are specified in a ":mkspell" command the common words

View File

@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 8.2. Last change: 2020 Jul 08 *syntax.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3648,7 +3648,7 @@ DEFINING FOLDLEVEL *:syn-foldlevel*
start: Use level of item containing start of line. start: Use level of item containing start of line.
minimum: Use lowest local-minimum level of items on line. minimum: Use lowest local-minimum level of items on line.
The default is 'start'. Use 'minimum' to search a line horizontally The default is "start". Use "minimum" to search a line horizontally
for the lowest level contained on the line that is followed by a for the lowest level contained on the line that is followed by a
higher level. This produces more natural folds when syntax items higher level. This produces more natural folds when syntax items
may close and open horizontally within a line. may close and open horizontally within a line.
@@ -3795,9 +3795,9 @@ DEFINING REGIONS *:syn-region* *:syn-start* *:syn-skip* *:syn-end*
[keepend] [keepend]
[extend] [extend]
[excludenl] [excludenl]
start={start_pattern} .. start={start-pattern} ..
[skip={skip_pattern}] [skip={skip-pattern}]
end={end_pattern} .. end={end-pattern} ..
[{options}] [{options}]
This defines one region. It may span several lines. This defines one region. It may span several lines.
@@ -3819,12 +3819,12 @@ DEFINING REGIONS *:syn-region* *:syn-start* *:syn-skip* *:syn-end*
extend a containing match or item. Only extend a containing match or item. Only
useful for end patterns. Must be given before useful for end patterns. Must be given before
the patterns it applies to. |:syn-excludenl| the patterns it applies to. |:syn-excludenl|
start={start_pattern} The search pattern that defines the start of start={start-pattern} The search pattern that defines the start of
the region. See |:syn-pattern| below. the region. See |:syn-pattern| below.
skip={skip_pattern} The search pattern that defines text inside skip={skip-pattern} The search pattern that defines text inside
the region where not to look for the end the region where not to look for the end
pattern. See |:syn-pattern| below. pattern. See |:syn-pattern| below.
end={end_pattern} The search pattern that defines the end of end={end-pattern} The search pattern that defines the end of
the region. See |:syn-pattern| below. the region. See |:syn-pattern| below.
Example: > Example: >
@@ -4348,7 +4348,7 @@ Notes:
- A negative offset for an end pattern may not always work, because the end - A negative offset for an end pattern may not always work, because the end
pattern may be detected when the highlighting should already have stopped. pattern may be detected when the highlighting should already have stopped.
- Before Vim 7.2 the offsets were counted in bytes instead of characters. - Before Vim 7.2 the offsets were counted in bytes instead of characters.
This didn't work well for multi-byte characters, so it was changed with the This didn't work well for multibyte characters, so it was changed with the
Vim 7.2 release. Vim 7.2 release.
- The start of a match cannot be in a line other than where the pattern - The start of a match cannot be in a line other than where the pattern
matched. This doesn't work: "a\nb"ms=e. You can make the highlighting matched. This doesn't work: "a\nb"ms=e. You can make the highlighting

View File

@@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 8.2. Last change: 2020 Feb 06 *tabpage.txt* For Vim version 8.2. Last change: 2020 Aug 10
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -142,6 +142,7 @@ something else.
:tabclose + " close the next tab page :tabclose + " close the next tab page
:tabclose 3 " close the third tab page :tabclose 3 " close the third tab page
:tabclose $ " close the last tab page :tabclose $ " close the last tab page
:tabclose # " close the last accessed tab page
< <
*:tabo* *:tabonly* *:tabo* *:tabonly*
:tabo[nly][!] Close all other tab pages. :tabo[nly][!] Close all other tab pages.
@@ -170,6 +171,8 @@ something else.
" one " one
:tabonly 1 " close all tab pages except the first one :tabonly 1 " close all tab pages except the first one
:tabonly $ " close all tab pages except the last one :tabonly $ " close all tab pages except the last one
:tabonly # " close all tab pages except the last
" accessed one
SWITCHING TO ANOTHER TAB PAGE: SWITCHING TO ANOTHER TAB PAGE:
@@ -192,6 +195,7 @@ gt *i_CTRL-<PageDown>* *i_<C-PageDown>*
:+2tabnext " go to the two next tab page :+2tabnext " go to the two next tab page
:1tabnext " go to the first tab page :1tabnext " go to the first tab page
:$tabnext " go to the last tab page :$tabnext " go to the last tab page
:tabnext # " go to the last accessed tab page
:tabnext $ " as above :tabnext $ " as above
:tabnext - " go to the previous tab page :tabnext - " go to the previous tab page
:tabnext -1 " as above :tabnext -1 " as above
@@ -221,6 +225,8 @@ gT Go to the previous tab page. Wraps around from the first one
*:tabl* *:tablast* *:tabl* *:tablast*
:tabl[ast] Go to the last tab page. :tabl[ast] Go to the last tab page.
*g<Tab>* *CTRL-W_g<Tab>* *<C-Tab>*
g<Tab> Go to the last accessed tab page.
Other commands: Other commands:
*:tabs* *:tabs*
@@ -253,6 +259,8 @@ REORDERING TAB PAGES:
:tabmove " move the tab page to the last :tabmove " move the tab page to the last
:$tabmove " as above :$tabmove " as above
:tabmove $ " as above :tabmove $ " as above
:tabmove # " move the tab page after the last accessed
" tab page
:tabm[ove] +[N] :tabm[ove] +[N]
:tabm[ove] -[N] :tabm[ove] -[N]

View File

@@ -3497,6 +3497,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
<C-ScrollWheelLeft> scroll.txt /*<C-ScrollWheelLeft>* <C-ScrollWheelLeft> scroll.txt /*<C-ScrollWheelLeft>*
<C-ScrollWheelRight> scroll.txt /*<C-ScrollWheelRight>* <C-ScrollWheelRight> scroll.txt /*<C-ScrollWheelRight>*
<C-ScrollWheelUp> scroll.txt /*<C-ScrollWheelUp>* <C-ScrollWheelUp> scroll.txt /*<C-ScrollWheelUp>*
<C-Tab> tabpage.txt /*<C-Tab>*
<CR> motion.txt /*<CR>* <CR> motion.txt /*<CR>*
<CSI> intro.txt /*<CSI>* <CSI> intro.txt /*<CSI>*
<Char-> map.txt /*<Char->* <Char-> map.txt /*<Char->*
@@ -3816,6 +3817,7 @@ CTRL-W_bar windows.txt /*CTRL-W_bar*
CTRL-W_c windows.txt /*CTRL-W_c* CTRL-W_c windows.txt /*CTRL-W_c*
CTRL-W_d tagsrch.txt /*CTRL-W_d* CTRL-W_d tagsrch.txt /*CTRL-W_d*
CTRL-W_f windows.txt /*CTRL-W_f* CTRL-W_f windows.txt /*CTRL-W_f*
CTRL-W_g<Tab> tabpage.txt /*CTRL-W_g<Tab>*
CTRL-W_gF windows.txt /*CTRL-W_gF* CTRL-W_gF windows.txt /*CTRL-W_gF*
CTRL-W_gT windows.txt /*CTRL-W_gT* CTRL-W_gT windows.txt /*CTRL-W_gT*
CTRL-W_g] windows.txt /*CTRL-W_g]* CTRL-W_g] windows.txt /*CTRL-W_g]*
@@ -3892,6 +3894,8 @@ E10 message.txt /*E10*
E100 diff.txt /*E100* E100 diff.txt /*E100*
E101 diff.txt /*E101* E101 diff.txt /*E101*
E102 diff.txt /*E102* E102 diff.txt /*E102*
E1023 vim9.txt /*E1023*
E1024 vim9.txt /*E1024*
E103 diff.txt /*E103* E103 diff.txt /*E103*
E104 digraph.txt /*E104* E104 digraph.txt /*E104*
E1042 vim9.txt /*E1042* E1042 vim9.txt /*E1042*
@@ -3904,7 +3908,12 @@ E1092 vim9.txt /*E1092*
E1094 vim9.txt /*E1094* E1094 vim9.txt /*E1094*
E11 cmdline.txt /*E11* E11 cmdline.txt /*E11*
E110 eval.txt /*E110* E110 eval.txt /*E110*
E1109 eval.txt /*E1109*
E111 eval.txt /*E111* E111 eval.txt /*E111*
E1110 eval.txt /*E1110*
E1111 eval.txt /*E1111*
E1112 eval.txt /*E1112*
E1113 eval.txt /*E1113*
E112 eval.txt /*E112* E112 eval.txt /*E112*
E113 eval.txt /*E113* E113 eval.txt /*E113*
E114 eval.txt /*E114* E114 eval.txt /*E114*
@@ -4062,7 +4071,6 @@ E252 options.txt /*E252*
E253 mbyte.txt /*E253* E253 mbyte.txt /*E253*
E254 message.txt /*E254* E254 message.txt /*E254*
E255 sign.txt /*E255* E255 sign.txt /*E255*
E256 message.txt /*E256*
E257 if_cscop.txt /*E257* E257 if_cscop.txt /*E257*
E258 remote.txt /*E258* E258 remote.txt /*E258*
E259 if_cscop.txt /*E259* E259 if_cscop.txt /*E259*
@@ -4435,6 +4443,7 @@ E607 eval.txt /*E607*
E608 eval.txt /*E608* E608 eval.txt /*E608*
E609 if_cscop.txt /*E609* E609 if_cscop.txt /*E609*
E61 pattern.txt /*E61* E61 pattern.txt /*E61*
E610 editing.txt /*E610*
E612 sign.txt /*E612* E612 sign.txt /*E612*
E613 print.txt /*E613* E613 print.txt /*E613*
E614 editing.txt /*E614* E614 editing.txt /*E614*
@@ -5720,6 +5729,7 @@ char2nr() eval.txt /*char2nr()*
characterwise motion.txt /*characterwise* characterwise motion.txt /*characterwise*
characterwise-register change.txt /*characterwise-register* characterwise-register change.txt /*characterwise-register*
characterwise-visual visual.txt /*characterwise-visual* characterwise-visual visual.txt /*characterwise-visual*
charclass() eval.txt /*charclass()*
charconvert_from-variable eval.txt /*charconvert_from-variable* charconvert_from-variable eval.txt /*charconvert_from-variable*
charconvert_to-variable eval.txt /*charconvert_to-variable* charconvert_to-variable eval.txt /*charconvert_to-variable*
charity uganda.txt /*charity* charity uganda.txt /*charity*
@@ -5744,6 +5754,7 @@ cino-J indent.txt /*cino-J*
cino-L indent.txt /*cino-L* cino-L indent.txt /*cino-L*
cino-M indent.txt /*cino-M* cino-M indent.txt /*cino-M*
cino-N indent.txt /*cino-N* cino-N indent.txt /*cino-N*
cino-P indent.txt /*cino-P*
cino-U indent.txt /*cino-U* cino-U indent.txt /*cino-U*
cino-W indent.txt /*cino-W* cino-W indent.txt /*cino-W*
cino-^ indent.txt /*cino-^* cino-^ indent.txt /*cino-^*
@@ -6311,6 +6322,7 @@ extend() eval.txt /*extend()*
extension-removal cmdline.txt /*extension-removal* extension-removal cmdline.txt /*extension-removal*
extensions-improvements todo.txt /*extensions-improvements* extensions-improvements todo.txt /*extensions-improvements*
f motion.txt /*f* f motion.txt /*f*
false vim9.txt /*false*
false-variable eval.txt /*false-variable* false-variable eval.txt /*false-variable*
faq intro.txt /*faq* faq intro.txt /*faq*
farsi farsi.txt /*farsi* farsi farsi.txt /*farsi*
@@ -6862,6 +6874,7 @@ g<End> motion.txt /*g<End>*
g<Home> motion.txt /*g<Home>* g<Home> motion.txt /*g<Home>*
g<LeftMouse> tagsrch.txt /*g<LeftMouse>* g<LeftMouse> tagsrch.txt /*g<LeftMouse>*
g<RightMouse> tagsrch.txt /*g<RightMouse>* g<RightMouse> tagsrch.txt /*g<RightMouse>*
g<Tab> tabpage.txt /*g<Tab>*
g<Up> motion.txt /*g<Up>* g<Up> motion.txt /*g<Up>*
g? change.txt /*g?* g? change.txt /*g?*
g?? change.txt /*g??* g?? change.txt /*g??*
@@ -6945,6 +6958,7 @@ gettabinfo() eval.txt /*gettabinfo()*
gettabvar() eval.txt /*gettabvar()* gettabvar() eval.txt /*gettabvar()*
gettabwinvar() eval.txt /*gettabwinvar()* gettabwinvar() eval.txt /*gettabwinvar()*
gettagstack() eval.txt /*gettagstack()* gettagstack() eval.txt /*gettagstack()*
gettext() eval.txt /*gettext()*
getwininfo() eval.txt /*getwininfo()* getwininfo() eval.txt /*getwininfo()*
getwinpos() eval.txt /*getwinpos()* getwinpos() eval.txt /*getwinpos()*
getwinposx() eval.txt /*getwinposx()* getwinposx() eval.txt /*getwinposx()*
@@ -8150,6 +8164,7 @@ new-more-highlighting version7.txt /*new-more-highlighting*
new-more-unicode version7.txt /*new-more-unicode* new-more-unicode version7.txt /*new-more-unicode*
new-multi-byte version5.txt /*new-multi-byte* new-multi-byte version5.txt /*new-multi-byte*
new-multi-lang version6.txt /*new-multi-lang* new-multi-lang version6.txt /*new-multi-lang*
new-multibyte version5.txt /*new-multibyte*
new-netrw-explore version7.txt /*new-netrw-explore* new-netrw-explore version7.txt /*new-netrw-explore*
new-network-files version6.txt /*new-network-files* new-network-files version6.txt /*new-network-files*
new-omni-completion version7.txt /*new-omni-completion* new-omni-completion version7.txt /*new-omni-completion*
@@ -8163,7 +8178,7 @@ new-persistent-undo version7.txt /*new-persistent-undo*
new-plugins version6.txt /*new-plugins* new-plugins version6.txt /*new-plugins*
new-popup-window version8.txt /*new-popup-window* new-popup-window version8.txt /*new-popup-window*
new-posix version7.txt /*new-posix* new-posix version7.txt /*new-posix*
new-print-multi-byte version7.txt /*new-print-multi-byte* new-print-multibyte version7.txt /*new-print-multibyte*
new-printing version6.txt /*new-printing* new-printing version6.txt /*new-printing*
new-python3 version7.txt /*new-python3* new-python3 version7.txt /*new-python3*
new-regexp-engine version7.txt /*new-regexp-engine* new-regexp-engine version7.txt /*new-regexp-engine*
@@ -8299,12 +8314,14 @@ pascal.vim syntax.txt /*pascal.vim*
patches-8 version8.txt /*patches-8* patches-8 version8.txt /*patches-8*
patches-8.1 version8.txt /*patches-8.1* patches-8.1 version8.txt /*patches-8.1*
patches-8.2 version8.txt /*patches-8.2* patches-8.2 version8.txt /*patches-8.2*
patches-after-8.2 version8.txt /*patches-after-8.2*
pathshorten() eval.txt /*pathshorten()* pathshorten() eval.txt /*pathshorten()*
pattern pattern.txt /*pattern* pattern pattern.txt /*pattern*
pattern-atoms pattern.txt /*pattern-atoms* pattern-atoms pattern.txt /*pattern-atoms*
pattern-delimiter change.txt /*pattern-delimiter* pattern-delimiter change.txt /*pattern-delimiter*
pattern-multi-byte pattern.txt /*pattern-multi-byte* pattern-multi-byte pattern.txt /*pattern-multi-byte*
pattern-multi-items pattern.txt /*pattern-multi-items* pattern-multi-items pattern.txt /*pattern-multi-items*
pattern-multibyte pattern.txt /*pattern-multibyte*
pattern-overview pattern.txt /*pattern-overview* pattern-overview pattern.txt /*pattern-overview*
pattern-searches pattern.txt /*pattern-searches* pattern-searches pattern.txt /*pattern-searches*
pattern.txt pattern.txt /*pattern.txt* pattern.txt pattern.txt /*pattern.txt*
@@ -8468,6 +8485,7 @@ progname-variable eval.txt /*progname-variable*
progpath-variable eval.txt /*progpath-variable* progpath-variable eval.txt /*progpath-variable*
progress.vim syntax.txt /*progress.vim* progress.vim syntax.txt /*progress.vim*
prompt-buffer channel.txt /*prompt-buffer* prompt-buffer channel.txt /*prompt-buffer*
prompt_getprompt() eval.txt /*prompt_getprompt()*
prompt_setcallback() eval.txt /*prompt_setcallback()* prompt_setcallback() eval.txt /*prompt_setcallback()*
prompt_setinterrupt() eval.txt /*prompt_setinterrupt()* prompt_setinterrupt() eval.txt /*prompt_setinterrupt()*
prompt_setprompt() eval.txt /*prompt_setprompt()* prompt_setprompt() eval.txt /*prompt_setprompt()*
@@ -8816,6 +8834,7 @@ set-option options.txt /*set-option*
set-spc-auto spell.txt /*set-spc-auto* set-spc-auto spell.txt /*set-spc-auto*
setbufline() eval.txt /*setbufline()* setbufline() eval.txt /*setbufline()*
setbufvar() eval.txt /*setbufvar()* setbufvar() eval.txt /*setbufvar()*
setcellwidths() eval.txt /*setcellwidths()*
setcharsearch() eval.txt /*setcharsearch()* setcharsearch() eval.txt /*setcharsearch()*
setcmdpos() eval.txt /*setcmdpos()* setcmdpos() eval.txt /*setcmdpos()*
setenv() eval.txt /*setenv()* setenv() eval.txt /*setenv()*
@@ -9626,6 +9645,7 @@ toupper() eval.txt /*toupper()*
tr() eval.txt /*tr()* tr() eval.txt /*tr()*
trim() eval.txt /*trim()* trim() eval.txt /*trim()*
trojan-horse starting.txt /*trojan-horse* trojan-horse starting.txt /*trojan-horse*
true vim9.txt /*true*
true-variable eval.txt /*true-variable* true-variable eval.txt /*true-variable*
trunc() eval.txt /*trunc()* trunc() eval.txt /*trunc()*
try-conditionals eval.txt /*try-conditionals* try-conditionals eval.txt /*try-conditionals*
@@ -9637,6 +9657,8 @@ tutor usr_01.txt /*tutor*
twice if_cscop.txt /*twice* twice if_cscop.txt /*twice*
two-engines pattern.txt /*two-engines* two-engines pattern.txt /*two-engines*
type() eval.txt /*type()* type() eval.txt /*type()*
type-casting vim9.txt /*type-casting*
type-checking vim9.txt /*type-checking*
type-inference vim9.txt /*type-inference* type-inference vim9.txt /*type-inference*
type-mistakes tips.txt /*type-mistakes* type-mistakes tips.txt /*type-mistakes*
typecorr-settings usr_41.txt /*typecorr-settings* typecorr-settings usr_41.txt /*typecorr-settings*
@@ -9933,6 +9955,7 @@ valgrind debug.txt /*valgrind*
values() eval.txt /*values()* values() eval.txt /*values()*
var-functions usr_41.txt /*var-functions* var-functions usr_41.txt /*var-functions*
variable-scope eval.txt /*variable-scope* variable-scope eval.txt /*variable-scope*
variable-types vim9.txt /*variable-types*
variables eval.txt /*variables* variables eval.txt /*variables*
various various.txt /*various* various various.txt /*various*
various-cmds various.txt /*various-cmds* various-cmds various.txt /*various-cmds*

View File

@@ -1,4 +1,4 @@
*terminal.txt* For Vim version 8.2. Last change: 2020 Jun 06 *terminal.txt* For Vim version 8.2. Last change: 2020 Sep 04
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -476,9 +476,11 @@ term_dumpdiff({filename}, {filename} [, {options}])
"term_name" name to use for the buffer name, instead "term_name" name to use for the buffer name, instead
of the first file name. of the first file name.
"term_rows" vertical size to use for the terminal, "term_rows" vertical size to use for the terminal,
instead of using 'termwinsize' instead of using 'termwinsize', but
respecting the minimal size
"term_cols" horizontal size to use for the terminal, "term_cols" horizontal size to use for the terminal,
instead of using 'termwinsize' instead of using 'termwinsize', but
respecting the minimal size
"vertical" split the window vertically "vertical" split the window vertically
"curwin" use the current window, do not split the "curwin" use the current window, do not split the
window; fails if the current buffer window; fails if the current buffer

View File

@@ -1,4 +1,4 @@
*testing.txt* For Vim version 8.2. Last change: 2020 Jul 11 *testing.txt* For Vim version 8.2. Last change: 2020 Sep 06
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -20,18 +20,17 @@ and for testing plugins.
Vim can be tested after building it, usually with "make test". Vim can be tested after building it, usually with "make test".
The tests are located in the directory "src/testdir". The tests are located in the directory "src/testdir".
There are several types of tests added over time: There are two types of tests added over time:
test33.in oldest, don't add any of these test20.in oldest, only for tiny and small builds
test_something.in old style tests
test_something.vim new style tests test_something.vim new style tests
*new-style-testing* *new-style-testing*
New tests should be added as new style tests. These use functions such as New tests should be added as new style tests. The test scripts are named
|assert_equal()| to keep the test commands and the expected result in one test_<feature>.vim (replace <feature> with the feature under test). These use
place. functions such as |assert_equal()| to keep the test commands and the expected
result in one place.
*old-style-testing* *old-style-testing*
In some cases an old style test needs to be used. E.g. when testing Vim These tests are used only for testing Vim without the |+eval| feature.
without the |+eval| feature.
Find more information in the file src/testdir/README.txt. Find more information in the file src/testdir/README.txt.
@@ -292,8 +291,9 @@ assert_exception({error} [, {msg}]) *assert_exception()*
catch catch
call assert_exception('E492:') call assert_exception('E492:')
endtry endtry
<
assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()* *assert_fails()*
assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
Run {cmd} and add an error message to |v:errors| if it does Run {cmd} and add an error message to |v:errors| if it does
NOT produce an error or when {error} is not found in the NOT produce an error or when {error} is not found in the
error message. Also see |assert-return|. error message. Also see |assert-return|.
@@ -312,6 +312,18 @@ assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
string for the first error: > string for the first error: >
assert_fails('cmd', ['', 'E987:']) assert_fails('cmd', ['', 'E987:'])
< <
If {msg} is empty then it is not used. Do this to get the
default message when passing the {lnum} argument.
When {lnum} is present and not negative, and the {error}
argument is present and matches, then this is compared with
the line number at which the error was reported. That can be
the line number in a function or in a script.
When {context} is present it is used as a pattern and matched
against the context (script name or function name) where
{lnum} is located in.
Note that beeping is not considered an error, and some failing Note that beeping is not considered an error, and some failing
commands only beep. Use |assert_beeps()| for those. commands only beep. Use |assert_beeps()| for those.

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2020 Jul 26 *todo.txt* For Vim version 8.2. Last change: 2020 Sep 07
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,25 +38,65 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs* *known-bugs*
-------------------- Known bugs and current work ----------------------- -------------------- Known bugs and current work -----------------------
Why does Test_invalid_sid() not work in the GUI?
Making everything work: Making everything work:
- more items in https://github.com/vim/vim/issues/6507 - Should :const work the same as in legacy script?
- More "goto failed" with check for trylevel. Or should it work like in Typescript: only the variable is fixed, not the
- memory leak in test_vim9_script value itself.
- Check that when sourcing a Vim9 script, only the global items can be used. Then use ":const!" to also fix/lock the value?
Typescript uses "as const", which is weird.
Alternative: const var = <const>value
looks quite strange quite verbose
But can be used in several places:
SomeFunc(<const>[1, 2, 3])
In Vim this basically means "lock this value".
How about:
SomeFunc(<const>[[1], [2], [3]]) # are sub-lists immutable?
SomeFunc(<const>myList) # is myList mutable afterwards?
- Run the same tests in :def and Vim9 script, like in Test_expr7_not()
- :put with a "=" register argument doesn't work, need to find the expression - :put with a "=" register argument doesn't work, need to find the expression
and compile it. (#6397) and compile it. (#6397)
- At the script level, keep script variables local to the block they are - At the Vim9 script level, keep script variables local to the block they are
declared in? Need to remember what variables were declared and delete them declared in, like in Javascript (using :let).
when leaving the block. -> Need to remember what variables were declared and delete them when
- Implement { } block at the script level. leaving the block.
-> if a function is defined it may need to keep the block-locals
Then Implement { } block at the script level.
- Recognize call to assert_fails() and execute it in the function context?
Won't work if the command itself fails, not an expression failure:
assert_fails("unknown", "E99:")
Use try/catch is complicated:
let did_catch = false
try
unknown
catch
assert_caught('E99:')
did_catch = true
endtry
assert_true('did_catch')
Add a new command,
assertfail
unknown
endassertfail E99:.*unknown
- In autocmd: use legacy syntax, not whatever the current script uses?
- need to check type when a declaration specifies a type: #6507 - need to check type when a declaration specifies a type: #6507
let nr: number = 'asdf' let nr: number = 'asdf'
- Make sure that in vim9script a function call without namespace only finds
the script-local function, not a global one.
- Make sure that where a callback is expected a function can be used (without
quotes). E.g. sort() and map(). Also at the script level.
- Make map() give an error if the resulting type is wrong. - 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 Add mapnew() to create a new List/Dict for the result, which can have a
different value type. different value type.
- When defining an :autocmd or :command, how to specify using Vim9 syntax?
- always do this when defined in a Vim9 script
- add some command modifier.
- For an :autocmd and :command argument, if a following line starts with "|"
append it. It's like line continuation. (#6702)
- Implement "export {one, two three}". - Implement "export {one, two three}".
- ISN_CHECKTYPE could use check_argtype() - ISN_CHECKTYPE could use check_argtype()
- Slice of list: [1, 2, 3][1:2].
- give error for variable name: - give error for variable name:
let p = function('NoSuchFunc') let p = function('NoSuchFunc')
- Give runtime error if function argument is wrong. - Give runtime error if function argument is wrong.
@@ -78,6 +118,7 @@ Making everything work:
ret[i] = string(i) ret[i] = string(i)
- Appending to dict item doesn't work: - Appending to dict item doesn't work:
let d[i] ..= value let d[i] ..= value
- Using ".." at script level doesn't convert arguments to a string.
- Compile replacement of :s command: s/pat/\=expr/ - Compile replacement of :s command: s/pat/\=expr/
- Compile redir to local variable: var_redir_start(). - Compile redir to local variable: var_redir_start().
- Compile builtin functions that access local variables: - Compile builtin functions that access local variables:
@@ -102,8 +143,6 @@ Making everything work:
New syntax and functionality: New syntax and functionality:
Improve error checking: Improve error checking:
- "echo Func()" is an error if Func() does not return anything. - "echo Func()" is an error if Func() does not return anything.
Test:
- Using a Vim9 autoload script (functions must be global).
Also: Also:
- For range: make table of first ASCII character with flag to quickly check if - For range: make table of first ASCII character with flag to quickly check if
it can be a Vim9 command. E.g. "+" can, but "." can't. it can be a Vim9 command. E.g. "+" can, but "." can't.
@@ -116,8 +155,6 @@ Also:
- Test each level of expressions properly, with type checking - Test each level of expressions properly, with type checking
- Test try/catch and throw better, also nested. - Test try/catch and throw better, also nested.
Test return inside try/finally jumps to finally and then returns. Test return inside try/finally jumps to finally and then returns.
- call autoload function.
- Implement more expressions, e.g. [a:b]
- can use func as reference: - can use func as reference:
def SomeFunc() ... def SomeFunc() ...
map(list, SomeFunc) map(list, SomeFunc)
@@ -154,6 +191,8 @@ Popup windows:
positioned? PopupNew? Could be used to set some options or move it out of positioned? PopupNew? Could be used to set some options or move it out of
the way. (#5737) the way. (#5737)
However, it may also cause trouble, changing the popup of another plugin. However, it may also cause trouble, changing the popup of another plugin.
- Width is not computed correctly when minwidth and maxwidth are &columns
and padding and a scrollbar are used. (#6676)
- Add a way to use popup_menu() synchronously: instead of invoking the - Add a way to use popup_menu() synchronously: instead of invoking the
callback, return the choice. (Ben Jackson, #6534) callback, return the choice. (Ben Jackson, #6534)
- Use popup (or popup menu) for command line completion - Use popup (or popup menu) for command line completion
@@ -169,13 +208,11 @@ Popup windows:
- Figure out the size and position better if wrapping inserts indent - Figure out the size and position better if wrapping inserts indent
Text properties: Text properties:
- :goto does not go to the right place when test properties are present. - :goto does not go to the right place when text properties are present.
(#5930) (#5930)
- "cc" does not call inserted_bytes(). (Axel Forsman, #5763) - "cc" does not call inserted_bytes(). (Axel Forsman, #5763)
- Get E685 with a sequence of commands. (#5674)
- Combining text property with 'cursorline' does not always work (Billie - Combining text property with 'cursorline' does not always work (Billie
Cleek, #5533) Cleek, #5533)
- Text properties spanning more than one line. #5683
- See remarks at top of src/textprop.c - See remarks at top of src/textprop.c
'incsearch' with :s: 'incsearch' with :s:
@@ -200,7 +237,7 @@ Terminal debugger:
an already running program. (M. Kelly) an already running program. (M. Kelly)
- When only gdb window exists, on "quit" edit another buffer. - When only gdb window exists, on "quit" edit another buffer.
- Use a sign group - Use a sign group
- Termdebug does not work when Vim was build with mzscheme: gdb hangs just - Termdebug does not work when Vim was built with mzscheme: gdb hangs just
after "run". Everything else works, including communication channel. Not after "run". Everything else works, including communication channel. Not
initializing mzscheme avoid the problem, thus it's not some #ifdef. initializing mzscheme avoid the problem, thus it's not some #ifdef.
- Add support for lldb? issue #3565 - Add support for lldb? issue #3565
@@ -252,18 +289,25 @@ Terminal emulator window:
- When 'encoding' is not utf-8, or the job is using another encoding, setup - When 'encoding' is not utf-8, or the job is using another encoding, setup
conversions. conversions.
Error numbers available: Error numbers available: E653
E610, E611, E653
Patch to implement the vimtutor with a plugin: #6414
Was originally writtten by Felipe Morales.
Remove SPACE_IN_FILENAME ? It is only used for completion. Remove SPACE_IN_FILENAME ? It is only used for completion.
Patch to use collaction based sorting. (Christian Brabandt, #6229) Patch to use collation based sorting. (Christian Brabandt, #6229)
Add 'termguiattr' option, use "gui=" attributes in the terminal? Would work
with 'termguicolors'. #1740
Patch for blockwise paste reporting changes: #6660.
Can we detect true color support? https://gist.github.com/XVilka/8346728 Can we detect true color support? https://gist.github.com/XVilka/8346728
Try setting a color then request the current color, like using t_u7. Try setting a color then request the current color, like using t_u7.
Check out PR #543 (Roland Puntaier). Check out PR #543 (Roland Puntaier).
Patch for multi-byte characters in langmap and applying a mapping on them. Patch for multibyte characters in langmap and applying a mapping on them.
(Christian Brabandt, 2015 Jun 12, update July 25) (Christian Brabandt, 2015 Jun 12, update July 25)
Is this the right solution? Need to cleanup langmap behavior: Is this the right solution? Need to cleanup langmap behavior:
- in vgetorpeek() apply langmap to the typeahead buffer and put the result in - in vgetorpeek() apply langmap to the typeahead buffer and put the result in
@@ -333,6 +377,9 @@ character. (#6154)
undo result wrong: Masato Nishihata, #4798 undo result wrong: Masato Nishihata, #4798
After recovering from a swap file the undofile should not be used, it causes
corruption. (#6631)
When 'lazyredraw' is set sometimes the title is not updated. When 'lazyredraw' is set sometimes the title is not updated.
(Jason Franklin, 2020 Feb 3) Looks like a race condition. (Jason Franklin, 2020 Feb 3) Looks like a race condition.
@@ -354,9 +401,6 @@ When changing the crypt key the buffer should be considered modified.
Like when changing 'fileformat'. Save the old key in save_file_ff(). Like when changing 'fileformat'. Save the old key in save_file_ff().
(Ninu-Ciprian Marginean) (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. Strange sequence of BufWipeout and BufNew events while doing omni-complete.
(Paul Jolly, #5656) (Paul Jolly, #5656)
Get BufDelete without preceding BufNew. (Paul Jolly, #5694) Get BufDelete without preceding BufNew. (Paul Jolly, #5694)
@@ -379,6 +423,7 @@ Undo puts cursor in wrong line after "cG<Esc>" undo.
Implement completion for "breakadd". Should expand the second argument, e.g. Implement completion for "breakadd". Should expand the second argument, e.g.
"func", and then function names after ":breakadd func". Including "func", and then function names after ":breakadd func". Including
script-local functions. script-local functions.
Also for ":profile".
:unmap <c-n> gives error but does remove the mapping. (Antony Scriven, 2019 :unmap <c-n> gives error but does remove the mapping. (Antony Scriven, 2019
Dec 19) Dec 19)
@@ -393,6 +438,9 @@ remains equal? Then %argdel to clean it up. Do try this with 'hidden' set.
Also #4994: window-local options not always restored, related to using :badd. Also #4994: window-local options not always restored, related to using :badd.
Also #5326: netrw buffers are not restored. Also #5326: netrw buffers are not restored.
Alternate file is not set in the session file. Use setwintabvar("@#") ?
(#6714)
When 'backupdir' has a path ending in double slash (meaning: use full path of When 'backupdir' has a path ending in double slash (meaning: use full path of
the file) combined with 'patchmode' the file name is wrong. (#5791) the file) combined with 'patchmode' the file name is wrong. (#5791)
@@ -404,6 +452,7 @@ Should do current file first and not split it up when more results are found.
Undo history wrong when ":next file" re-uses a buffer. (#5426) Undo history wrong when ":next file" re-uses a buffer. (#5426)
ex_next() should pass flag to do_argfile(), then to do_ecmd(). ex_next() should pass flag to do_argfile(), then to do_ecmd().
Is there a test for this?
Help for ":argadd fname" says that if "fname" is already in the argument list Help for ":argadd fname" says that if "fname" is already in the argument list
that entry is used. But instead it's always added. (#6210) that entry is used. But instead it's always added. (#6210)
@@ -1200,8 +1249,6 @@ Suggestion to improve pt-br spell checking. (Marcelo D Montu, 2016 Dec 15,
Error in test_startup_utf8 on Solaris. (Danek Duvall, 2016 Aug 17) Error in test_startup_utf8 on Solaris. (Danek Duvall, 2016 Aug 17)
Completion for :!cmd shows each match twice. #1435
GTK: When adding a timer from 'balloonexpr' it won't fire, because GTK: When adding a timer from 'balloonexpr' it won't fire, because
g_main_context_iteration() doesn't return. Need to trigger an event when the g_main_context_iteration() doesn't return. Need to trigger an event when the
timer expires. timer expires.
@@ -1211,7 +1258,7 @@ Screen update bug related to matchparen. (Chris Heath, 2017 Mar 4, #1532)
Rule to use "^" for statusline does not work if a space is defined with Rule to use "^" for statusline does not work if a space is defined with
highlighting for both stl and stlnc. Patch by Ken Hamada (itchyny, 2016 Dec 11) highlighting for both stl and stlnc. Patch by Ken Hamada (itchyny, 2016 Dec 11)
8 "stl" and "stlnc" in 'fillchars' don't work for multi-byte characters. 8 "stl" and "stlnc" in 'fillchars' don't work for multibyte characters.
Patch by Christian Wellenbrock, 2013 Jul 5. Patch by Christian Wellenbrock, 2013 Jul 5.
Using CTRL-G_U in InsertCharPre causes trouble for redo. (Israel Chauca Using CTRL-G_U in InsertCharPre causes trouble for redo. (Israel Chauca
@@ -1362,7 +1409,7 @@ Regexp problems:
- Bug with pattern: '\vblock (\d+)\.\n.*\d+%(\1)@<!\.$' - Bug with pattern: '\vblock (\d+)\.\n.*\d+%(\1)@<!\.$'
(Lech Lorens, 2014 Feb 3) (Lech Lorens, 2014 Feb 3)
- Issue 164: freeze on regexp search. - Issue 164: freeze on regexp search.
- Ignorecase not handled properly for multi-byte characters. (Axel Bender, - Ignorecase not handled properly for multibyte characters. (Axel Bender,
2013 Dec 11) 2013 Dec 11)
- Using \@> and \?. (Brett Stahlman, 2013 Dec 21) Remark from Marcin - Using \@> and \?. (Brett Stahlman, 2013 Dec 21) Remark from Marcin
Szamotulski; Remark from Brett 2014 Jan 6 and 7. Szamotulski; Remark from Brett 2014 Jan 6 and 7.
@@ -1400,9 +1447,6 @@ Undo message is not always properly displayed. Patch by Ken Takata, 2013 oct
3. Doesn't work properly according to Yukihiro Nakadaira. 3. Doesn't work properly according to Yukihiro Nakadaira.
Also see #1635. Also see #1635.
When 'keywordprg' starts with ":" the argument is still escaped as a shell
command argument. (Romain Lafourcade, 2016 Oct 16, #1175)
Idea from Sven: record sequence of keys. Useful to show others what they are Idea from Sven: record sequence of keys. Useful to show others what they are
doing (look over the shoulder), and also to see what happened. doing (look over the shoulder), and also to see what happened.
Probably list of keystrokes, with some annotations for mode changes. Probably list of keystrokes, with some annotations for mode changes.
@@ -1471,7 +1515,7 @@ Zero-out krypt key information when no longer in use. (Ben Fritz, 2017 May 15)
Add stronger encryption. Could use libsodium (NaCl). Add stronger encryption. Could use libsodium (NaCl).
https://github.com/jedisct1/libsodium/ https://github.com/jedisct1/libsodium/
Possibly include the needed code so that it can be build everywhere. Possibly include the needed code so that it can be built everywhere.
Add a way to restart a timer. It's similar to timer_stop() and timer_start(), Add a way to restart a timer. It's similar to timer_stop() and timer_start(),
but the reference remains valid. but the reference remains valid.
@@ -1577,7 +1621,7 @@ Patch to add :mapgroup, put mappings in a group like augroup.
Value returned by virtcol() changes depending on how lines wrap. This is Value returned by virtcol() changes depending on how lines wrap. This is
inconsistent with the documentation. inconsistent with the documentation.
Value of virtcol() for '[ and '] depend on multi-byte character. Value of virtcol() for '[ and '] depend on multibyte character.
(Luchr, #277) (Luchr, #277)
Can we cache the syntax attributes, so that updates for 'relativenumber' and Can we cache the syntax attributes, so that updates for 'relativenumber' and
@@ -2109,7 +2153,7 @@ Also for another example (ZyX, 2011 Jan 24)
Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24) Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24)
"0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22) "0g@$" puts '] on last byte of multibyte. (ZyX, 2011 Jan 22)
Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30) Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30)
@@ -2616,7 +2660,7 @@ work, the backslash is removed, assuming that it escapes the (. (Valery
Kondakoff, 2009 May 13) Kondakoff, 2009 May 13)
Win32: Using "gvim --remote-tab-silent elŝuti.txt" doesn't work, the Win32: Using "gvim --remote-tab-silent elŝuti.txt" doesn't work, the
multi-byte character isn't passed and edits elsuti.txt. multibyte character isn't passed and edits elsuti.txt.
(Raúl Núñez de Arenas Coronado, 2015 Dec 18) (Raúl Núñez de Arenas Coronado, 2015 Dec 18)
Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull, Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull,
@@ -2854,9 +2898,6 @@ Jun 18)
If the variable "g:x#y#z" exists completion after ":echo g:x#" doesn't work. If the variable "g:x#y#z" exists completion after ":echo g:x#" doesn't work.
Feature request: Command to go to previous tab, like what CTRL-W p does for
windows. (Adam George)
In debug mode, using CTRL-R = to evaluate a function causes stepping through In debug mode, using CTRL-R = to evaluate a function causes stepping through
the function. (Hari Krishna Dara, 2006 Jun 28) the function. (Hari Krishna Dara, 2006 Jun 28)
@@ -3180,7 +3221,7 @@ Awaiting updated patches:
7 ATTENTION dialog choices are more logical when "Delete it" appears 7 ATTENTION dialog choices are more logical when "Delete it" appears
before "Quit". Patch by Robert Webb, 2004 May 3. before "Quit". Patch by Robert Webb, 2004 May 3.
- Include flipcase patch: ~/vim/patches/wall.flipcase2 ? Make it work - Include flipcase patch: ~/vim/patches/wall.flipcase2 ? Make it work
for multi-byte characters. for multibyte characters.
- Win32: add options to print dialog. Patch from Vipin Aravind. - Win32: add options to print dialog. Patch from Vipin Aravind.
- Patch to add highlighting for whitespace. (Tom Schumm, 2003 Jul 5) - Patch to add highlighting for whitespace. (Tom Schumm, 2003 Jul 5)
use the patch that keeps using HLF_8 if HLF_WS has not use the patch that keeps using HLF_8 if HLF_WS has not
@@ -3676,8 +3717,8 @@ Macintosh:
8 'hkmap' should probably be global-local. 8 'hkmap' should probably be global-local.
8 Using ":s" in a function changes the previous replacement string. Save 8 Using ":s" in a function changes the previous replacement string. Save
"old_sub" in save_search_patterns()? "old_sub" in save_search_patterns()?
8 Should allow multi-byte characters for the delimiter: ":s+a+b+" where "+" 8 Should allow multibyte characters for the delimiter: ":s+a+b+" where "+"
is a multi-byte character. is a multibyte character.
8 When appending to a file and 'patchmode' isn't empty, a backup file is 8 When appending to a file and 'patchmode' isn't empty, a backup file is
always written, even when the original file already exists. always written, even when the original file already exists.
9 When getting focus while writing a large file, could warn for this file 9 When getting focus while writing a large file, could warn for this file
@@ -3832,9 +3873,7 @@ Macintosh:
two lines at a time. "k" doesn't do this. (Cory T. Echols) two lines at a time. "k" doesn't do this. (Cory T. Echols)
8 When write_viminfo() is used while there are many orphaned viminfo 8 When write_viminfo() is used while there are many orphaned viminfo
tempfiles writing the viminfo file fails. Give a clear error message so tempfiles writing the viminfo file fails. Give a clear error message so
that the user knows he has to delete the files. that the user knows the files have to be deleted.
7 It's possible to redefine a script-local function with ":func
<SNR>123_Test()". (Krishna) Disallow this.
I can't reproduce these (if you can, let me know how!): I can't reproduce these (if you can, let me know how!):
@@ -3982,7 +4021,7 @@ Documentation:
- change to cursor position and curswant - change to cursor position and curswant
- if it can be undone (u/CTRL-R) and redone (.) - if it can be undone (u/CTRL-R) and redone (.)
- how it works for folded lines - how it works for folded lines
- how it works with multi-byte characters - how it works with multibyte characters
9 In change.txt, remark about Javadoc isn't right. Right alignment would 9 In change.txt, remark about Javadoc isn't right. Right alignment would
work too. work too.
8 Spread the windows commands over the other files. For example, ":stag" 8 Spread the windows commands over the other files. For example, ":stag"
@@ -4005,7 +4044,7 @@ Help:
- Support a way to view (and edit) .info files. - Support a way to view (and edit) .info files.
- Implement a "sticky" help window, some help text lines that are always - Implement a "sticky" help window, some help text lines that are always
displayed in a window with fixed height. (Guckes) Use "~/.vimhelp" file, displayed in a window with fixed height. (Guckes) Use "~/.vimhelp" file,
user can edit it to insert his favorite commands, new account can contain a user can edit it to insert favorite commands, new account can contain a
default contents. default contents.
- Make 'winminheight' a local option, so that the user can set a minimal - Make 'winminheight' a local option, so that the user can set a minimal
height for the help window (and other windows). height for the help window (and other windows).
@@ -4218,8 +4257,8 @@ Multi-byte characters:
8 Add configure option to be able to disable using the iconv library. (Udo 8 Add configure option to be able to disable using the iconv library. (Udo
Schweigert) Schweigert)
9 'aleph' should be set to 1488 for Unicode. (Zvi Har'El) 9 'aleph' should be set to 1488 for Unicode. (Zvi Har'El)
8 Should add test for using various commands with multi-byte characters. 8 Should add test for using various commands with multibyte characters.
8 'infercase' doesn't work with multi-byte characters. 8 'infercase' doesn't work with multibyte characters.
8 toupper() function doesn't handle byte count changes. 8 toupper() function doesn't handle byte count changes.
7 Searching and composing characters: 7 Searching and composing characters:
When searching, should order of composing characters be ignored? When searching, should order of composing characters be ignored?
@@ -4227,7 +4266,7 @@ Multi-byte characters:
characters can be manipulated. characters can be manipulated.
8 Should implement 'delcombine' for command line editing. 8 Should implement 'delcombine' for command line editing.
8 Detect overlong UTF-8 sequences and handle them like illegal bytes. 8 Detect overlong UTF-8 sequences and handle them like illegal bytes.
8 ":s/x/\u\1/" doesn't work, making uppercase isn't done for multi-byte 8 ":s/x/\u\1/" doesn't work, making uppercase isn't done for multibyte
characters. characters.
8 UTF-8: "r" in Visual mode doesn't take composing characters. 8 UTF-8: "r" in Visual mode doesn't take composing characters.
8 UTF-8: When there is a precomposed character in the font, use it instead 8 UTF-8: When there is a precomposed character in the font, use it instead
@@ -4251,14 +4290,14 @@ Multi-byte characters:
convert_input() for Mac GUI. convert_input() for Mac GUI.
- Add mnemonics from RFC1345 longer than two characters. - Add mnemonics from RFC1345 longer than two characters.
Support CTRL-K _{mnemonic}_ Support CTRL-K _{mnemonic}_
- Make 'breakat' accept multi-byte characters. Problem: can't use a lookup - Make 'breakat' accept multibyte characters. Problem: can't use a lookup
table anymore (breakat_flags[]). table anymore (breakat_flags[]).
Simplistic solution: when 'formatoptions' contains "m" also break a line Simplistic solution: when 'formatoptions' contains "m" also break a line
at a multi-byte character >= 0x100. at a multibyte character >= 0x100.
- Add the possibility to enter mappings which are used whenever normal text - Add the possibility to enter mappings which are used whenever normal text
could be entered. E.g., for "f" command. But not in Normal mode. Sort could be entered. E.g., for "f" command. But not in Normal mode. Sort
of opposite of 'langmap'. Use ":amap" command? of opposite of 'langmap'. Use ":amap" command?
- When breaking a line, take properties of multi-byte characters into - When breaking a line, take properties of multibyte characters into
account. The "linebreak" program from Bruno Haible can do it: account. The "linebreak" program from Bruno Haible can do it:
ftp://ftp.ilog.fr/pub/Users/haible/gnu/linebreak-0.1.tar.gz ftp://ftp.ilog.fr/pub/Users/haible/gnu/linebreak-0.1.tar.gz
But it's very complicated... But it's very complicated...
@@ -5323,11 +5362,11 @@ Text objects:
8 Add test script for text object commands "aw", "iW", etc. 8 Add test script for text object commands "aw", "iW", etc.
8 Add text object for part of a CamelHumpedWord and under_scored_word. 8 Add text object for part of a CamelHumpedWord and under_scored_word.
(Scott Graham) "ac" and "au"? (Scott Graham) "ac" and "au"?
8 Add a text object for any kind of quoting, also with multi-byte 8 Add a text object for any kind of quoting, also with multibyte
characters. Option to specify what quotes are recognized (default: all) characters. Option to specify what quotes are recognized (default: all)
use "aq" and "iq". Use 'quotepairs' to define pairs of quotes, like use "aq" and "iq". Use 'quotepairs' to define pairs of quotes, like
'matchpairs'? 'matchpairs'?
8 Add text object for any kind of parens, also multi-byte ones. 8 Add text object for any kind of parens, also multibyte ones.
8 Add a way to make an ":omap" for a user-defined text object. Requires 8 Add a way to make an ":omap" for a user-defined text object. Requires
changing the starting position in oap->start. changing the starting position in oap->start.
8 Add "gp" and "gP" commands: insert text and make sure there is a single 8 Add "gp" and "gP" commands: insert text and make sure there is a single
@@ -5673,7 +5712,7 @@ Buffer list:
Also for other windows: ":inwin {winnr} {cmd}". How to make sure that Also for other windows: ":inwin {winnr} {cmd}". How to make sure that
this works properly for all commands, and still be able to return to the this works properly for all commands, and still be able to return to the
current buffer/window? E.g.: ":inbuf xxx only". current buffer/window? E.g.: ":inbuf xxx only".
8 Add File.{recent_files} menu entries: Recently edited files. 8 Add File.{recent-files} menu entries: Recently edited files.
Ron Aaron has a plugin for this: mru.vim. Ron Aaron has a plugin for this: mru.vim.
8 Unix: Check all uses of fnamecmp() and fnamencmp() if they should check 8 Unix: Check all uses of fnamecmp() and fnamencmp() if they should check
inode too. inode too.
@@ -5772,7 +5811,7 @@ Modelines:
.cpp files. .cpp files.
- Support the "abbreviate" command in modelines (Kearns). Careful for - Support the "abbreviate" command in modelines (Kearns). Careful for
characters after <Esc>, that is a security leak. characters after <Esc>, that is a security leak.
- Add option setting to ask user if he wants to have the modelines executed - Add an option setting to ask the user if the modelines are to be executed
or not. Same for .exrc in local dir. or not. Same for .exrc in local dir.
@@ -6103,7 +6142,7 @@ Various improvements:
regexp which triggers auto-formatting (for one line). regexp which triggers auto-formatting (for one line).
":set autoformat=\\s$". ":set autoformat=\\s$".
- Be able to redefine where a sentence stops. Use a regexp pattern? - Be able to redefine where a sentence stops. Use a regexp pattern?
- Support multi-byte characters for sentences. Example from Ben Peterson. - Support multibyte characters for sentences. Example from Ben Peterson.
7 Add command "g)" to go to the end of a sentence, "g(" to go back to the 7 Add command "g)" to go to the end of a sentence, "g(" to go back to the
end of a sentence. (Servatius Brandt) end of a sentence. (Servatius Brandt)
- Be able to redefine where a paragraph starts. For "[[" where the '{' is - Be able to redefine where a paragraph starts. For "[[" where the '{' is

View File

@@ -1,4 +1,4 @@
*usr_03.txt* For Vim version 8.2. Last change: 2020 Feb 29 *usr_03.txt* For Vim version 8.2. Last change: 2020 Sep 03
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@@ -30,10 +30,11 @@ Table of contents: |usr_toc.txt|
To move the cursor forward one word, use the "w" command. Like most Vim To move the cursor forward one word, use the "w" command. Like most Vim
commands, you can use a numeric prefix to move past multiple words. For commands, you can use a numeric prefix to move past multiple words. For
example, "3w" moves three words. This figure shows how it works: example, "3w" moves three words. This figure shows how it works (starting at
the position marked with "x"):
This is a line with example text ~ This is a line with example text ~
--->-->->-----------------> x-->-->->----------------->
w w w 3w w w w 3w
Notice that "w" moves to the start of the next word if it already is at the Notice that "w" moves to the start of the next word if it already is at the
@@ -41,15 +42,15 @@ start of a word.
The "b" command moves backward to the start of the previous word: The "b" command moves backward to the start of the previous word:
This is a line with example text ~ This is a line with example text ~
<----<--<-<---------<--- <----<--<-<---------<--x
b b b 2b b b b b 2b b
There is also the "e" command that moves to the next end of a word and "ge", There is also the "e" command that moves to the next end of a word and "ge",
which moves to the previous end of a word: which moves to the previous end of a word:
This is a line with example text ~ This is a line with example text ~
<- <--- -----> ----> <----<----x---->------------>
ge ge e e 2ge ge e we
If you are at the last word of a line, the "w" command will take you to the If you are at the last word of a line, the "w" command will take you to the
first word in the next line. Thus you can use this to move through a first word in the next line. Thus you can use this to move through a
@@ -82,12 +83,12 @@ an <End> key it will do the same thing.
The "^" command moves to the first non-blank character of the line. The "0" The "^" command moves to the first non-blank character of the line. The "0"
command (zero) moves to the very first character of the line, and the <Home> command (zero) moves to the very first character of the line, and the <Home>
key does the same thing. In a picture: key does the same thing. In a picture ("." indicates a space):
^ ^
<------------ <-----------x
.....This is a line with example text ~ .....This is a line with example text ~
<----------------- ---------------> <----------------x x-------------->
0 $ 0 $
(the "....." indicates blanks here) (the "....." indicates blanks here)

View File

@@ -161,7 +161,7 @@ line break.
============================================================================== ==============================================================================
*04.3* Repeating a change *04.3* Repeating a change
The "." command is one of the most simple yet powerful commands in Vim. It The "." command is one of the simplest yet powerful commands in Vim. It
repeats the last change. For instance, suppose you are editing an HTML file repeats the last change. For instance, suppose you are editing an HTML file
and want to delete all the <B> tags. You position the cursor on the first < and want to delete all the <B> tags. You position the cursor on the first <
and delete the <B> with the command "df>". You then go to the < of the next and delete the <B> with the command "df>". You then go to the < of the next

View File

@@ -58,8 +58,8 @@ This initializes Vim for new users (as opposed to traditional Vi users). See
|defaults.vim| for the details. |defaults.vim| for the details.
The vimrc file can contain all the commands that you type after a colon. The The vimrc file can contain all the commands that you type after a colon. The
most simple ones are for setting options. For example, if you want Vim to simplest ones are for setting options. For example, if you want Vim to always
always start with the 'incsearch' option on, add this line your vimrc file: > start with the 'incsearch' option on, add this line your vimrc file: >
set incsearch set incsearch

View File

@@ -327,10 +327,10 @@ for next.
============================================================================== ==============================================================================
*20.5* Command line window *20.5* Command line window
Typing the text in the command line works different from typing text in Insert Typing the text in the command line works differently from typing text in
mode. It doesn't allow many commands to change the text. For most commands Insert mode. It doesn't allow many commands to change the text. For most
that's OK, but sometimes you have to type a complicated command. That's where commands that's OK, but sometimes you have to type a complicated command.
the command line window is useful. That's where the command line window is useful.
Open the command line window with this command: > Open the command line window with this command: >

View File

@@ -336,7 +336,7 @@ How to do that is explained here: |indent-expression|.
============================================================================== ==============================================================================
*30.4* Other indenting *30.4* Other indenting
The most simple form of automatic indenting is with the 'autoindent' option. The simplest form of automatic indenting is with the 'autoindent' option.
It uses the indent from the previous line. A bit smarter is the 'smartindent' It uses the indent from the previous line. A bit smarter is the 'smartindent'
option. This is useful for languages where no indent file is available. option. This is useful for languages where no indent file is available.
'smartindent' is not as smart as 'cindent', but smarter than 'autoindent'. 'smartindent' is not as smart as 'cindent', but smarter than 'autoindent'.

View File

@@ -1,4 +1,4 @@
*usr_31.txt* For Vim version 8.2. Last change: 2007 May 08 *usr_31.txt* For Vim version 8.2. Last change: 2020 Jul 28
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@@ -198,9 +198,9 @@ is not possible in most terminals.
You can start the X-Windows version of gvim with an argument to specify the You can start the X-Windows version of gvim with an argument to specify the
size and position of the window: > size and position of the window: >
gvim -geometry {width}x{height}+{x_offset}+{y_offset} gvim -geometry {width}x{height}+{x-offset}+{y-offset}
{width} and {height} are in characters, {x_offset} and {y_offset} are in {width} and {height} are in characters, {x-offset} and {y-offset} are in
pixels. Example: > pixels. Example: >
gvim -geometry 80x25+100+300 gvim -geometry 80x25+100+300

View File

@@ -1,4 +1,4 @@
*usr_40.txt* For Vim version 8.2. Last change: 2013 Aug 05 *usr_40.txt* For Vim version 8.2. Last change: 2020 Sep 02
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@@ -453,15 +453,15 @@ matching BufWritePre autocommands and executes them, and then it
performs the ":write". performs the ":write".
The general form of the :autocmd command is as follows: > The general form of the :autocmd command is as follows: >
:autocmd [group] {events} {file_pattern} [nested] {command} :autocmd [group] {events} {file-pattern} [++nested] {command}
The [group] name is optional. It is used in managing and calling the commands The [group] name is optional. It is used in managing and calling the commands
(more on this later). The {events} parameter is a list of events (comma (more on this later). The {events} parameter is a list of events (comma
separated) that trigger the command. separated) that trigger the command.
{file_pattern} is a filename, usually with wildcards. For example, using {file-pattern} is a filename, usually with wildcards. For example, using
"*.txt" makes the autocommand be used for all files whose name end in ".txt". "*.txt" makes the autocommand be used for all files whose name end in ".txt".
The optional [nested] flag allows for nesting of autocommands (see below), and The optional [++nested] flag allows for nesting of autocommands (see below),
finally, {command} is the command to be executed. and finally, {command} is the command to be executed.
EVENTS EVENTS
@@ -489,7 +489,7 @@ See |autocmd-events| for a complete list of events.
PATTERNS PATTERNS
The {file_pattern} argument can actually be a comma-separated list of file The {file-pattern} argument can actually be a comma-separated list of file
patterns. For example: "*.c,*.h" matches files ending in ".c" and ".h". patterns. For example: "*.c,*.h" matches files ending in ".c" and ".h".
The usual file wildcards can be used. Here is a summary of the most often The usual file wildcards can be used. Here is a summary of the most often
used ones: used ones:
@@ -578,7 +578,7 @@ trigger any new events. If you read a file in response to a FileChangedShell
event, it will not trigger the autocommands that would set the syntax, for event, it will not trigger the autocommands that would set the syntax, for
example. To make the events triggered, add the "nested" argument: > example. To make the events triggered, add the "nested" argument: >
:autocmd FileChangedShell * nested edit :autocmd FileChangedShell * ++nested edit
EXECUTING AUTOCOMMANDS EXECUTING AUTOCOMMANDS

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 8.2. Last change: 2020 Jun 13 *usr_41.txt* For Vim version 8.2. Last change: 2020 Aug 30
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@@ -44,7 +44,7 @@ script file. You can think of other uses yourself.
If you are familiar with Python, you can find a comparison between If you are familiar with Python, you can find a comparison between
Python and Vim script here, with pointers to other documents: Python and Vim script here, with pointers to other documents:
https://gist.github.com/yegappan/16d964a37ead0979b05e655aa036cad0 https://gist.github.com/yegappan/16d964a37ead0979b05e655aa036cad0
And if you are familiar with Javascript: And if you are familiar with JavaScript:
https://w0rp.com/blog/post/vim-script-for-the-javascripter/ https://w0rp.com/blog/post/vim-script-for-the-javascripter/
Let's start with a simple example: > Let's start with a simple example: >
@@ -327,9 +327,9 @@ Grouping is done with parentheses. No surprises here. Example: >
:echo (10 + 5) * 2 :echo (10 + 5) * 2
< 30 ~ < 30 ~
Strings can be concatenated with ".". Example: > Strings can be concatenated with ".." (see |expr6|). Example: >
:echo "foo" . "bar" :echo "foo" .. "bar"
< foobar ~ < foobar ~
When the ":echo" command gets multiple arguments, it separates them with a When the ":echo" command gets multiple arguments, it separates them with a
@@ -496,9 +496,9 @@ So far the commands in the script were executed by Vim directly. The
very powerful way to build commands and execute them. very powerful way to build commands and execute them.
An example is to jump to a tag, which is contained in a variable: > An example is to jump to a tag, which is contained in a variable: >
:execute "tag " . tag_name :execute "tag " .. tag_name
The "." is used to concatenate the string "tag " with the value of variable The ".." is used to concatenate the string "tag " with the value of variable
"tag_name". Suppose "tag_name" has the value "get_cmd", then the command that "tag_name". Suppose "tag_name" has the value "get_cmd", then the command that
will be executed is: > will be executed is: >
@@ -514,7 +514,7 @@ This jumps to the first line and formats all lines with the "=" operator.
To make ":normal" work with an expression, combine ":execute" with it. To make ":normal" work with an expression, combine ":execute" with it.
Example: > Example: >
:execute "normal " . normal_commands :execute "normal " .. normal_commands
The variable "normal_commands" must contain the Normal mode commands. The variable "normal_commands" must contain the Normal mode commands.
Make sure that the argument for ":normal" is a complete command. Otherwise Make sure that the argument for ":normal" is a complete command. Otherwise
@@ -531,12 +531,12 @@ If you don't want to execute a string but evaluate it to get its expression
value, you can use the eval() function: > value, you can use the eval() function: >
:let optname = "path" :let optname = "path"
:let optval = eval('&' . optname) :let optval = eval('&' .. optname)
A "&" character is prepended to "path", thus the argument to eval() is A "&" character is prepended to "path", thus the argument to eval() is
"&path". The result will then be the value of the 'path' option. "&path". The result will then be the value of the 'path' option.
The same thing can be done with: > The same thing can be done with: >
:exe 'let optval = &' . optname :exe 'let optval = &' .. optname
============================================================================== ==============================================================================
*41.6* Using functions *41.6* Using functions
@@ -600,6 +600,7 @@ String manipulation: *string-functions*
strtrans() translate a string to make it printable strtrans() translate a string to make it printable
tolower() turn a string to lowercase tolower() turn a string to lowercase
toupper() turn a string to uppercase toupper() turn a string to uppercase
charclass() class of a character
match() position where a pattern matches in a string match() position where a pattern matches in a string
matchend() position where a pattern match ends in a string matchend() position where a pattern match ends in a string
matchstr() match of a pattern in a string matchstr() match of a pattern in a string
@@ -611,6 +612,7 @@ String manipulation: *string-functions*
strchars() length of a string in characters strchars() length of a string in characters
strwidth() size of string when displayed strwidth() size of string when displayed
strdisplaywidth() size of string when displayed, deals with tabs strdisplaywidth() size of string when displayed, deals with tabs
setcellwidths() set character cell width overrides
substitute() substitute a pattern match with a string substitute() substitute a pattern match with a string
submatch() get a specific match in ":s" and substitute() submatch() get a specific match in ":s" and substitute()
strpart() get part of a string using byte index strpart() get part of a string using byte index
@@ -626,6 +628,7 @@ String manipulation: *string-functions*
execute() execute an Ex command and get the output execute() execute an Ex command and get the output
win_execute() like execute() but in a specified window win_execute() like execute() but in a specified window
trim() trim characters from a string trim() trim characters from a string
gettext() lookup message translation
List manipulation: *list-functions* List manipulation: *list-functions*
get() get an item without error for wrong index get() get an item without error for wrong index
@@ -1115,6 +1118,7 @@ Tags: *tag-functions*
settagstack() modify the tag stack of a window settagstack() modify the tag stack of a window
Prompt Buffer: *promptbuffer-functions* Prompt Buffer: *promptbuffer-functions*
prompt_getprompt() get the effective prompt text for a buffer
prompt_setcallback() set prompt callback for a buffer prompt_setcallback() set prompt callback for a buffer
prompt_setinterrupt() set interrupt callback for a buffer prompt_setinterrupt() set interrupt callback for a buffer
prompt_setprompt() set the prompt text for a buffer prompt_setprompt() set the prompt text for a buffer
@@ -1284,7 +1288,7 @@ Example: >
: let n = n + len(split(getline(lnum))) : let n = n + len(split(getline(lnum)))
: let lnum = lnum + 1 : let lnum = lnum + 1
: endwhile : endwhile
: echo "found " . n . " words" : echo "found " .. n .. " words"
:endfunction :endfunction
You can call this function with: > You can call this function with: >
@@ -1297,7 +1301,7 @@ It will be executed once and echo the number of words.
range, with the cursor in that line. Example: > range, with the cursor in that line. Example: >
:function Number() :function Number()
: echo "line " . line(".") . " contains: " . getline(".") : echo "line " .. line(".") .. " contains: " .. getline(".")
:endfunction :endfunction
If you call this function with: > If you call this function with: >
@@ -1321,11 +1325,11 @@ so on. The variable "a:0" contains the number of extra arguments.
:function Show(start, ...) :function Show(start, ...)
: echohl Title : echohl Title
: echo "start is " . a:start : echo "start is " .. a:start
: echohl None : echohl None
: let index = 1 : let index = 1
: while index <= a:0 : while index <= a:0
: echo " Arg " . index . " is " . a:{index} : echo " Arg " .. index .. " is " .. a:{index}
: let index = index + 1 : let index = index + 1
: endwhile : endwhile
: echo "" : echo ""
@@ -1733,10 +1737,10 @@ Another useful mechanism is the ":finally" command: >
:let tmp = tempname() :let tmp = tempname()
:try :try
: exe ".,$write " . tmp : exe ".,$write " .. tmp
: exe "!filter " . tmp : exe "!filter " .. tmp
: .,$delete : .,$delete
: exe "$read " . tmp : exe "$read " .. tmp
:finally :finally
: call delete(tmp) : call delete(tmp)
:endtry :endtry
@@ -2044,9 +2048,9 @@ for this mapping, but the user might already use it for something else. To
allow the user to define which keys a mapping in a plugin uses, the <Leader> allow the user to define which keys a mapping in a plugin uses, the <Leader>
item can be used: > item can be used: >
22 map <unique> <Leader>a <Plug>TypecorrAdd 22 map <unique> <Leader>a <Plug>TypecorrAdd;
The "<Plug>TypecorrAdd" thing will do the work, more about that further on. The "<Plug>TypecorrAdd;" thing will do the work, more about that further on.
The user can set the "mapleader" variable to the key sequence that he wants The user can set the "mapleader" variable to the key sequence that he wants
this mapping to start with. Thus if the user has done: > this mapping to start with. Thus if the user has done: >
@@ -2062,15 +2066,15 @@ already happened to exist. |:map-<unique>|
But what if the user wants to define his own key sequence? We can allow that But what if the user wants to define his own key sequence? We can allow that
with this mechanism: > with this mechanism: >
21 if !hasmapto('<Plug>TypecorrAdd') 21 if !hasmapto('<Plug>TypecorrAdd;')
22 map <unique> <Leader>a <Plug>TypecorrAdd 22 map <unique> <Leader>a <Plug>TypecorrAdd;
23 endif 23 endif
This checks if a mapping to "<Plug>TypecorrAdd" already exists, and only This checks if a mapping to "<Plug>TypecorrAdd;" already exists, and only
defines the mapping from "<Leader>a" if it doesn't. The user then has a defines the mapping from "<Leader>a" if it doesn't. The user then has a
chance of putting this in his vimrc file: > chance of putting this in his vimrc file: >
map ,c <Plug>TypecorrAdd map ,c <Plug>TypecorrAdd;
Then the mapped key sequence will be ",c" instead of "_a" or "\a". Then the mapped key sequence will be ",c" instead of "_a" or "\a".
@@ -2087,8 +2091,8 @@ prepending it with "s:".
We will define a function that adds a new typing correction: > We will define a function that adds a new typing correction: >
30 function s:Add(from, correct) 30 function s:Add(from, correct)
31 let to = input("type the correction for " . a:from . ": ") 31 let to = input("type the correction for " .. a:from .. ": ")
32 exe ":iabbrev " . a:from . " " . to 32 exe ":iabbrev " .. a:from .. " " .. to
.. ..
36 endfunction 36 endfunction
@@ -2100,15 +2104,15 @@ function (without the "s:"), which is again another function.
<SID> can be used with mappings. It generates a script ID, which identifies <SID> can be used with mappings. It generates a script ID, which identifies
the current script. In our typing correction plugin we use it like this: > the current script. In our typing correction plugin we use it like this: >
24 noremap <unique> <script> <Plug>TypecorrAdd <SID>Add 24 noremap <unique> <script> <Plug>TypecorrAdd; <SID>Add
.. ..
28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR> 28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR>
Thus when a user types "\a", this sequence is invoked: > Thus when a user types "\a", this sequence is invoked: >
\a -> <Plug>TypecorrAdd -> <SID>Add -> :call <SID>Add() \a -> <Plug>TypecorrAdd; -> <SID>Add -> :call <SID>Add()
If another script would also map <SID>Add, it would get another script ID and If another script also maps <SID>Add, it will get another script ID and
thus define another mapping. thus define another mapping.
Note that instead of s:Add() we use <SID>Add() here. That is because the Note that instead of s:Add() we use <SID>Add() here. That is because the
@@ -2149,9 +2153,9 @@ difference between using <SID> and <Plug>:
To make it very unlikely that other plugins use the same sequence of To make it very unlikely that other plugins use the same sequence of
characters, use this structure: <Plug> scriptname mapname characters, use this structure: <Plug> scriptname mapname
In our example the scriptname is "Typecorr" and the mapname is "Add". In our example the scriptname is "Typecorr" and the mapname is "Add".
This results in "<Plug>TypecorrAdd". Only the first character of We add a semicolon as the terminator. This results in
scriptname and mapname is uppercase, so that we can see where mapname "<Plug>TypecorrAdd;". Only the first character of scriptname and
starts. mapname is uppercase, so that we can see where mapname starts.
<SID> is the script ID, a unique identifier for a script. <SID> is the script ID, a unique identifier for a script.
Internally Vim translates <SID> to "<SNR>123_", where "123" can be any Internally Vim translates <SID> to "<SNR>123_", where "123" can be any
@@ -2193,7 +2197,7 @@ a few lines to count the number of corrections: >
30 function s:Add(from, correct) 30 function s:Add(from, correct)
.. ..
34 let s:count = s:count + 1 34 let s:count = s:count + 1
35 echo s:count . " corrections now" 35 echo s:count .. " corrections now"
36 endfunction 36 endfunction
First s:count is initialized to 4 in the script itself. When later the First s:count is initialized to 4 in the script itself. When later the
@@ -2226,21 +2230,21 @@ Here is the resulting complete example: >
18 \ synchronization 18 \ synchronization
19 let s:count = 4 19 let s:count = 4
20 20
21 if !hasmapto('<Plug>TypecorrAdd') 21 if !hasmapto('<Plug>TypecorrAdd;')
22 map <unique> <Leader>a <Plug>TypecorrAdd 22 map <unique> <Leader>a <Plug>TypecorrAdd;
23 endif 23 endif
24 noremap <unique> <script> <Plug>TypecorrAdd <SID>Add 24 noremap <unique> <script> <Plug>TypecorrAdd; <SID>Add
25 25
26 noremenu <script> Plugin.Add\ Correction <SID>Add 26 noremenu <script> Plugin.Add\ Correction <SID>Add
27 27
28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR> 28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR>
29 29
30 function s:Add(from, correct) 30 function s:Add(from, correct)
31 let to = input("type the correction for " . a:from . ": ") 31 let to = input("type the correction for " .. a:from .. ": ")
32 exe ":iabbrev " . a:from . " " . to 32 exe ":iabbrev " .. a:from .. " " .. to
33 if a:correct | exe "normal viws\<C-R>\" \b\e" | endif 33 if a:correct | exe "normal viws\<C-R>\" \b\e" | endif
34 let s:count = s:count + 1 34 let s:count = s:count + 1
35 echo s:count . " corrections now" 35 echo s:count .. " corrections now"
36 endfunction 36 endfunction
37 37
38 if !exists(":Correct") 38 if !exists(":Correct")
@@ -2279,7 +2283,7 @@ Here is a simple example for a plugin help file, called "typecorr.txt": >
6 There are currently only a few corrections. Add your own if you like. 6 There are currently only a few corrections. Add your own if you like.
7 7
8 Mappings: 8 Mappings:
9 <Leader>a or <Plug>TypecorrAdd 9 <Leader>a or <Plug>TypecorrAdd;
10 Add a correction for the word under the cursor. 10 Add a correction for the word under the cursor.
11 11
12 Commands: 12 Commands:
@@ -2417,13 +2421,13 @@ To make sure mappings will only work in the current buffer use the >
command. This needs to be combined with the two-step mapping explained above. command. This needs to be combined with the two-step mapping explained above.
An example of how to define functionality in a filetype plugin: > An example of how to define functionality in a filetype plugin: >
if !hasmapto('<Plug>JavaImport') if !hasmapto('<Plug>JavaImport;')
map <buffer> <unique> <LocalLeader>i <Plug>JavaImport map <buffer> <unique> <LocalLeader>i <Plug>JavaImport;
endif endif
noremap <buffer> <unique> <Plug>JavaImport oimport ""<Left><Esc> noremap <buffer> <unique> <Plug>JavaImport; oimport ""<Left><Esc>
|hasmapto()| is used to check if the user has already defined a map to |hasmapto()| is used to check if the user has already defined a map to
<Plug>JavaImport. If not, then the filetype plugin defines the default <Plug>JavaImport;. If not, then the filetype plugin defines the default
mapping. This starts with |<LocalLeader>|, which allows the user to select mapping. This starts with |<LocalLeader>|, which allows the user to select
the key(s) he wants filetype plugin mappings to start with. The default is a the key(s) he wants filetype plugin mappings to start with. The default is a
backslash. backslash.
@@ -2440,12 +2444,12 @@ plugin for the mail filetype: >
" Add mappings, unless the user didn't want this. " Add mappings, unless the user didn't want this.
if !exists("no_plugin_maps") && !exists("no_mail_maps") if !exists("no_plugin_maps") && !exists("no_mail_maps")
" Quote text by inserting "> " " Quote text by inserting "> "
if !hasmapto('<Plug>MailQuote') if !hasmapto('<Plug>MailQuote;')
vmap <buffer> <LocalLeader>q <Plug>MailQuote vmap <buffer> <LocalLeader>q <Plug>MailQuote;
nmap <buffer> <LocalLeader>q <Plug>MailQuote nmap <buffer> <LocalLeader>q <Plug>MailQuote;
endif endif
vnoremap <buffer> <Plug>MailQuote :s/^/> /<CR> vnoremap <buffer> <Plug>MailQuote; :s/^/> /<CR>
nnoremap <buffer> <Plug>MailQuote :.,$s/^/> /<CR> nnoremap <buffer> <Plug>MailQuote; :.,$s/^/> /<CR>
endif endif
Two global variables are used: Two global variables are used:
@@ -2488,7 +2492,7 @@ should be undone. Set the b:undo_ftplugin variable to the commands that will
undo the settings in your filetype plugin. Example: > undo the settings in your filetype plugin. Example: >
let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<" let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
\ . "| unlet b:match_ignorecase b:match_words b:match_skip" \ .. "| unlet b:match_ignorecase b:match_words b:match_skip"
Using ":setlocal" with "<" after the option name resets the option to its Using ":setlocal" with "<" after the option name resets the option to its
global value. That is mostly the best way to reset the option value. global value. That is mostly the best way to reset the option value.
@@ -2609,17 +2613,17 @@ The following example shows how it's done: >
map <F19> :call BufNetWrite('something')<CR> map <F19> :call BufNetWrite('something')<CR>
let s:did_load = 1 let s:did_load = 1
exe 'au FuncUndefined BufNet* source ' . expand('<sfile>') exe 'au FuncUndefined BufNet* source ' .. expand('<sfile>')
finish finish
endif endif
function BufNetRead(...) function BufNetRead(...)
echo 'BufNetRead(' . string(a:000) . ')' echo 'BufNetRead(' .. string(a:000) .. ')'
" read functionality here " read functionality here
endfunction endfunction
function BufNetWrite(...) function BufNetWrite(...)
echo 'BufNetWrite(' . string(a:000) . ')' echo 'BufNetWrite(' .. string(a:000) .. ')'
" write functionality here " write functionality here
endfunction endfunction

View File

@@ -210,8 +210,8 @@ argument: >
:amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR> :amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR>
Don't use "<silent>" too often. It is not needed for short commands. If you Don't use "<silent>" too often. It is not needed for short commands. If you
make a menu for someone else, being able the see the executed command will make a menu for someone else, being able to see the executed command will give
give him a hint about what he could have typed, instead of using the mouse. him a hint about what he could have typed, instead of using the mouse.
LISTING MENUS LISTING MENUS

View File

@@ -34,7 +34,7 @@ That makes very clear what is defined where.
Let's start with an example, a script that exports one function and has one Let's start with an example, a script that exports one function and has one
private function: > private function: >
vim9script " This indicates a Vim9 script file, vim9script " This indicates a Vim9 script file.
export def GetMessage(): string export def GetMessage(): string
let result = '' let result = ''

View File

@@ -333,7 +333,7 @@ Make Vim work as you like it.
|44.11| Installing a syntax file |44.11| Installing a syntax file
|44.12| Portable syntax file layout |44.12| Portable syntax file layout
|usr_45.txt| Select your language |usr_45.txt| Select your language (locale)
|45.1| Language for Messages |45.1| Language for Messages
|45.2| Language for Menus |45.2| Language for Menus
|45.3| Using another encoding |45.3| Using another encoding

View File

@@ -1,4 +1,4 @@
*various.txt* For Vim version 8.2. Last change: 2020 Jul 10 *various.txt* For Vim version 8.2. Last change: 2020 Aug 20
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -92,7 +92,7 @@ g8 Print the hex values of the bytes used in the
encoding because it contains illegal bytes. encoding because it contains illegal bytes.
Does not wrap around the end of the file. Does not wrap around the end of the file.
Note that when the cursor is on an illegal byte or the Note that when the cursor is on an illegal byte or the
cursor is halfway a multi-byte character the command cursor is halfway a multibyte character the command
won't move the cursor. won't move the cursor.
*:p* *:pr* *:print* *E749* *:p* *:pr* *:print* *E749*
@@ -145,16 +145,16 @@ g8 Print the hex values of the bytes used in the
:{range}z[+-^.=]{count} Display several lines of text surrounding the line :{range}z[+-^.=]{count} Display several lines of text surrounding the line
specified with {range}, or around the current line specified with {range}, or around the current line
if there is no {range}. If there is a {count}, that's if there is no {range}. If there is a {count}, that's
how many lines you'll see; if there is only one window how many lines you'll see; if there is no {count} and
then twice the value of the 'scroll' option is used, only one window then twice the value of the 'scroll'
otherwise the current window height minus 3 is used. option is used, otherwise the current window height
minus 3 is used.
If there is a {count} the 'window' option is set to If there is a {count} the 'window' option is set to
its value. its value.
:z can be used either alone or followed by any of :z can be used either alone or followed by any of
several punctuation marks. These have the following several marks. These have the following effect:
effect:
mark first line last line new cursor line ~ mark first line last line new cursor line ~
---- ---------- --------- ------------ ---- ---------- --------- ------------

View File

@@ -1,4 +1,4 @@
*version5.txt* For Vim version 8.2. Last change: 2016 Feb 27 *version5.txt* For Vim version 8.2. Last change: 2020 Sep 02
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2133,12 +2133,12 @@ it is invoked.
Deleted the "os_archie" files, they were not working anyway. Deleted the "os_archie" files, they were not working anyway.
Multi-byte support *new-multi-byte* Multi-byte support *new-multi-byte* *new-multibyte*
------------------ ------------------
MultiByte support for Win32 GUI. (Baek) MultiByte support for Win32 GUI. (Baek)
The 'fileencoding' option decides how the text in the file is encoded. The 'fileencoding' option decides how the text in the file is encoded.
":ascii" works for multi-byte characters. Multi-byte characters work on ":ascii" works for multibyte characters. Multi-byte characters work on
Windows 95, even when using the US version. (Aaron) Windows 95, even when using the US version. (Aaron)
Needs to be enabled in feature.h. Needs to be enabled in feature.h.
This has not been tested much yet! This has not been tested much yet!
@@ -3671,10 +3671,10 @@ For the ":clist" command, you can scroll backwards with "b" (one screenful),
"u" (half a screenful) and "k" (one line). "u" (half a screenful) and "k" (one line).
Multi-byte support: Multi-byte support:
- X-input method for multi-byte characters. And various fixes for multi-byte - X-input method for multibyte characters. And various fixes for multibyte
support. (Nam) support. (Nam)
- Hangul input method feature: |hangul|. (Nam) - Hangul input method feature: |hangul|. (Nam)
- Cleaned up configuration of multi-byte support, XIM, fontset and Hangul - Cleaned up configuration of multibyte support, XIM, fontset and Hangul
input. Each is now configurable separately. input. Each is now configurable separately.
- Changed check for GTK_KEYBOARD to HANGUL_KEYBOARD_TYPE. (Nam) - Changed check for GTK_KEYBOARD to HANGUL_KEYBOARD_TYPE. (Nam)
- Added doc/hangulin.txt: Documentation for the Hangul input code. (Nam) - Added doc/hangulin.txt: Documentation for the Hangul input code. (Nam)
@@ -3682,10 +3682,10 @@ Multi-byte support:
- First attempt to include support for SJIS encoding. (Nagano) - First attempt to include support for SJIS encoding. (Nagano)
- When a double-byte character doesn't fit at the end of the line, put a "~" - When a double-byte character doesn't fit at the end of the line, put a "~"
there and print it on the next line. there and print it on the next line.
- Optimize output of multi-byte text. (Park) - Optimize output of multibyte text. (Park)
- Win32 IME: preedit style is like over-the-spot. (Nagano) - Win32 IME: preedit style is like over-the-spot. (Nagano)
- Win32 IME: IME mode change now done with ImmSetOpenStatus. (Nagano) - Win32 IME: IME mode change now done with ImmSetOpenStatus. (Nagano)
- GUI Athena: file selection dialog can display multi-byte characters. - GUI Athena: file selection dialog can display multibyte characters.
(Nagano) (Nagano)
- Selection reply for XA_TEXT as XA_STRING. (Nagano) - Selection reply for XA_TEXT as XA_STRING. (Nagano)
@@ -3720,7 +3720,7 @@ X11:
with the VisualNOS group to show this. (Madsen) with the VisualNOS group to show this. (Madsen)
- Support for requesting the type of clipboard support. Used for AIX and - Support for requesting the type of clipboard support. Used for AIX and
dtterm. (Wittig) dtterm. (Wittig)
- Support compound_text selection (even when compiled without multi-byte). - Support compound_text selection (even when compiled without multibyte).
Swap file: Swap file:
- New variation for naming swap files: Replace path separators into %, place - New variation for naming swap files: Replace path separators into %, place
@@ -4063,7 +4063,7 @@ compiling pathdef.c. Replaced it with "tr".
Perl: DO_JOIN was redefined by Perl. Undefined it in the perl files. Perl: DO_JOIN was redefined by Perl. Undefined it in the perl files.
Various XIM and multi-byte fixes: Various XIM and multibyte fixes:
- Fix user cannot see his language while he is typing his language with - Fix user cannot see his language while he is typing his language with
off-the-spot method. (Nagano) off-the-spot method. (Nagano)
- Fix preedit position using text/edit area (using gui.wid). (Nagano) - Fix preedit position using text/edit area (using gui.wid). (Nagano)
@@ -4080,7 +4080,7 @@ Various XIM and multi-byte fixes:
- XIM: Composed strings were sometimes ignored. Vim crashed when compose - XIM: Composed strings were sometimes ignored. Vim crashed when compose
string was longer than 256 bytes. IM's geometry control is fixed. (Nam, string was longer than 256 bytes. IM's geometry control is fixed. (Nam,
Nagano) Nagano)
- Win32 multi-byte: hollowed cursor width on a double byte char was wrong. - Win32 multibyte: hollowed cursor width on a double byte char was wrong.
(Nagano) (Nagano)
- When there is no GUI, selecting XIM caused compilation problems. - When there is no GUI, selecting XIM caused compilation problems.
Automatically disable XIM when there is no GUI in configure. Automatically disable XIM when there is no GUI in configure.
@@ -4417,7 +4417,7 @@ Now map <xF4> to <F4>, so that the user can override this.
When compiling os_win32.c with MIN_FEAT the apply_autocmds() should not be When compiling os_win32.c with MIN_FEAT the apply_autocmds() should not be
used. (Aaron) used. (Aaron)
This autocommand looped forever: ":au FileChangedShell * nested e <afile>" This autocommand looped forever: ":au FileChangedShell * ++nested e <afile>"
Now FileChangeShell never nests. (Roemer) Now FileChangeShell never nests. (Roemer)
When evaluating an ":elseif" that was not going to matter anyway, ignore When evaluating an ":elseif" that was not going to matter anyway, ignore
@@ -5496,7 +5496,7 @@ Solution: When there is a comment leader for the new line, but 'autoindent'
Files: src/misc1.c Files: src/misc1.c
Patch 5.4.26 Patch 5.4.26
Problem: Multi-byte: a multi-byte character is never recognized in a file Problem: Multi-byte: a multibyte character is never recognized in a file
name, causing a backslash before it to be removed on Windows. name, causing a backslash before it to be removed on Windows.
Solution: Assume that a leading-byte character is a file name character in Solution: Assume that a leading-byte character is a file name character in
vim_isfilec(). vim_isfilec().
@@ -5945,7 +5945,7 @@ __TIME__. (John Card II)
BeOS: Adjust computing the char_height and char_ascent. Round them up BeOS: Adjust computing the char_height and char_ascent. Round them up
separately, avoids redrawing artifacts. (Mike Steed) separately, avoids redrawing artifacts. (Mike Steed)
Fix a few multi-byte problems in menu_name_skip(), set_reg_ic(), searchc() and Fix a few multibyte problems in menu_name_skip(), set_reg_ic(), searchc() and
findmatchlimit(). (Taro Muraoka) findmatchlimit(). (Taro Muraoka)
GTK GUI: GTK GUI:
@@ -6631,9 +6631,9 @@ Solution: Use a shell extension dll. (Tianmiao Hu)
Files: src/dosinst.c, src/uninstal.c, gvimext/*, runtime/doc/gui_w32.txt Files: src/dosinst.c, src/uninstal.c, gvimext/*, runtime/doc/gui_w32.txt
Patch 5.6a.028 (extra) Patch 5.6a.028 (extra)
Problem: Win32 GUI: Dialogs and tear-off menus can't handle multi-byte Problem: Win32 GUI: Dialogs and tear-off menus can't handle multibyte
characters. characters.
Solution: Adjust nCopyAnsiToWideChar() to handle multi-byte characters Solution: Adjust nCopyAnsiToWideChar() to handle multibyte characters
correctly. correctly.
Files: src/gui_w32.c Files: src/gui_w32.c
@@ -6727,9 +6727,9 @@ Many fixes to Macintosh specific parts: (mostly by Dany StAmant)
- Add digraphs table. (Axel Kielhorn) - Add digraphs table. (Axel Kielhorn)
- Multi-byte support: (Kenichi Asai) - Multi-byte support: (Kenichi Asai)
Switch keyscript when going in/out of Insert mode. Switch keyscript when going in/out of Insert mode.
Draw multi-byte character correctly. Draw multibyte character correctly.
Don't use mblen() but highest bit of char to detect multi-byte char. Don't use mblen() but highest bit of char to detect multibyte char.
Display value of multi-byte in statusline (also for other systems). Display value of multibyte in statusline (also for other systems).
- mouse button was not initialized properly to MOUSE_LEFT when - mouse button was not initialized properly to MOUSE_LEFT when
USE_CTRLCLICKMENU not defined. USE_CTRLCLICKMENU not defined.
- With Japanese SJIS characters: Make "w", "b", and "e" work - With Japanese SJIS characters: Make "w", "b", and "e" work
@@ -6981,7 +6981,7 @@ Solution: Support TEXT and COMPOUND_TEXT selection targets. (ChiDeok Hwang)
Files: src/gui_gtk_x11.c Files: src/gui_gtk_x11.c
Patch 5.6.037 Patch 5.6.037
Problem: Multi-byte: Can't use "f" command with multi-byte character in GUI. Problem: Multi-byte: Can't use "f" command with multibyte character in GUI.
Solution: Enable XIM in Normal mode for the GUI. (Sung-Hyun Nam) Solution: Enable XIM in Normal mode for the GUI. (Sung-Hyun Nam)
Files: src/gui_gtk_x11.c, src/multbyte.c Files: src/gui_gtk_x11.c, src/multbyte.c
@@ -7094,7 +7094,7 @@ Files: src/fileio.c, src/tag.c
Patch 5.6.052 Patch 5.6.052
Problem: Multi-byte: When an Ex command has a '|' or '"' as a second byte, Problem: Multi-byte: When an Ex command has a '|' or '"' as a second byte,
it terminates the command. it terminates the command.
Solution: Skip second byte of multi-byte char when checking for '|' and '"'. Solution: Skip second byte of multibyte char when checking for '|' and '"'.
(Asai Kenichi) (Asai Kenichi)
Files: src/ex_docmd.c Files: src/ex_docmd.c
@@ -7246,7 +7246,7 @@ Files: src/Makefile.bor, src/dosinst.c
Patch 5.6.074 (extra) Patch 5.6.074 (extra)
Problem: Entering CSI directly doesn't always work, because it's recognized Problem: Entering CSI directly doesn't always work, because it's recognized
as the start of a special key. Mostly a problem with multi-byte as the start of a special key. Mostly a problem with multibyte
in the GUI. in the GUI.
Solution: Use K_CSI for a typed CSI character. Use <CSI> for a normal CSI, Solution: Use K_CSI for a typed CSI character. Use <CSI> for a normal CSI,
<xCSI> for a CSI typed in the GUI. <xCSI> for a CSI typed in the GUI.
@@ -7337,7 +7337,7 @@ Solution: Use IsBadStringPtr() to check if the pointer is valid.
Files: src/os_win32.c Files: src/os_win32.c
Patch 5.6.087 Patch 5.6.087
Problem: Multi-byte: Commands and messages with multi-byte characters are Problem: Multi-byte: Commands and messages with multibyte characters are
displayed wrong. displayed wrong.
Solution: Detect double-byte characters. (Yasuhiro Matsumoto) Solution: Detect double-byte characters. (Yasuhiro Matsumoto)
Files: src/ex_getln.c, src/message.c, src/misc2.c, src/screen.c Files: src/ex_getln.c, src/message.c, src/misc2.c, src/screen.c
@@ -7384,9 +7384,9 @@ Solution: Don't write a message about the file read from stdin until the GUI
Files: src/fileio.c Files: src/fileio.c
Patch 5.6.094 Patch 5.6.094
Problem: Problem with multi-byte string for ":echo var". Problem: Problem with multibyte string for ":echo var".
Solution: Check for length in msg_outtrans_len_attr(). (Sung-Hyun Nam) Solution: Check for length in msg_outtrans_len_attr(). (Sung-Hyun Nam)
Also make do_echo() aware of multi-byte characters. Also make do_echo() aware of multibyte characters.
Files: src/eval.c, src/message.c Files: src/eval.c, src/message.c
Patch 5.6.095 Patch 5.6.095
@@ -7417,9 +7417,9 @@ Files: src/misc1.c
Patch 5.7a.003 Patch 5.7a.003
Problem: Multi-byte: After using CTRL-O in Insert mode with the cursor at Problem: Multi-byte: After using CTRL-O in Insert mode with the cursor at
the end of the line on a multi-byte character the cursor moves to the end of the line on a multibyte character the cursor moves to
the left. the left.
Solution: Check for multi-byte character at end-of-line. (Taro Muraoka) Solution: Check for multibyte character at end-of-line. (Taro Muraoka)
Also: fix cls() to detect a double-byte character. (Chong-Dae Park) Also: fix cls() to detect a double-byte character. (Chong-Dae Park)
Files: src/edit.c, src/search.c Files: src/edit.c, src/search.c
@@ -7736,7 +7736,7 @@ Solution: Disallow executing a shell command in get_cmd_output() and
Files: src/misc1.c, src/os_unix.c Files: src/misc1.c, src/os_unix.c
Patch 5.7.019 Patch 5.7.019
Problem: Multibyte: In a substitute string, a multi-byte character isn't Problem: Multibyte: In a substitute string, a multibyte character isn't
skipped properly, can be a problem when the second byte is a skipped properly, can be a problem when the second byte is a
backslash. backslash.
Solution: Skip an extra byte for a double-byte character. (Muraoka Taro) Solution: Skip an extra byte for a double-byte character. (Muraoka Taro)

View File

@@ -1,4 +1,4 @@
*version6.txt* For Vim version 8.2. Last change: 2019 Jan 17 *version6.txt* For Vim version 8.2. Last change: 2020 Aug 17
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -449,7 +449,7 @@ The help window is opened at the top, like ":topleft" was used, if the current
window is fewer than 80 characters wide. window is fewer than 80 characters wide.
A few options can be used to set the preferences for vertically split windows. A few options can be used to set the preferences for vertically split windows.
They work similar to their existing horizontal equivalents: They work similarly to their existing horizontal equivalents:
horizontal vertical ~ horizontal vertical ~
'splitbelow' 'splitright' 'splitbelow' 'splitright'
'winheight' 'winwidth' 'winheight' 'winwidth'
@@ -623,7 +623,7 @@ For syntax items:
Removed limit of matching only up to 32767 times with *, \+, etc. Removed limit of matching only up to 32767 times with *, \+, etc.
Added support to match multi-byte characters. (partly by Muraoka Taro) Added support to match multibyte characters. (partly by Muraoka Taro)
Made "\<" and "\>" work for UTF-8. (Muraoka Taro) Made "\<" and "\>" work for UTF-8. (Muraoka Taro)
@@ -664,10 +664,10 @@ Many new items for Multi-byte support:
- Added 'guifontwide' to specify a font for double-wide characters. - Added 'guifontwide' to specify a font for double-wide characters.
- Added Korean support for character class detection. Also fix cls() in - Added Korean support for character class detection. Also fix cls() in
search.c. (Chong-Dae Park) search.c. (Chong-Dae Park)
- Win32: Typing multi-byte characters without IME. (Alexander Smishlajev) - Win32: Typing multibyte characters without IME. (Alexander Smishlajev)
- Win32 with Mingw: compile with iconv library. (Ron Aaron) - Win32 with Mingw: compile with iconv library. (Ron Aaron)
- Win32 with MSVC: dynamically load iconv.dll library. (Muraoka Taro) - Win32 with MSVC: dynamically load iconv.dll library. (Muraoka Taro)
- Make it possible to build a version with multi-byte and iconv support with - Make it possible to build a version with multibyte and iconv support with
Borland 5.5. (Yasuhiro Matsumoto) Borland 5.5. (Yasuhiro Matsumoto)
- Added 'delcombine' option: Delete combining character separately. (Ron - Added 'delcombine' option: Delete combining character separately. (Ron
Aaron) Aaron)
@@ -680,19 +680,19 @@ Many new items for Multi-byte support:
- Support "CursorIM" for XIM. (Nam SungHyun) - Support "CursorIM" for XIM. (Nam SungHyun)
- Added 'm' flag to 'formatoptions': When wrapping words, allow splitting at - Added 'm' flag to 'formatoptions': When wrapping words, allow splitting at
each multibyte character, not only at a space. each multibyte character, not only at a space.
- Made ":syntax keyword" work with multi-byte characters. - Made ":syntax keyword" work with multibyte characters.
- Added support for Unicode upper/lowercase flipping and comparing. (based on - Added support for Unicode upper/lowercase flipping and comparing. (based on
patch by Raphael Finkel) patch by Raphael Finkel)
Let "~" on multi-byte characters that have a third case ("title case") Let "~" on multibyte characters that have a third case ("title case")
switch between the three cases. (Raphael Finkel) switch between the three cases. (Raphael Finkel)
Allow defining digraphs for multi-byte characters. Allow defining digraphs for multibyte characters.
Added RFC1345 digraphs for Unicode. Added RFC1345 digraphs for Unicode.
Most Normal mode commands that accept a character argument, like "r", "t" and Most Normal mode commands that accept a character argument, like "r", "t" and
"f" now accept a digraph. The 'D' flag in 'cpoptions' disables this to remain "f" now accept a digraph. The 'D' flag in 'cpoptions' disables this to remain
Vi compatible. Vi compatible.
Added Language mapping and 'keymap' to be able to type multi-byte characters: Added Language mapping and 'keymap' to be able to type multibyte characters:
- Added the ":lmap" command and friends: Define mappings that are used when - Added the ":lmap" command and friends: Define mappings that are used when
typing characters in the language of the text. Also for "r", "t", etc. In typing characters in the language of the text. Also for "r", "t", etc. In
Insert and Command-line mode CTRL-^ switches the use of the mappings on/off. Insert and Command-line mode CTRL-^ switches the use of the mappings on/off.
@@ -715,7 +715,7 @@ Added Language mapping and 'keymap' to be able to type multi-byte characters:
- When typing a mapping that's not finished yet, display the last character - When typing a mapping that's not finished yet, display the last character
under the cursor in Insert mode and Command-line mode. Looks good for dead under the cursor in Insert mode and Command-line mode. Looks good for dead
characters. characters.
- Made the 'langmap' option recognize multi-byte characters. But mapping only - Made the 'langmap' option recognize multibyte characters. But mapping only
works for 8-bit characters. Helps when using UTF-8. works for 8-bit characters. Helps when using UTF-8.
- Use a different cursor for when ":lmap" mappings are active. Can specify - Use a different cursor for when ":lmap" mappings are active. Can specify
two highlight groups for an item in 'guicursor'. By default "lCursor" and two highlight groups for an item in 'guicursor'. By default "lCursor" and
@@ -726,7 +726,7 @@ Added Language mapping and 'keymap' to be able to type multi-byte characters:
Also works for "f", which now works to find a character that includes a Also works for "f", which now works to find a character that includes a
composing character. composing character.
Other multi-byte character additions: Other multibyte character additions:
- Support double-byte single-width characters for euc-jp: Characters starting - Support double-byte single-width characters for euc-jp: Characters starting
with 0x8E. Added ScreenLines2[] to store the second byte. with 0x8E. Added ScreenLines2[] to store the second byte.
@@ -1004,7 +1004,7 @@ systems a PostScript file is generated, which can be printed with the
(MS-Windows part by Vince Negri, Vipin Aravind, PostScript by Vince Negri and (MS-Windows part by Vince Negri, Vipin Aravind, PostScript by Vince Negri and
Mike Williams) Mike Williams)
Made ":hardcopy" work with multi-byte characters. (Muraoka Taro, Yasuhiro Made ":hardcopy" work with multibyte characters. (Muraoka Taro, Yasuhiro
Matsumoto) Matsumoto)
Added options to tune the way printing works: (Vince Negri) Added options to tune the way printing works: (Vince Negri)
@@ -1703,7 +1703,7 @@ GUI:
- Win32: Added "c" flag to 'guifont' to be able to specify the charset. (Artem - Win32: Added "c" flag to 'guifont' to be able to specify the charset. (Artem
Khodush) Khodush)
- When no --enable-xim argument is given, automatically enable it when a X GUI - When no --enable-xim argument is given, automatically enable it when a X GUI
is used. Required for dead key support (and multi-byte input). is used. Required for dead key support (and multibyte input).
- After a file selection dialog, check that the edited files were not changed - After a file selection dialog, check that the edited files were not changed
or deleted. The Win32 dialog allows deleting and renaming files. or deleted. The Win32 dialog allows deleting and renaming files.
- Motif and Athena: Added support for "editres". (Marcin Dalecki) - Motif and Athena: Added support for "editres". (Marcin Dalecki)
@@ -2025,8 +2025,8 @@ Timestamps:
file that steadily grows. file that steadily grows.
Mapping <M-A> when 'encoding' is "latin1" and then setting 'encoding' to Mapping <M-A> when 'encoding' is "latin1" and then setting 'encoding' to
"utf-8" causes the first byte of a multi-byte to be mapped. Can cause very "utf-8" causes the first byte of a multibyte to be mapped. Can cause very
hard to find problems. Disallow mapping part of a multi-byte character. hard to find problems. Disallow mapping part of a multibyte character.
For ":python" and ":tcl" accept an in-line script. (Johannes Zellner) For ":python" and ":tcl" accept an in-line script. (Johannes Zellner)
Also for ":ruby" and ":perl". (Benoit Cerrina) Also for ":ruby" and ":perl". (Benoit Cerrina)
@@ -2467,7 +2467,7 @@ Motif: When adding many menu items, the "Help" menu disappeared but the
menubar didn't wrap. Now manually set the menubar height. menubar didn't wrap. Now manually set the menubar height.
When using <BS> in Insert mode to remove a line break, or using "J" to join When using <BS> in Insert mode to remove a line break, or using "J" to join
lines, the cursor could end up halfway a multi-byte character. (Muraoka Taro) lines, the cursor could end up halfway a multibyte character. (Muraoka Taro)
Removed defining SVR4 in configure. It causes problems for some X header Removed defining SVR4 in configure. It causes problems for some X header
files and doesn't appear to be used anywhere. files and doesn't appear to be used anywhere.
@@ -2617,12 +2617,12 @@ column. Can't encode a larger number in a character. Now limit the number to
222, don't jump back to the first column. 222, don't jump back to the first column.
GUI: In some versions CSI would cause trouble, either when typed directly or GUI: In some versions CSI would cause trouble, either when typed directly or
when part of a multi-byte sequence. when part of a multibyte sequence.
When using multibyte characters in a ":normal" command, a trailing byte that When using multibyte characters in a ":normal" command, a trailing byte that
is CSI or K_SPECIAL caused problems. is CSI or K_SPECIAL caused problems.
Wildmenu didn't handle multi-byte characters. Wildmenu didn't handle multibyte characters.
":sleep 10" could not be interrupted on Windows, while "gs" could. Made them ":sleep 10" could not be interrupted on Windows, while "gs" could. Made them
both work the same. both work the same.
@@ -2673,7 +2673,7 @@ path.
Multi-byte: Multi-byte:
- Using an any-but character range [^x] in a regexp didn't work for UTF-8. - Using an any-but character range [^x] in a regexp didn't work for UTF-8.
(Muraoka Taro) (Muraoka Taro)
- When backspacing over inserted characters in Replace mode multi-byte - When backspacing over inserted characters in Replace mode multibyte
characters were not handled correctly. (Muraoka Taro) characters were not handled correctly. (Muraoka Taro)
- Search commands "#" and "*" didn't work with multibyte characters. (Muraoka - Search commands "#" and "*" didn't work with multibyte characters. (Muraoka
Taro) Taro)
@@ -2690,9 +2690,9 @@ Multi-byte:
wrong error number. (Muraoka Taro) wrong error number. (Muraoka Taro)
- Using Alt-x in the GUI while 'encoding' was set to "utf-8" didn't produce - Using Alt-x in the GUI while 'encoding' was set to "utf-8" didn't produce
the right character. the right character.
- When using Visual block selection and only the left halve of a double-wide - When using Visual block selection and only the left half of a double-wide
character is selected, the highlighting continued to the end of the line. character is selected, the highlighting continued to the end of the line.
- Visual-block delete didn't work properly when deleting the right halve of a - Visual-block delete didn't work properly when deleting the right half of a
double-wide character. double-wide character.
- Overstrike mode for the cmdline replaced only the first byte of a multibyte - Overstrike mode for the cmdline replaced only the first byte of a multibyte
character. character.
@@ -2701,8 +2701,8 @@ Multi-byte:
- When a multibyte character contained a 0x80 byte, it didn't work (was using - When a multibyte character contained a 0x80 byte, it didn't work (was using
a CSI byte instead). (Muraoka Taro) a CSI byte instead). (Muraoka Taro)
- Wordwise selection with the mouse didn't work. - Wordwise selection with the mouse didn't work.
- Yanking a modeless selection of multi-byte characters didn't work. - Yanking a modeless selection of multibyte characters didn't work.
- When 'selection' is "exclusive", selecting a word that ends in a multi-byte - When 'selection' is "exclusive", selecting a word that ends in a multibyte
character used wrong highlighting for the following character. character used wrong highlighting for the following character.
Win32 with Make_mvc.mak: Didn't compile for debugging. (Craig Barkhouse) Win32 with Make_mvc.mak: Didn't compile for debugging. (Craig Barkhouse)
@@ -2795,13 +2795,13 @@ GTK: Crash when 'shell' doesn't exist and doing":!ls". Use _exit() instead of
exit() when the child couldn't execute the shell. exit() when the child couldn't execute the shell.
Multi-byte: Multi-byte:
- GUI with double-byte encoding: a mouse click in left halve of double-wide - GUI with double-byte encoding: a mouse click in left half of double-wide
character put the cursor in previous char. character put the cursor in previous char.
- Using double-byte encoding and 'selection' is "exclusive": "vey" and "^Vey" - Using double-byte encoding and 'selection' is "exclusive": "vey" and "^Vey"
included the character after the word. included the character after the word.
- When using a double-byte encoding and there is a lead byte at the end of the - When using a double-byte encoding and there is a lead byte at the end of the
line, the preceding line would be displayed. "ga" also showed wrong info. line, the preceding line would be displayed. "ga" also showed wrong info.
- "gf" didn't include multi-byte characters before the cursor properly. - "gf" didn't include multibyte characters before the cursor properly.
(Muraoka Taro) (Muraoka Taro)
GUI: The cursor was sometimes not removed when scrolling. Changed the policy GUI: The cursor was sometimes not removed when scrolling. Changed the policy
@@ -2919,7 +2919,7 @@ The message remembered for displaying later (keep_msg) was sometimes pointing
into a generic buffer, which might be changed by the time the message is into a generic buffer, which might be changed by the time the message is
displayed. Now make a copy of the message. displayed. Now make a copy of the message.
When using multi-byte characters in a menu and a trailing byte is a backslash, When using multibyte characters in a menu and a trailing byte is a backslash,
the menu would not be created correctly. (Muraoka Taro) the menu would not be created correctly. (Muraoka Taro)
Using a multibyte character in the substitute string where a trail byte is a Using a multibyte character in the substitute string where a trail byte is a
backslash didn't work. (Muraoka Taro) backslash didn't work. (Muraoka Taro)
@@ -2958,7 +2958,7 @@ the output.
Don't define the <NetMouse> termcode in an xterm, reduces the problem when Don't define the <NetMouse> termcode in an xterm, reduces the problem when
someone types <Esc> } in Insert mode. someone types <Esc> } in Insert mode.
Made slash_adjust() work correctly for multi-byte characters. (Yasuhiro Made slash_adjust() work correctly for multibyte characters. (Yasuhiro
Matsumoto) Matsumoto)
Using a filename in Big5 encoding for autocommands didn't work (backslash in Using a filename in Big5 encoding for autocommands didn't work (backslash in
trailbyte). (Yasuhiro Matsumoto) trailbyte). (Yasuhiro Matsumoto)
@@ -3147,7 +3147,7 @@ available space correctly. Was counting the menu height twice.
Conversion of the docs to HTML didn't handle the line with the +quickfix tag Conversion of the docs to HTML didn't handle the line with the +quickfix tag
correctly. (Antonio Colombo) correctly. (Antonio Colombo)
Win32: fname_case() didn't handle multi-byte characters correctly. (Yasuhiro Win32: fname_case() didn't handle multibyte characters correctly. (Yasuhiro
Matsumoto) Matsumoto)
The Cygwin version had trouble with fchdir(). Don't use that function for The Cygwin version had trouble with fchdir(). Don't use that function for
@@ -3164,10 +3164,10 @@ the terminal it was started in.
When using ESC in Insert mode, an autoindent that wraps to the next line When using ESC in Insert mode, an autoindent that wraps to the next line
caused the cursor to move to the end of the line temporarily. When the caused the cursor to move to the end of the line temporarily. When the
character before the cursor was a double-wide multi-byte character the cursor character before the cursor was a double-wide multibyte character the cursor
would be on the right halve, which causes problems with some terminals. would be on the right half, which causes problems with some terminals.
Didn't handle multi-byte characters correctly when expanding a file name. Didn't handle multibyte characters correctly when expanding a file name.
(Yasuhiro Matsumoto) (Yasuhiro Matsumoto)
Win32 GUI: Errors generated before the GUI is decided to start were not Win32 GUI: Errors generated before the GUI is decided to start were not
@@ -3307,7 +3307,7 @@ started from the desktop (no place to display messages) it would hang. Now
open the GUI window early to be able to display the messages and pop up the open the GUI window early to be able to display the messages and pop up the
dialog. dialog.
"r<CR>" on a multi-byte character deleted only the first byte of the "r<CR>" on a multibyte character deleted only the first byte of the
character. "3r<CR>" deleted three bytes instead of three characters. character. "3r<CR>" deleted three bytes instead of three characters.
When interrupting reading a file, Vi considers the buffer modified. Added the When interrupting reading a file, Vi considers the buffer modified. Added the
@@ -3431,7 +3431,7 @@ Solution: Change slashes to backslashes in the directory passed to the file
Files: src/gui_w48.c Files: src/gui_w48.c
Athena file browser: On some systems wcstombs() can't be used to get the Athena file browser: On some systems wcstombs() can't be used to get the
length of a multi-byte string. Use the maximum length then. (Yasuhiro length of a multibyte string. Use the maximum length then. (Yasuhiro
Matsumoto) Matsumoto)
Patch 6.0ax.001 Patch 6.0ax.001
@@ -3784,7 +3784,7 @@ Solution: Check for a NULL pointer.
Files: src/mbyte.c Files: src/mbyte.c
Patch 6.0.019 Patch 6.0.019
Problem: Converting a string with multi-byte characters to a printable Problem: Converting a string with multibyte characters to a printable
string, e.g., with strtrans(), may cause a crash. (Tomas Zellerin) string, e.g., with strtrans(), may cause a crash. (Tomas Zellerin)
Solution: Correctly compute the length of the result in transstr(). Solution: Correctly compute the length of the result in transstr().
Files: src/charset.c Files: src/charset.c
@@ -4148,9 +4148,9 @@ Solution: Position the system cursor before starting the shell.
Files: src/os_msdos.c Files: src/os_msdos.c
Patch 6.0.074 Patch 6.0.074
Problem: When using "&" in a substitute string a multi-byte character with Problem: When using "&" in a substitute string a multibyte character with
a trailbyte 0x5c is not handled correctly. a trailbyte 0x5c is not handled correctly.
Solution: Recognize multi-byte characters inside the "&" part. (Muraoka Taro) Solution: Recognize multibyte characters inside the "&" part. (Muraoka Taro)
Files: src/regexp.c Files: src/regexp.c
Patch 6.0.075 Patch 6.0.075
@@ -4311,7 +4311,7 @@ Files: src/ex_cmds.c
Patch 6.0.097 Patch 6.0.097
Problem: Re-indenting in Insert mode with CTRL-F may cause a crash with a Problem: Re-indenting in Insert mode with CTRL-F may cause a crash with a
multi-byte encoding. multibyte encoding.
Solution: Avoid using a character before the start of a line. (Sergey Solution: Avoid using a character before the start of a line. (Sergey
Vlasov) Vlasov)
Files: src/edit.c Files: src/edit.c
@@ -4356,7 +4356,7 @@ Files: src/normal.c
Patch 6.0.104 Patch 6.0.104
Problem: Multi-byte: When '$' is in 'cpoptions', typing a double-wide Problem: Multi-byte: When '$' is in 'cpoptions', typing a double-wide
character that overwrites the left halve of an old double-wide character that overwrites the left half of an old double-wide
character causes a redraw problem and the cursor stops blinking. character causes a redraw problem and the cursor stops blinking.
Solution: Clear the right half of the old character. (Yasuhiro Matsumoto) Solution: Clear the right half of the old character. (Yasuhiro Matsumoto)
Files: src/edit.c, src/screen.c Files: src/edit.c, src/screen.c
@@ -4669,14 +4669,14 @@ Solution: Correctly report "operand could be empty" when using "\{-}".
Files: src/regexp.c Files: src/regexp.c
Patch 6.0.150 Patch 6.0.150
Problem: When using a multi-byte encoding, patch 6.0.148 causes "p" to work Problem: When using a multibyte encoding, patch 6.0.148 causes "p" to work
like "P". (Sung-Hyun Nam) like "P". (Sung-Hyun Nam)
Solution: Compute the byte length of a multi-byte character. Solution: Compute the byte length of a multibyte character.
Files: src/ops.c Files: src/ops.c
Patch 6.0.151 Patch 6.0.151
Problem: Redrawing the status line and ruler can be wrong when it contains Problem: Redrawing the status line and ruler can be wrong when it contains
multi-byte characters. multibyte characters.
Solution: Use character width and byte length correctly. (Yasuhiro Matsumoto) Solution: Use character width and byte length correctly. (Yasuhiro Matsumoto)
Files: src/screen.c Files: src/screen.c
@@ -4878,7 +4878,7 @@ Solution: Free the allocated memory. Also avoid an uninitialized memory
Files: src/misc2.c Files: src/misc2.c
Patch 6.0.182 Patch 6.0.182
Problem: When using a regexp on multi-byte characters, could try to read a Problem: When using a regexp on multibyte characters, could try to read a
character before the start of the line. character before the start of the line.
Solution: Don't decrement a pointer to before the start of the line. Solution: Don't decrement a pointer to before the start of the line.
Files: src/regexp.c Files: src/regexp.c
@@ -5060,7 +5060,7 @@ Files: src/edit.c
Patch 6.0.209 Patch 6.0.209
Problem: GUI GTK: After selecting a 'guifont' with the font dialog there Problem: GUI GTK: After selecting a 'guifont' with the font dialog there
are redraw problems for multi-byte characters. are redraw problems for multibyte characters.
Solution: Separate the font dialog from setting the new font name to avoid Solution: Separate the font dialog from setting the new font name to avoid
that "*" is used to find wide and bold fonts. that "*" is used to find wide and bold fonts.
When redrawing extra characters for the bold trick, take care of When redrawing extra characters for the bold trick, take care of
@@ -5203,14 +5203,14 @@ Files: src/ex_docmd.c, src/globals.h, src/normal.c, src/ops.c,
Patch 6.0.229 Patch 6.0.229
Problem: Multi-byte: With 'm' in 'formatoptions', formatting doesn't break Problem: Multi-byte: With 'm' in 'formatoptions', formatting doesn't break
at a multi-byte char followed by an ASCII char, and the other way at a multibyte char followed by an ASCII char, and the other way
around. (Muraoka Taro) around. (Muraoka Taro)
When joining lines a space is inserted between multi-byte When joining lines a space is inserted between multibyte
characters, which is not always wanted. characters, which is not always wanted.
Solution: Check for multi-byte character before and after the breakpoint. Solution: Check for multibyte character before and after the breakpoint.
Don't insert a space before or after a multi-byte character when Don't insert a space before or after a multibyte character when
joining lines and the 'M' flag is in 'formatoptions'. Don't joining lines and the 'M' flag is in 'formatoptions'. Don't
insert a space between multi-byte characters when the 'B' flag is insert a space between multibyte characters when the 'B' flag is
in 'formatoptions'. in 'formatoptions'.
Files: src/edit.c, src/ops.c, src/option.h Files: src/edit.c, src/ops.c, src/option.h
@@ -5290,7 +5290,7 @@ Patch 6.0.241
Problem: Win32: Expanding the old value of an option that is a path that Problem: Win32: Expanding the old value of an option that is a path that
starts with a backslash, an extra backslash is inserted. starts with a backslash, an extra backslash is inserted.
Solution: Only insert backslashes where needed. Solution: Only insert backslashes where needed.
Also handle multi-byte characters properly when removing Also handle multibyte characters properly when removing
backslashes. backslashes.
Files: src/option.c Files: src/option.c
@@ -5312,7 +5312,7 @@ Problem: Multi-byte: Problems with (illegal) UTF-8 characters in menu and
file name (e.g., icon text, status line). file name (e.g., icon text, status line).
Solution: Correctly handle unprintable characters. Catch illegal UTF-8 Solution: Correctly handle unprintable characters. Catch illegal UTF-8
characters and replace them with <xx>. Truncating the status line characters and replace them with <xx>. Truncating the status line
wasn't done correctly at a multi-byte character. (Yasuhiro wasn't done correctly at a multibyte character. (Yasuhiro
Matsumoto) Matsumoto)
Added correct_cmdspos() and transchar_byte(). Added correct_cmdspos() and transchar_byte().
Files: src/buffer.c, src/charset.c, src/ex_getln.c, src/gui.c, Files: src/buffer.c, src/charset.c, src/ex_getln.c, src/gui.c,
@@ -5424,7 +5424,7 @@ Solution: Don't call gui_write() when still starting up. Don't give error
Files: src/fileio.c, src/gui.c, src/misc1.c, src/ui.c Files: src/fileio.c, src/gui.c, src/misc1.c, src/ui.c
Patch 6.0.261 Patch 6.0.261
Problem: nr2char() and char2nr() don't work with multi-byte characters. Problem: nr2char() and char2nr() don't work with multibyte characters.
Solution: Use 'encoding' for these functions. (Yasuhiro Matsumoto) Solution: Use 'encoding' for these functions. (Yasuhiro Matsumoto)
Files: runtime/doc/eval.txt, src/eval.c Files: runtime/doc/eval.txt, src/eval.c
@@ -5517,7 +5517,7 @@ Solution: Don't keep the driver context when using ":hardcopy!". (Vince
Files: src/os_mswin.c Files: src/os_mswin.c
Patch 6.1a.006 Patch 6.1a.006
Problem: multi-byte: after setting 'encoding' the window title might be Problem: multibyte: after setting 'encoding' the window title might be
wrong. wrong.
Solution: Force resetting the title. (Yasuhiro Matsumoto) Solution: Force resetting the title. (Yasuhiro Matsumoto)
Files: src/option.c Files: src/option.c
@@ -5654,7 +5654,7 @@ Files: src/globals.h, src/mbyte.c, src/screen.c
Patch 6.1a.029 Patch 6.1a.029
Problem: After patch 6.1a.028 can't compile GTK version with XIM but Problem: After patch 6.1a.028 can't compile GTK version with XIM but
without multi-byte chars. without multibyte chars.
Solution: Add an #ifdef. (Aschwin Marsman) Solution: Add an #ifdef. (Aschwin Marsman)
Files: src/mbyte.c Files: src/mbyte.c
@@ -5701,9 +5701,9 @@ Solution: Remove the ACL checks, go back to how it worked in Vim 6.0.
Files: src/os_win32.c Files: src/os_win32.c
Patch 6.1a.035 Patch 6.1a.035
Problem: multi-byte: When using ":sh" in the GUI, typed and displayed Problem: multibyte: When using ":sh" in the GUI, typed and displayed
multi-byte characters are not handled correctly. multibyte characters are not handled correctly.
Solution: Deal with multi-byte characters to and from the shell. (Yasuhiro Solution: Deal with multibyte characters to and from the shell. (Yasuhiro
Matsumoto) Also handle UTF-8 composing characters. Matsumoto) Also handle UTF-8 composing characters.
Files: src/os_unix.c Files: src/os_unix.c
@@ -5748,9 +5748,9 @@ Files: runtime/doc/diff.txt, src/diff.c, src/normal.c, src/proto/diff.pro
Patch 6.1b.001 (extra) Patch 6.1b.001 (extra)
Problem: Checking for wildcards in a path does not handle multi-byte Problem: Checking for wildcards in a path does not handle multibyte
characters with a trail byte which is a wildcard. characters with a trail byte which is a wildcard.
Solution: Handle multi-byte characters correctly. (Muraoka Taro) Solution: Handle multibyte characters correctly. (Muraoka Taro)
Files: src/os_amiga.c, src/os_mac.c, src/os_msdos.c, src/os_mswin.c, Files: src/os_amiga.c, src/os_mac.c, src/os_msdos.c, src/os_mswin.c,
src/os_unix.c src/os_unix.c
@@ -6393,7 +6393,7 @@ wrong (back)slashes.
Win32: printer dialog texts were not translated. (Yasuhiro Matsumoto) Win32: printer dialog texts were not translated. (Yasuhiro Matsumoto)
When using a multi-byte character with a K_SPECIAL byte or a special key code When using a multibyte character with a K_SPECIAL byte or a special key code
with "--remote-send" the received byte sequence was mangled. Put it in the with "--remote-send" the received byte sequence was mangled. Put it in the
typeahead buffer instead of the input buffer. typeahead buffer instead of the input buffer.
@@ -6438,7 +6438,7 @@ library version of fgets() to work correctly for Metrowerks 2.2. (Axel
Kielhorn) Kielhorn)
When typing a password a "*" was shown for each byte instead of for each When typing a password a "*" was shown for each byte instead of for each
character. Added multi-byte handling to displaying the stars. (Yasuhiro character. Added multibyte handling to displaying the stars. (Yasuhiro
Matsumoto) Matsumoto)
When using Perl 5.6 accessing $curbuf doesn't work. Add an #ifdef to use When using Perl 5.6 accessing $curbuf doesn't work. Add an #ifdef to use
@@ -6690,9 +6690,9 @@ Solution: Overrule 'lazyredraw' when do_redraw is set.
Files: src/main.c, src/screen.c Files: src/main.c, src/screen.c
Patch 6.1.038 Patch 6.1.038
Problem: Multi-byte: When a ":s" command contains a multi-byte character Problem: Multi-byte: When a ":s" command contains a multibyte character
where the trail byte is '~' the text is messed up. where the trail byte is '~' the text is messed up.
Solution: Properly skip multi-byte characters in regtilde() (Muraoka Taro) Solution: Properly skip multibyte characters in regtilde() (Muraoka Taro)
Files: src/regexp.c Files: src/regexp.c
Patch 6.1.039 Patch 6.1.039
@@ -7069,7 +7069,7 @@ Solution: Don't free the item on the stack. Use NULL instead of "none" for
Files: src/gui_x11.c Files: src/gui_x11.c
Patch 6.1.096 Patch 6.1.096
Problem: When erasing the right halve of a double-byte character, it may Problem: When erasing the right half of a double-byte character, it may
cause further characters to be erased. (Yasuhiro Matsumoto) cause further characters to be erased. (Yasuhiro Matsumoto)
Solution: Make sure only one character is erased. Solution: Make sure only one character is erased.
Files: src/screen.c Files: src/screen.c
@@ -7105,7 +7105,7 @@ Solution: Use ":setlocal" instead of ":set". Change "aw" to "awa".
Files: runtime/optwin.vim Files: runtime/optwin.vim
Patch 6.1.102 Patch 6.1.102
Problem: Unprintable and multi-byte characters in a statusline item are not Problem: Unprintable and multibyte characters in a statusline item are not
truncated correctly. (Yasuhiro Matsumoto) truncated correctly. (Yasuhiro Matsumoto)
Solution: Count the width of characters instead of the number of bytes. Solution: Count the width of characters instead of the number of bytes.
Files: src/buffer.c Files: src/buffer.c
@@ -7480,7 +7480,7 @@ Solution: Take 'siso' into account when computing the horizontal scroll
Files: src/normal.c Files: src/normal.c
Patch 6.1.159 Patch 6.1.159
Problem: When expanding an abbreviation that includes a multi-byte Problem: When expanding an abbreviation that includes a multibyte
character too many characters are deleted. (Andrey Urazov) character too many characters are deleted. (Andrey Urazov)
Solution: Delete the abbreviation counting characters instead of bytes. Solution: Delete the abbreviation counting characters instead of bytes.
Files: src/getchar.c Files: src/getchar.c
@@ -7964,10 +7964,10 @@ Files: src/gui_w48.c
Patch 6.1.231 Patch 6.1.231
Problem: Double clicking with the mouse to select a word does not work for Problem: Double clicking with the mouse to select a word does not work for
multi-byte characters. multibyte characters.
Solution: Use vim_iswordc() instead of vim_isIDc(). This means 'iskeyword' Solution: Use vim_iswordc() instead of vim_isIDc(). This means 'iskeyword'
is used instead of 'isident'. Also fix that mixing ASCII with is used instead of 'isident'. Also fix that mixing ASCII with
multi-byte word characters doesn't work, the mouse class for multibyte word characters doesn't work, the mouse class for
punctuation and word characters was mixed up. punctuation and word characters was mixed up.
Files: src/normal.c Files: src/normal.c
@@ -8056,7 +8056,7 @@ Files: src/vim.h
Patch 6.1.245 Patch 6.1.245
Problem: Comparing with ignored case does not work properly for Unicode Problem: Comparing with ignored case does not work properly for Unicode
with a locale where case folding an ASCII character results in a with a locale where case folding an ASCII character results in a
multi-byte character. (Glenn Maynard) multibyte character. (Glenn Maynard)
Solution: Handle ignore-case compare for Unicode differently. Solution: Handle ignore-case compare for Unicode differently.
Files: src/mbyte.c Files: src/mbyte.c
@@ -8081,8 +8081,8 @@ Files: src/eval.c
Patch 6.1.249 Patch 6.1.249
Problem: Can't expand a path on the command line if it includes a "|" as a Problem: Can't expand a path on the command line if it includes a "|" as a
trail byte of a multi-byte character. trail byte of a multibyte character.
Solution: Check for multi-byte characters. (Yasuhiro Matsumoto) Solution: Check for multibyte characters. (Yasuhiro Matsumoto)
Files: src/ex_docmd.c Files: src/ex_docmd.c
Patch 6.1.250 Patch 6.1.250
@@ -8177,9 +8177,9 @@ Solution: Set the previous context mark before jumping.
Files: src/fold.c Files: src/fold.c
Patch 6.1.263 Patch 6.1.263
Problem: When typing a multi-byte character that triggers an abbreviation Problem: When typing a multibyte character that triggers an abbreviation
it is not inserted properly. it is not inserted properly.
Solution: Handle adding the typed multi-byte character. (Yasuhiro Matsumoto) Solution: Handle adding the typed multibyte character. (Yasuhiro Matsumoto)
Files: src/getchar.c Files: src/getchar.c
Patch 6.1.264 (depends on patch 6.1.254) Patch 6.1.264 (depends on patch 6.1.254)
@@ -8207,7 +8207,7 @@ Solution: Allocate enough memory for saving the register contents. (Muraoka
Files: src/ops.c Files: src/ops.c
Patch 6.1.268 Patch 6.1.268
Problem: When triggering an abbreviation with a multi-byte character, this Problem: When triggering an abbreviation with a multibyte character, this
character is not correctly inserted after expanding the character is not correctly inserted after expanding the
abbreviation. (Taro Muraoka) abbreviation. (Taro Muraoka)
Solution: Add ABBR_OFF to all characters above 0xff. Solution: Add ABBR_OFF to all characters above 0xff.
@@ -8321,7 +8321,7 @@ Files: runtime/doc/options.txt, src/buffer.c, src/option.c,
src/quickfix.c src/quickfix.c
Patch 6.1.286 Patch 6.1.286
Problem: 'showbreak' cannot contain multi-byte characters. Problem: 'showbreak' cannot contain multibyte characters.
Solution: Allow using all printable characters for 'showbreak'. Solution: Allow using all printable characters for 'showbreak'.
Files: src/charset.c, src/move.c, src/option.c Files: src/charset.c, src/move.c, src/option.c
@@ -8343,9 +8343,9 @@ Solution: Add a typecast for " ".
Files: src/screen.c Files: src/screen.c
Patch 6.1.290 (extra) Patch 6.1.290 (extra)
Problem: Truncating long text for message box may break multi-byte Problem: Truncating long text for message box may break multibyte
character. character.
Solution: Adjust to start of multi-byte character. (Yasuhiro Matsumoto) Solution: Adjust to start of multibyte character. (Yasuhiro Matsumoto)
Files: src/os_mswin.c Files: src/os_mswin.c
Patch 6.1.291 (extra) Patch 6.1.291 (extra)
@@ -8368,7 +8368,7 @@ Solution: Change ">=" to ">" in ml_find_line_or_offset(). (Bradford C Smith)
Files: src/memline.c Files: src/memline.c
Patch 6.1.294 Patch 6.1.294
Problem: Can't include a multi-byte character in a string by its hex value. Problem: Can't include a multibyte character in a string by its hex value.
(Benji Fisher) (Benji Fisher)
Solution: Add "\u....": a character specified with up to four hex numbers Solution: Add "\u....": a character specified with up to four hex numbers
and stored according to the value of 'encoding'. and stored according to the value of 'encoding'.
@@ -8791,7 +8791,7 @@ Solution: Set Vim as the frontprocess. Fix scrolling. (Peter Cucka)
Files: src/gui_mac.c Files: src/gui_mac.c
Patch 6.1.360 (depends on 6.1.341) Patch 6.1.360 (depends on 6.1.341)
Problem: In Insert mode CTRL-K ESC messes up a multi-byte character. Problem: In Insert mode CTRL-K ESC messes up a multibyte character.
(Anders Helmersson) (Anders Helmersson)
Solution: Save all bytes of a character when displaying a character Solution: Save all bytes of a character when displaying a character
temporarily. temporarily.
@@ -8962,7 +8962,7 @@ Files: src/gui_w32.c
Patch 6.1.383 Patch 6.1.383
Problem: The filling of the status line doesn't work properly for Problem: The filling of the status line doesn't work properly for
multi-byte characters. (Nam SungHyun) multibyte characters. (Nam SungHyun)
There is no check for going past the end of the buffer. There is no check for going past the end of the buffer.
Solution: Properly distinguish characters and bytes. Properly check for Solution: Properly distinguish characters and bytes. Properly check for
running out of buffer space. running out of buffer space.
@@ -8976,13 +8976,13 @@ Files: runtime/doc/eval.txt, src/eval.c, src/proto/version.pro,
src/version.c src/version.c
Patch 6.1.385 (depends on 6.1.383) Patch 6.1.385 (depends on 6.1.383)
Problem: Can't compile without the multi-byte feature. Problem: Can't compile without the multibyte feature.
Solution: Move an #ifdef. (Christian J. Robinson) Solution: Move an #ifdef. (Christian J. Robinson)
Files: src/buffer.c Files: src/buffer.c
Patch 6.1.386 Patch 6.1.386
Problem: Get duplicate tags when running ":helptags". Problem: Get duplicate tags when running ":helptags".
Solution: Do the other halve of moving a section to another help file. Solution: Do the other half of moving a section to another help file.
Files: runtime/tagsrch.txt Files: runtime/tagsrch.txt
Patch 6.1.387 (depends on 6.1.373) Patch 6.1.387 (depends on 6.1.373)
@@ -9201,10 +9201,10 @@ Solution: Respect the GUARDEDOFFSET for sign IDs when checking for a guarded
Files: src/netbeans.c Files: src/netbeans.c
Patch 6.1.417 Patch 6.1.417
Problem: Unprintable multi-byte characters are not handled correctly. Problem: Unprintable multibyte characters are not handled correctly.
Multi-byte characters above 0xffff are displayed as another Multi-byte characters above 0xffff are displayed as another
character. character.
Solution: Handle unprintable multi-byte characters. Display multi-byte Solution: Handle unprintable multibyte characters. Display multibyte
characters above 0xffff with a marker. Recognize UTF-16 words and characters above 0xffff with a marker. Recognize UTF-16 words and
BOM words as unprintable. (Daniel Elstner) BOM words as unprintable. (Daniel Elstner)
Files: src/charset.c, src/mbyte.c, src/screen.c Files: src/charset.c, src/mbyte.c, src/screen.c
@@ -9326,7 +9326,7 @@ Solution: Add the line number to the error message.
Files: src/fileio.c Files: src/fileio.c
Patch 6.1.437 (extra, depends on 6.1.421) Patch 6.1.437 (extra, depends on 6.1.421)
Problem: Using multi-byte functions when they are not available. Problem: Using multibyte functions when they are not available.
Solution: Put the clipboard conversion inside an #ifdef. (Vince Negri) Solution: Put the clipboard conversion inside an #ifdef. (Vince Negri)
Also fix a pointer type mistake. (Walter Briscoe) Also fix a pointer type mistake. (Walter Briscoe)
Files: src/os_mswin.c Files: src/os_mswin.c
@@ -9526,8 +9526,8 @@ Solution: Only store folds for a buffer with 'buftype' empty and help files.
Files: src/ex_docmd.c Files: src/ex_docmd.c
Patch 6.1.469 Patch 6.1.469
Problem: 'listchars' cannot contain multi-byte characters. Problem: 'listchars' cannot contain multibyte characters.
Solution: Handle multi-byte UTF-8 list characters. (Matthew Samsonoff) Solution: Handle multibyte UTF-8 list characters. (Matthew Samsonoff)
Files: src/message.c, src/option.c, src/screen.c Files: src/message.c, src/option.c, src/screen.c
Patch 6.1.470 (lang) Patch 6.1.470 (lang)
@@ -10009,7 +10009,7 @@ Files: nsis/gvim.nsi
Patch 6.2.010 Patch 6.2.010
Problem: When 'virtualedit' is effective and a line starts with a Problem: When 'virtualedit' is effective and a line starts with a
multi-byte character, moving the cursor right doesn't work. multibyte character, moving the cursor right doesn't work.
Solution: Obtain the right character to compute the column offset. (Taro Solution: Obtain the right character to compute the column offset. (Taro
Muraoka) Muraoka)
Files: src/charset.c Files: src/charset.c
@@ -10109,7 +10109,7 @@ Files: src/fileio.c
Patch 6.2.027 Patch 6.2.027
Problem: Warning for uninitialized variable. Problem: Warning for uninitialized variable.
Solution: Set mb_l to one when not using multi-byte characters. Solution: Set mb_l to one when not using multibyte characters.
Files: src/message.c Files: src/message.c
Patch 6.2.028 Patch 6.2.028
@@ -10271,15 +10271,15 @@ Files: src/osdef1.h.in
Patch 6.2.054 Patch 6.2.054
Problem: A double-byte character with a second byte that is a backslash Problem: A double-byte character with a second byte that is a backslash
causes problems inside a string. causes problems inside a string.
Solution: Skip over multi-byte characters in a string properly. (Yasuhiro Solution: Skip over multibyte characters in a string properly. (Yasuhiro
Matsumoto) Matsumoto)
Files: src/eval.c Files: src/eval.c
Patch 6.2.055 Patch 6.2.055
Problem: Using col('.') from CTRL-O in Insert mode does not return the Problem: Using col('.') from CTRL-O in Insert mode does not return the
correct value for multi-byte characters. correct value for multibyte characters.
Solution: Correct the cursor position when it is necessary, move to the Solution: Correct the cursor position when it is necessary, move to the
first byte of a multi-byte character. (Yasuhiro Matsumoto) first byte of a multibyte character. (Yasuhiro Matsumoto)
Files: src/edit.c Files: src/edit.c
Patch 6.2.056 (extra) Patch 6.2.056 (extra)
@@ -10851,7 +10851,7 @@ Files: Makefile, src/Makefile, src/auto/configure, src/configure.in,
Patch 6.2.143 Patch 6.2.143
Problem: Using "K" on Visually selected text doesn't work if it ends in Problem: Using "K" on Visually selected text doesn't work if it ends in
a multi-byte character. a multibyte character.
Solution: Include all the bytes of the last character. (Taro Muraoka) Solution: Include all the bytes of the last character. (Taro Muraoka)
Files: src/normal.c Files: src/normal.c
@@ -11269,12 +11269,12 @@ Files: src/gui_w32.c, src/gui_w48.c
Patch 6.2.206 Patch 6.2.206
Problem: Multi-byte characters cannot be used as hotkeys in a console Problem: Multi-byte characters cannot be used as hotkeys in a console
dialog. (Mattias Erkisson) dialog. (Mattias Erkisson)
Solution: Handle multi-byte characters properly. Also put () or [] around Solution: Handle multibyte characters properly. Also put () or [] around
default hotkeys. default hotkeys.
Files: src/message.c, src/macros.h Files: src/message.c, src/macros.h
Patch 6.2.207 Patch 6.2.207
Problem: When 'encoding' is a multi-byte encoding, expanding an Problem: When 'encoding' is a multibyte encoding, expanding an
abbreviation that starts where insertion started results in abbreviation that starts where insertion started results in
characters before the insertion to be deleted. (Xiangjiang Ma) characters before the insertion to be deleted. (Xiangjiang Ma)
Solution: Stop searching leftwards for the start of the word at the position Solution: Stop searching leftwards for the start of the word at the position
@@ -11344,7 +11344,7 @@ Files: src/fileio.c, src/netbeans.c, src/proto/netbeans.pro,
Patch 6.2.216 (after 6.2.206) Patch 6.2.216 (after 6.2.206)
Problem: Multi-byte characters still cannot be used as hotkeys in a console Problem: Multi-byte characters still cannot be used as hotkeys in a console
dialog. (Mattias Erkisson) dialog. (Mattias Erkisson)
Solution: Make get_keystroke() handle multi-byte characters. Solution: Make get_keystroke() handle multibyte characters.
Files: src/misc1.c Files: src/misc1.c
Patch 6.2.217 Patch 6.2.217
@@ -11710,7 +11710,7 @@ Files: src/gui.c
Patch 6.2.269 Patch 6.2.269
Problem: Diff mode does not highlight a change in a combining character. Problem: Diff mode does not highlight a change in a combining character.
(Raphael Finkel) (Raphael Finkel)
Solution: Make diff_find_change() multi-byte aware: find the start byte of Solution: Make diff_find_change() multibyte aware: find the start byte of
a character that contains a change. a character that contains a change.
Files: src/diff.c Files: src/diff.c
@@ -12505,7 +12505,7 @@ Solution: Don't redraw the bottom line if no rows were inserted or deleted.
Files: src/screen.c Files: src/screen.c
Patch 6.2.390 Patch 6.2.390
Problem: Using "r*" in Visual mode on multi-byte characters only replaces Problem: Using "r*" in Visual mode on multibyte characters only replaces
every other character. (Tyson Roberts) every other character. (Tyson Roberts)
Solution: Correct the cursor position after replacing each character. Solution: Correct the cursor position after replacing each character.
Files: src/ops.c Files: src/ops.c
@@ -12745,7 +12745,7 @@ Solution: Also use the line number of the position where the region
Files: src/syntax.c Files: src/syntax.c
Patch 6.2.427 (extra) Patch 6.2.427 (extra)
Problem: When pasting a lot of text in a multi-byte encoding, conversion Problem: When pasting a lot of text in a multibyte encoding, conversion
from 'termencoding' to 'encoding' may fail for some characters. from 'termencoding' to 'encoding' may fail for some characters.
(Kuang-che Wu) (Kuang-che Wu)
Solution: When there is an incomplete byte sequence at the end of the read Solution: When there is an incomplete byte sequence at the end of the read
@@ -12984,7 +12984,7 @@ Files: src/normal.c
Patch 6.2.462 Patch 6.2.462
Problem: Finding a matching parenthesis does not correctly handle a Problem: Finding a matching parenthesis does not correctly handle a
backslash in a trailing byte. backslash in a trailing byte.
Solution: Handle multi-byte characters correctly. (Taro Muraoka) Solution: Handle multibyte characters correctly. (Taro Muraoka)
Files: src/search.c Files: src/search.c
Patch 6.2.463 (extra) Patch 6.2.463 (extra)
@@ -13015,7 +13015,7 @@ Solution: Redefine wcsicmp() to wcscmpi() and add type casts. (Yasuhiro
Files: src/os_win32.c Files: src/os_win32.c
Patch 6.2.467 (extra, after 6.2.463) Patch 6.2.467 (extra, after 6.2.463)
Problem: Win32: can't compile without multi-byte feature. (Ajit Thakkar) Problem: Win32: can't compile without multibyte feature. (Ajit Thakkar)
Solution: Add #ifdefs around the info stream code. Solution: Add #ifdefs around the info stream code.
Files: src/os_win32.c Files: src/os_win32.c
@@ -13183,8 +13183,8 @@ Solution: Allow using " " (two spaces) in 'paragraph' to match ".$" or
Files: src/search.c Files: src/search.c
Patch 6.2.491 Patch 6.2.491
Problem: Decrementing a position doesn't take care of multi-byte chars. Problem: Decrementing a position doesn't take care of multibyte chars.
Solution: Adjust the column for multi-byte characters. Remove mb_dec(). Solution: Adjust the column for multibyte characters. Remove mb_dec().
(Yasuhiro Matsumoto) (Yasuhiro Matsumoto)
Files: src/mbyte.c, src/misc2.c, src/proto/mbyte.pro Files: src/mbyte.c, src/misc2.c, src/proto/mbyte.pro
@@ -13354,12 +13354,12 @@ Files: runtime/doc/options.txt, runtime/doc/sign.txt, src/option.c,
src/screen.c, src/syntax.c, src/vim.h src/screen.c, src/syntax.c, src/vim.h
Patch 6.2.517 Patch 6.2.517
Problem: Using "r*" in Visual mode on multi-byte characters replaces Problem: Using "r*" in Visual mode on multibyte characters replaces
too many characters. In Visual Block mode replacing with a too many characters. In Visual Block mode replacing with a
multi-byte character doesn't work. multibyte character doesn't work.
Solution: Adjust the operator end for the difference in byte length of the Solution: Adjust the operator end for the difference in byte length of the
original and the replaced character. Insert all bytes of a original and the replaced character. Insert all bytes of a
multi-byte character, take care of double-wide characters. multibyte character, take care of double-wide characters.
Files: src/ops.c Files: src/ops.c
Patch 6.2.518 Patch 6.2.518
@@ -13438,7 +13438,7 @@ Problem: NetBeans: Changes of the "~" command are not reported.
Solution: Call netbeans_inserted() after performing "~". (Gordon Prieur) Solution: Call netbeans_inserted() after performing "~". (Gordon Prieur)
Also change NetBeans debugging to append to the log file. Also change NetBeans debugging to append to the log file.
Also fix that "~" in Visual block mode changes too much if there Also fix that "~" in Visual block mode changes too much if there
are multi-byte characters. are multibyte characters.
Files: src/nbdebug.c, src/normal.c, src/ops.c Files: src/nbdebug.c, src/normal.c, src/ops.c
Patch 6.2.529 (extra) Patch 6.2.529 (extra)
@@ -13552,7 +13552,7 @@ Solution: Convert menu strings from 'encoding' to the active codepage.
Files: src/gui_w32.c, src/gui_w48.c Files: src/gui_w32.c, src/gui_w48.c
Patch 6.3a.014 Patch 6.3a.014
Problem: Using multi-byte text and highlighting in a statusline causes gaps Problem: Using multibyte text and highlighting in a statusline causes gaps
to appear. (Helmut Stiegler) to appear. (Helmut Stiegler)
Solution: Advance the column by text width instead of number of bytes. Add Solution: Advance the column by text width instead of number of bytes. Add
the vim_strnsize() function. the vim_strnsize() function.
@@ -14040,19 +14040,19 @@ Solution: Correctly check that one character is being deleted.
Files: src/misc1.c Files: src/misc1.c
Patch 6.3.021 Patch 6.3.021
Problem: When the last character of a file name is a multi-byte character Problem: When the last character of a file name is a multibyte character
and the last byte is a path separator, the file cannot be edited. and the last byte is a path separator, the file cannot be edited.
Solution: Check for the last byte to be part of a multi-byte character. Solution: Check for the last byte to be part of a multibyte character.
(Taro Muraoka) (Taro Muraoka)
Files: src/fileio.c Files: src/fileio.c
Patch 6.3.022 (extra) Patch 6.3.022 (extra)
Problem: Win32: When the last character of a file name is a multi-byte Problem: Win32: When the last character of a file name is a multibyte
character and the last byte is a path separator, the file cannot character and the last byte is a path separator, the file cannot
be written. A trail byte that is a space makes that a file cannot be written. A trail byte that is a space makes that a file cannot
be opened from the command line. be opened from the command line.
Solution: Recognize double-byte characters when parsing the command line. Solution: Recognize double-byte characters when parsing the command line.
In mch_stat() check for the last byte to be part of a multi-byte In mch_stat() check for the last byte to be part of a multibyte
character. (Taro Muraoka) character. (Taro Muraoka)
Files: src/gui_w48.c, src/os_mswin.c Files: src/gui_w48.c, src/os_mswin.c
@@ -14222,7 +14222,7 @@ Solution: Don't allow setting termcap options or 'printdevice' in a
Files: src/option.c, runtime/doc/options.txt Files: src/option.c, runtime/doc/options.txt
Patch 6.3.046 Patch 6.3.046
Problem: ":registers" doesn't show multi-byte characters properly. Problem: ":registers" doesn't show multibyte characters properly.
(Valery Kondakoff) (Valery Kondakoff)
Solution: Get the length of each character before displaying it. Solution: Get the length of each character before displaying it.
Files: src/ops.c Files: src/ops.c
@@ -14250,9 +14250,9 @@ Solution: Ignore SIGHUP when exiting because of an error. (Scott Anderson)
Files: src/misc1.c, src/main.c Files: src/misc1.c, src/main.c
Patch 6.3.051 Patch 6.3.051
Problem: When 'wildmenu' is set and completed file names contain multi-byte Problem: When 'wildmenu' is set and completed file names contain multibyte
characters Vim may crash. characters Vim may crash.
Solution: Reserve room for multi-byte characters. (Yasuhiro Matsumoto) Solution: Reserve room for multibyte characters. (Yasuhiro Matsumoto)
Files: src/screen.c Files: src/screen.c
Patch 6.3.052 (extra) Patch 6.3.052 (extra)
@@ -14286,9 +14286,9 @@ Solution: When moving ccline out of the way for recursive use, make it
Files: src/ex_getln.c Files: src/ex_getln.c
Patch 6.3.056 Patch 6.3.056
Problem: The last characters of a multi-byte file name may not be displayed Problem: The last characters of a multibyte file name may not be displayed
in the window title. in the window title.
Solution: Avoid to remove a multi-byte character where the last byte looks Solution: Avoid to remove a multibyte character where the last byte looks
like a path separator character. (Yasuhiro Matsumoto) like a path separator character. (Yasuhiro Matsumoto)
Files: src/buffer.c, src/ex_getln.c Files: src/buffer.c, src/ex_getln.c
@@ -14319,9 +14319,9 @@ Files: src/edit.c
Patch 6.3.061 Patch 6.3.061
Problem: When editing a utf-8 file in an utf-8 xterm and there is a Problem: When editing a utf-8 file in an utf-8 xterm and there is a
multi-byte character in the last column, displaying is messed up. multibyte character in the last column, displaying is messed up.
(Joël Rio) (Joël Rio)
Solution: Check for a multi-byte character, not a multi-column character. Solution: Check for a multibyte character, not a multi-column character.
Files: src/screen.c Files: src/screen.c
Patch 6.3.062 Patch 6.3.062
@@ -14384,7 +14384,7 @@ Files: src/edit.c
Patch 6.3.072 Patch 6.3.072
Problem: Crash in giving substitute message when language is Chinese and Problem: Crash in giving substitute message when language is Chinese and
encoding is utf-8. (Yongwei) encoding is utf-8. (Yongwei)
Solution: Make the msg_buf size larger when using multi-byte. Solution: Make the msg_buf size larger when using multibyte.
Files: src/vim.h Files: src/vim.h
Patch 6.3.073 Patch 6.3.073
@@ -14508,7 +14508,7 @@ Solution: Change "a" to "b". (Tony Mechelynck)
Files: src/version.h Files: src/version.h
Patch 6.4b.002 Patch 6.4b.002
Problem: In Insert mode, pasting a multi-byte character after the end of Problem: In Insert mode, pasting a multibyte character after the end of
the line leaves the cursor just before that character. the line leaves the cursor just before that character.
Solution: Make sure "gP" leaves the cursor in the right place when Solution: Make sure "gP" leaves the cursor in the right place when
'virtualedit' is set. 'virtualedit' is set.

View File

@@ -1,4 +1,4 @@
*version7.txt* For Vim version 8.2. Last change: 2016 Jul 17 *version7.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -22,7 +22,7 @@ Vim script enhancements |new-vim-script|
Spell checking |new-spell| Spell checking |new-spell|
Omni completion |new-omni-completion| Omni completion |new-omni-completion|
MzScheme interface |new-MzScheme| MzScheme interface |new-MzScheme|
Printing multi-byte text |new-print-multi-byte| Printing multibyte text |new-print-multibyte|
Tab pages |new-tab-pages| Tab pages |new-tab-pages|
Undo branches |new-undo-branches| Undo branches |new-undo-branches|
Extended Unicode support |new-more-unicode| Extended Unicode support |new-more-unicode|
@@ -302,10 +302,10 @@ The |:mzfile| command can be used to execute an MzScheme script file
This depends on Vim being compiled with the |+mzscheme| feature. This depends on Vim being compiled with the |+mzscheme| feature.
Printing multi-byte text *new-print-multi-byte* Printing multibyte text *new-print-multibyte*
------------------------ ------------------------
The |:hardcopy| command now supports printing multi-byte characters when using The |:hardcopy| command now supports printing multibyte characters when using
PostScript. PostScript.
The 'printmbcharset' and 'printmbfont' options are used for this. The 'printmbcharset' and 'printmbfont' options are used for this.
@@ -1211,7 +1211,7 @@ Also fixes the problem that setting 'clipboard' to "unnamed" breaks using
Mac: GUI font selector. (Peter Cucka) Mac: GUI font selector. (Peter Cucka)
Mac: support for multi-byte characters. (Da Woon Jung) Mac: support for multibyte characters. (Da Woon Jung)
This doesn't always work properly. If you see text drawing problems try This doesn't always work properly. If you see text drawing problems try
switching the 'macatsui' option off. switching the 'macatsui' option off.
@@ -1361,7 +1361,7 @@ When C, C++ or IDL syntax is used, may additionally load doxygen syntax.
Support setting 'filetype' and 'syntax' to "aaa.bbb" for "aaa" plus "bbb" Support setting 'filetype' and 'syntax' to "aaa.bbb" for "aaa" plus "bbb"
filetype or syntax. filetype or syntax.
The ":registers" command now displays multi-byte characters properly. The ":registers" command now displays multibyte characters properly.
VMS: In the usage message mention that a slash can be used to make a flag VMS: In the usage message mention that a slash can be used to make a flag
upper case. Add color support to the builtin vt320 terminal codes. upper case. Add color support to the builtin vt320 terminal codes.
@@ -1460,7 +1460,7 @@ To count items (pattern matches) without changing the buffer the 'n' flag has
been added to |:substitute|. See |count-items|. been added to |:substitute|. See |count-items|.
In a |:substitute| command the \u, \U, \l and \L items now also work for In a |:substitute| command the \u, \U, \l and \L items now also work for
multi-byte characters. multibyte characters.
The "screen.linux" $TERM name is recognized to set the default for The "screen.linux" $TERM name is recognized to set the default for
'background' to "dark". (Ciaran McCreesh) Also for "cygwin" and "putty". 'background' to "dark". (Ciaran McCreesh) Also for "cygwin" and "putty".
@@ -1736,7 +1736,7 @@ variables like for a regular command with a file argument.
'cindent': When the argument of a #define looks like a C++ class the next line 'cindent': When the argument of a #define looks like a C++ class the next line
is indented too much. is indented too much.
When 'comments' includes multi-byte characters inserting the middle part and When 'comments' includes multibyte characters inserting the middle part and
alignment may go wrong. 'cindent' also suffers from this for right-aligned alignment may go wrong. 'cindent' also suffers from this for right-aligned
items. items.
@@ -2309,7 +2309,7 @@ characters in v:this_session.
":set sta ts=8 sw=4 sts=2" deleted 4 spaces halfway a line instead of 2. ":set sta ts=8 sw=4 sts=2" deleted 4 spaces halfway a line instead of 2.
In a multi-byte file the foldmarker could be recognized in the trail byte. In a multibyte file the foldmarker could be recognized in the trail byte.
(Taro Muraoka) (Taro Muraoka)
Pasting with CTRL-V and menu didn't work properly when some commands are Pasting with CTRL-V and menu didn't work properly when some commands are
@@ -2504,7 +2504,7 @@ a crash.
For a new tab page the 'scroll' option wasn't set to a good default. For a new tab page the 'scroll' option wasn't set to a good default.
Using an end offset for a search "/pat/e" didn't work properly for multi-byte Using an end offset for a search "/pat/e" didn't work properly for multibyte
text. (Yukihiro Nakadaira) text. (Yukihiro Nakadaira)
":s/\n/,/" doubled the text when used on the last line. ":s/\n/,/" doubled the text when used on the last line.
@@ -2604,7 +2604,7 @@ recursively. But after a ":normal" command the protection was reset.
":s/a/b/n" didn't work when 'modifiable' was off. ":s/a/b/n" didn't work when 'modifiable' was off.
When $VIMRUNTIME includes a multi-byte character then rgb.txt could not be When $VIMRUNTIME includes a multibyte character then rgb.txt could not be
found. (Yukihiro Nakadaira) found. (Yukihiro Nakadaira)
":mkspell" didn't work correctly for non-ASCII affix flags when conversion is ":mkspell" didn't work correctly for non-ASCII affix flags when conversion is
@@ -2670,7 +2670,7 @@ keep them in the original order.
Fixed a crash when editing a directory in diff mode. Don't trigger Fixed a crash when editing a directory in diff mode. Don't trigger
autocommands when executing the diff command. autocommands when executing the diff command.
Getting a keystroke could get stuck if 'encoding' is a multi-byte encoding and Getting a keystroke could get stuck if 'encoding' is a multibyte encoding and
typing a special key. typing a special key.
When 'foldignore' is set the folds were not updated right away. When 'foldignore' is set the folds were not updated right away.
@@ -2711,7 +2711,7 @@ When using ":vsp" or ":sp" the available space wasn't used equally between
windows. (Servatius Brandt) windows. (Servatius Brandt)
Expanding <cWORD> on a trailing blank resulted in the first word in the line Expanding <cWORD> on a trailing blank resulted in the first word in the line
if 'encoding' is a multi-byte encoding. if 'encoding' is a multibyte encoding.
Spell checking: spellbadword() didn't see a missing capital in the first word Spell checking: spellbadword() didn't see a missing capital in the first word
of a line. Popup menu now only suggest the capitalized word when appropriate. of a line. Popup menu now only suggest the capitalized word when appropriate.
@@ -2734,7 +2734,7 @@ background, which made magenta text disappear. Now use reverse in this
specific situation. specific situation.
After completing the longest match "." didn't insert the same text. Repeating After completing the longest match "." didn't insert the same text. Repeating
also didn't work correctly for multi-byte text. also didn't work correctly for multibyte text.
When using Insert mode completion and BS the whole word that was completed When using Insert mode completion and BS the whole word that was completed
would result in all possible matches. Now stop completion. Also fixes that would result in all possible matches. Now stop completion. Also fixes that
@@ -2751,7 +2751,7 @@ non-ASCII characters looked wrong. (Yegappan Lakshmanan)
Motif: building failed when Xm/Notebook.h doesn't exist. Added a configure Motif: building failed when Xm/Notebook.h doesn't exist. Added a configure
check, disable GUI tabline when it's missing. check, disable GUI tabline when it's missing.
Mac: When compiled without multi-byte feature the clipboard didn't work. Mac: When compiled without multibyte feature the clipboard didn't work.
It was possible to switch to another tab page when the cmdline window is open. It was possible to switch to another tab page when the cmdline window is open.
@@ -2762,7 +2762,7 @@ number following the file name.
Added 'guitabtooltip'. Implemented for Win32 (Yegappan Lakshmanan). Added 'guitabtooltip'. Implemented for Win32 (Yegappan Lakshmanan).
Added "throw" to 'debug' option: throw an exception for error messages even Added "throw" to 'debug' option: throw an exception for error messages even
whey they would otherwise be ignored. when they would otherwise be ignored.
When 'keymap' is set and a line contains an invalid entry could get a "No When 'keymap' is set and a line contains an invalid entry could get a "No
mapping found" warning instead of a proper error message. mapping found" warning instead of a proper error message.
@@ -2867,7 +2867,7 @@ a crash.
GTK: The tab pages line menu was not converted from 'encoding' to utf-8. GTK: The tab pages line menu was not converted from 'encoding' to utf-8.
Typing a multi-byte character or a special key at the hit-enter prompt did not Typing a multibyte character or a special key at the hit-enter prompt did not
work. work.
When 'virtualedit' contains "onemore" CTRL-O in Insert mode still moved the When 'virtualedit' contains "onemore" CTRL-O in Insert mode still moved the
@@ -3387,7 +3387,7 @@ Solution: When running Vim as root don't become a Vim server without an
Files: src/main.c Files: src/main.c
Patch 7.0.053 Patch 7.0.053
Problem: Shortening a directory name may fail when there are multi-byte Problem: Shortening a directory name may fail when there are multibyte
characters. characters.
Solution: Copy the correct bytes. (Titov Anatoly) Solution: Copy the correct bytes. (Titov Anatoly)
Files: src/misc1.c Files: src/misc1.c
@@ -3621,7 +3621,7 @@ Solution: Remove the "-pipe" argument from PERL_CFLAGS.
Files: src/auto/configure, src/configure.in Files: src/auto/configure, src/configure.in
Patch 7.0.089 Patch 7.0.089
Problem: "ga" does not work properly for a non-Unicode multi-byte encoding. Problem: "ga" does not work properly for a non-Unicode multibyte encoding.
Solution: Only check for composing chars for utf-8. (Taro Muraoka) Solution: Only check for composing chars for utf-8. (Taro Muraoka)
Files: src/ex_cmds.c Files: src/ex_cmds.c
@@ -3859,7 +3859,7 @@ Solution: Set ins_need_undo after using 'formatexpr'.
Files: src/edit.c Files: src/edit.c
Patch 7.0.127 Patch 7.0.127
Problem: Crash when swap files has invalid timestamp. Problem: Crash when swap file has invalid timestamp.
Solution: Check return value of ctime() for being NULL. Solution: Check return value of ctime() for being NULL.
Files: src/memline.c Files: src/memline.c
@@ -4224,7 +4224,7 @@ Files: src/if_cscope.c
Patch 7.0.185 Patch 7.0.185
Problem: Multi-byte characters in a message are displayed with attributes Problem: Multi-byte characters in a message are displayed with attributes
from what comes before it. from what comes before it.
Solution: Don't use the attributes for a multi-byte character. Do use Solution: Don't use the attributes for a multibyte character. Do use
attributes for special characters. (Yukihiro Nakadaira) attributes for special characters. (Yukihiro Nakadaira)
Files: src/message.c Files: src/message.c
@@ -4307,7 +4307,7 @@ Solution: Add type casts. Use "*" for processorArchitecture. (George Reilly)
Files: src/Make_mvc.mak, src/eval.c, src/gvim.exe.mnf, src/misc2.c Files: src/Make_mvc.mak, src/eval.c, src/gvim.exe.mnf, src/misc2.c
Patch 7.0.199 Patch 7.0.199
Problem: When using multi-byte characters the combination of completion and Problem: When using multibyte characters the combination of completion and
formatting may result in a wrong cursor position. formatting may result in a wrong cursor position.
Solution: Don't decrement the cursor column, use dec_cursor(). (Yukihiro Solution: Don't decrement the cursor column, use dec_cursor(). (Yukihiro
Nakadaira) Also check for the column to be zero. Nakadaira) Also check for the column to be zero.
@@ -5902,10 +5902,10 @@ Solution: Don't advance the cursor when it's already on the NUL after a
Files: src/normal.c Files: src/normal.c
Patch 7.1.185 Patch 7.1.185
Problem: Using "gR" with a multi-byte encoding and typing a CR pushes Problem: Using "gR" with a multibyte encoding and typing a CR pushes
characters onto the replace stack incorrectly, resulting in BS characters onto the replace stack incorrectly, resulting in BS
putting back the wrong characters. (Paul B. Mahol) putting back the wrong characters. (Paul B. Mahol)
Solution: Push multi-byte characters onto the replace stack in reverse byte Solution: Push multibyte characters onto the replace stack in reverse byte
order. Add replace_push_mb(). order. Add replace_push_mb().
Files: src/edit.c, src/misc1.c, src/proto/edit.pro Files: src/edit.c, src/misc1.c, src/proto/edit.pro
@@ -6112,7 +6112,7 @@ Files: runtime/doc/eval.txt, src/eval.c, src/hardcopy.c,
Patch 7.1.220 Patch 7.1.220
Problem: When a ")" or word movement command moves the cursor back from the Problem: When a ")" or word movement command moves the cursor back from the
end of the line it may end up on the trail byte of a multi-byte end of the line it may end up on the trail byte of a multibyte
character. It's also moved back when it isn't needed. character. It's also moved back when it isn't needed.
Solution: Add the adjust_cursor() function. Solution: Add the adjust_cursor() function.
Files: src/normal.c Files: src/normal.c
@@ -6241,7 +6241,7 @@ Problem: When "gUe" turns a German sharp s into SS the operation stops
before the end of the word. Latin2 has the same sharp s but it's before the end of the word. Latin2 has the same sharp s but it's
not changed to SS there. not changed to SS there.
Solution: Make sure all the characters are operated upon. Detect the sharp Solution: Make sure all the characters are operated upon. Detect the sharp
s in latin2. Also fixes that changing case of a multi-byte s in latin2. Also fixes that changing case of a multibyte
character that changes the byte count doesn't always work. character that changes the byte count doesn't always work.
Files: src/ops.c Files: src/ops.c
@@ -6757,9 +6757,9 @@ Solution: Use separate buffer for posix path. (Ben Schmidt)
Files: src/os_unix.c Files: src/os_unix.c
Patch 7.1.329 Patch 7.1.329
Problem: When the popup menu is removed a column of cells, the right halve Problem: When the popup menu is removed a column of cells, the right half
of double-wide characters, may not be redrawn. of double-wide characters, may not be redrawn.
Solution: Check if the right halve of a character needs to be redrawn. Solution: Check if the right half of a character needs to be redrawn.
(Yukihiro Nakadaira) (Yukihiro Nakadaira)
Files: src/screen.c Files: src/screen.c
@@ -6771,7 +6771,7 @@ Files: src/misc1.c
Warning for missing sentinel in gui_xmldlg.c. (Dominique Pelle) Warning for missing sentinel in gui_xmldlg.c. (Dominique Pelle)
A search offset from the end of a match didn't work properly for multi-byte A search offset from the end of a match didn't work properly for multibyte
characters. (Yukihiro Nakadaira) characters. (Yukihiro Nakadaira)
When displaying the value of 'key' don't show "*****" when the value is empty. When displaying the value of 'key' don't show "*****" when the value is empty.
@@ -6965,7 +6965,7 @@ The #ifdef for including "vimio.h" was inconsistent. In a few files it
depended on MSWIN, which isn't defined until later. depended on MSWIN, which isn't defined until later.
Patch 7.2b.001 Patch 7.2b.001
Problem: Compilation problem: mb_fix_col() missing with multi-byte feature Problem: Compilation problem: mb_fix_col() missing with multibyte feature
but without GUI or clipboard. but without GUI or clipboard.
Solution: Remove #ifdef. Solution: Remove #ifdef.
Files: src/mbyte.c Files: src/mbyte.c
@@ -7804,7 +7804,7 @@ Solution: Don't change "Columns" back to an old value at a wrong moment.
Files: src/gui.c Files: src/gui.c
Patch 7.2.066 Patch 7.2.066
Problem: It's not easy to see whether 'encoding' is a multi-byte encoding. Problem: It's not easy to see whether 'encoding' is a multibyte encoding.
Solution: Add has('multi_byte_encoding'). Solution: Add has('multi_byte_encoding').
Files: runtime/doc/eval.txt, src/eval.c Files: runtime/doc/eval.txt, src/eval.c
@@ -7949,7 +7949,7 @@ Solution: Don't use a WM_OLE message of zero size. (Ray Megal)
Files: src/if_ole.cpp, src/gui_w48.c Files: src/if_ole.cpp, src/gui_w48.c
Patch 7.2.090 Patch 7.2.090
Problem: User command containing 0x80 in multi-byte character does not work Problem: User command containing 0x80 in multibyte character does not work
properly. (Yasuhiro Matsumoto) properly. (Yasuhiro Matsumoto)
Solution: Undo replacement of K_SPECIAL and CSI characters when executing Solution: Undo replacement of K_SPECIAL and CSI characters when executing
the command. the command.
@@ -7967,7 +7967,7 @@ Files: src/eval.c
Patch 7.2.093 (extra) Patch 7.2.093 (extra)
Problem: Win32: inputdialog() and find/replace dialogs can't handle Problem: Win32: inputdialog() and find/replace dialogs can't handle
multi-byte text. multibyte text.
Solution: Use the wide version of dialog functions when available. (Yanwei Solution: Use the wide version of dialog functions when available. (Yanwei
Jia) Jia)
Files: src/gui_w32.c, src/gui_w48.c Files: src/gui_w32.c, src/gui_w48.c
@@ -8062,8 +8062,8 @@ Solution: Add #ifdef.
Files: src/option.c Files: src/option.c
Patch 7.2.109 Patch 7.2.109
Problem: 'langmap' does not work for multi-byte characters. Problem: 'langmap' does not work for multibyte characters.
Solution: Add a list of mapped multi-byte characters. (based on work by Solution: Add a list of mapped multibyte characters. (based on work by
Konstantin Korikov, Agathoklis Hatzimanikas) Konstantin Korikov, Agathoklis Hatzimanikas)
Files: runtime/doc/options.txt, src/edit.c, src/getchar.c, src/macros.h, Files: runtime/doc/options.txt, src/edit.c, src/getchar.c, src/macros.h,
src/normal.c, src/option.c, src/proto/option.pro, src/window.c src/normal.c, src/option.c, src/proto/option.pro, src/window.c
@@ -8908,7 +8908,7 @@ Solution: Remove _FORTIFY_SOURCE=2 from CFLAGS. (Dominique Pelle)
Files: src/auto/configure, src/configure.in Files: src/auto/configure, src/configure.in
Patch 7.2.252 Patch 7.2.252
Problem: When using a multi-byte 'enc' the 'iskeyword' option cannot Problem: When using a multibyte 'enc' the 'iskeyword' option cannot
contain characters above 128. contain characters above 128.
Solution: Use mb_ptr2char_adv(). Solution: Use mb_ptr2char_adv().
Files: src/charset.c Files: src/charset.c
@@ -9053,7 +9053,7 @@ Files: src/memline.c
Patch 7.2.276 Patch 7.2.276
Problem: Crash when setting 'isprint' to a small bullet. (Raul Coronado) Problem: Crash when setting 'isprint' to a small bullet. (Raul Coronado)
Solution: Check for the character to be < 256. Also make it possible to Solution: Check for the character to be < 256. Also make it possible to
specify a range of multi-byte characters. (Lech Lorens) specify a range of multibyte characters. (Lech Lorens)
Files: src/charset.c Files: src/charset.c
Patch 7.2.277 Patch 7.2.277
@@ -9144,7 +9144,7 @@ Solution: Use utfc_ptr2char_len() rather than utfc_ptr2char(). (Dominique
Files: src/screen.c Files: src/screen.c
Patch 7.2.292 Patch 7.2.292
Problem: Block right-shift doesn't work properly with multi-byte encoding Problem: Block right-shift doesn't work properly with multibyte encoding
and 'list' set. and 'list' set.
Solution: Add the missing "else". (Lech Lorens) Solution: Add the missing "else". (Lech Lorens)
Files: src/ops.c Files: src/ops.c
@@ -9430,7 +9430,7 @@ Files: src/screen.c
Patch 7.2.342 Patch 7.2.342
Problem: Popup menu displayed wrong in 'rightleft' mode when there are Problem: Popup menu displayed wrong in 'rightleft' mode when there are
multi-byte characters. multibyte characters.
Solution: Adjust the column computations. (Dominique Pelle) Solution: Adjust the column computations. (Dominique Pelle)
Files: src/popupmnu.c Files: src/popupmnu.c
@@ -10111,7 +10111,7 @@ Fix compile warnings, esp. for 64-bit systems. (Mike Williams)
Fix: :redir to a dictionary that is changed before ":redir END" causes a Fix: :redir to a dictionary that is changed before ":redir END" causes a
memory access error. memory access error.
Fix: terminal title not properly restored when there are multi-byte Fix: terminal title not properly restored when there are multibyte
characters. (partly by James Vega) characters. (partly by James Vega)
Set 'wrapscan' when checking the .po files. (Mike Williams) Set 'wrapscan' when checking the .po files. (Mike Williams)
@@ -10132,7 +10132,7 @@ Changed readfile() to ignore byte order marks, unless in binary mode.
On MS-Windows completion of shell commands didn't work. On MS-Windows completion of shell commands didn't work.
An unprintable multi-byte character at the start of the screen line caused the An unprintable multibyte character at the start of the screen line caused the
following text to be drawn at the wrong position. following text to be drawn at the wrong position.
Got ml_get errors when using undo with 'virtualedit'. Got ml_get errors when using undo with 'virtualedit'.
@@ -10391,7 +10391,7 @@ Solution: Increase the list reference count. Add a test for undotree()
Files: src/eval.c, src/testdir/Makefile, src/testdir/test61.in Files: src/eval.c, src/testdir/Makefile, src/testdir/test61.in
Patch 7.3.006 Patch 7.3.006
Problem: Can't build some multi-byte code with C89. Problem: Can't build some multibyte code with C89.
Solution: Move code to after declarations. (Joachim Schmitz) Solution: Move code to after declarations. (Joachim Schmitz)
Files: src/mbyte.c, src/spell.c Files: src/mbyte.c, src/spell.c
@@ -11161,7 +11161,7 @@ Solution: Call update_screen() before waiting for input.
Files: src/misc1.c, src/getchar.c Files: src/misc1.c, src/getchar.c
Patch 7.3.138 Patch 7.3.138
Problem: ":com" changes the multi-byte text of :echo. (Dimitar Dimitrov) Problem: ":com" changes the multibyte text of :echo. (Dimitar Dimitrov)
Solution: Search for K_SPECIAL as a byte, not a character. (Ben Schmidt) Solution: Search for K_SPECIAL as a byte, not a character. (Ben Schmidt)
Files: src/ex_docmd.c Files: src/ex_docmd.c
@@ -11486,7 +11486,7 @@ Files: README_extra.txt, src/Make_ro.mak, src/INSTALL, src/Makefile,
src/option.h, src/structs.h, src/version.c, src/pty.c, Filelist src/option.h, src/structs.h, src/version.c, src/pty.c, Filelist
Patch 7.3.192 Patch 7.3.192
Problem: Ex command ":s/ \?/ /g" splits multi-byte characters into bytes. Problem: Ex command ":s/ \?/ /g" splits multibyte characters into bytes.
(Dominique Pelle) (Dominique Pelle)
Solution: Advance over whole character instead of one byte. Solution: Advance over whole character instead of one byte.
Files: src/ex_cmds.c Files: src/ex_cmds.c
@@ -12016,15 +12016,15 @@ Solution: Only restore the cursor position when there is a command line.
Files: src/ex_getln.c Files: src/ex_getln.c
Patch 7.3.283 Patch 7.3.283
Problem: An expression mapping with a multi-byte character containing a Problem: An expression mapping with a multibyte character containing a
0x80 byte gets messed up. (ZyX) 0x80 byte gets messed up. (ZyX)
Solution: Unescape the expression before evaluating it (Yukihiro Nakadaira) Solution: Unescape the expression before evaluating it (Yukihiro Nakadaira)
Files: src/getchar.c Files: src/getchar.c
Patch 7.3.284 Patch 7.3.284
Problem: The str2special() function doesn't handle multi-byte characters Problem: The str2special() function doesn't handle multibyte characters
properly. properly.
Solution: Recognize multi-byte characters. (partly by Vladimir Vichniakov) Solution: Recognize multibyte characters. (partly by Vladimir Vichniakov)
Files: src/getchar.c, src/message.c, src/misc2.c Files: src/getchar.c, src/message.c, src/misc2.c
Patch 7.3.285 (after 7.3.284) Patch 7.3.285 (after 7.3.284)
@@ -12112,7 +12112,7 @@ Solution: Adjust the style. (Elias Diem)
Files: src/gui_photon.c Files: src/gui_photon.c
Patch 7.3.300 Patch 7.3.300
Problem: Python doesn't parse multi-byte argument correctly. Problem: Python doesn't parse multibyte argument correctly.
Solution: Use "t" instead of "s". (lilydjwg) Solution: Use "t" instead of "s". (lilydjwg)
Files: src/if_py_both.h Files: src/if_py_both.h
@@ -12270,7 +12270,7 @@ Files: src/ex_cmds.c
Patch 7.3.328 Patch 7.3.328
Problem: When command line wraps the cursor may be displayed wrong when Problem: When command line wraps the cursor may be displayed wrong when
there are multi-byte characters. there are multibyte characters.
Solution: Position the cursor before drawing the text. (Yasuhiro Matsumoto) Solution: Position the cursor before drawing the text. (Yasuhiro Matsumoto)
Files: src/ex_getln.c Files: src/ex_getln.c
@@ -13377,7 +13377,7 @@ Solution: Move the call to gui_mch_init_check() to after fork(). (Yasuhiro
Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
Patch 7.3.521 Patch 7.3.521
Problem: Using "z=" on a multi-byte character may cause a crash. Problem: Using "z=" on a multibyte character may cause a crash.
Solution: Don't use strlen() on an int pointer. Solution: Don't use strlen() on an int pointer.
Files: src/spell.c Files: src/spell.c
@@ -13475,7 +13475,7 @@ Files: src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
Patch 7.3.539 Patch 7.3.539
Problem: Redrawing a character on the command line does not work properly Problem: Redrawing a character on the command line does not work properly
for multi-byte characters. for multibyte characters.
Solution: Count the number of bytes in a character. (Yukihiro Nakadaira) Solution: Count the number of bytes in a character. (Yukihiro Nakadaira)
Files: src/ex_getln.c Files: src/ex_getln.c
@@ -13854,7 +13854,7 @@ Solution: Add #ifdef for MEMORYSTATUSEX.
Files: src/os_win32.c Files: src/os_win32.c
Patch 7.3.606 Patch 7.3.606
Problem: CTRL-P completion has a problem with multi-byte characters. Problem: CTRL-P completion has a problem with multibyte characters.
Solution: Check for next character being NUL properly. (Yasuhiro Matsumoto) Solution: Check for next character being NUL properly. (Yasuhiro Matsumoto)
Files: src/search.c, src/macros.h Files: src/search.c, src/macros.h
@@ -14190,7 +14190,7 @@ Files: src/ex_docmd.c
Patch 7.3.664 Patch 7.3.664
Problem: Buffer overflow in unescaping text. (Raymond Ko) Problem: Buffer overflow in unescaping text. (Raymond Ko)
Solution: Limit check for multi-byte character to 4 bytes. Solution: Limit check for multibyte character to 4 bytes.
Files: src/mbyte.c Files: src/mbyte.c
Patch 7.3.665 Patch 7.3.665
@@ -14357,8 +14357,8 @@ Solution: Add the shiftwidth() function. (so8res)
Files: runtime/doc/eval.txt, src/eval.c Files: runtime/doc/eval.txt, src/eval.c
Patch 7.3.695 Patch 7.3.695
Problem: Balloon cannot show multi-byte text. Problem: Balloon cannot show multibyte text.
Solution: Properly deal with multi-byte characters. (Dominique Pelle) Solution: Properly deal with multibyte characters. (Dominique Pelle)
Files: src/gui_beval.c, src/ui.c Files: src/gui_beval.c, src/ui.c
Patch 7.3.696 Patch 7.3.696
@@ -14656,7 +14656,7 @@ Files: runtime/doc/eval.txt, src/eval.c, src/proto/screen.pro,
src/testdir/test88.ok, src/testdir/test88.ok,
Patch 7.3.749 Patch 7.3.749
Problem: Python interface doesn't build without the multi-byte feature. Problem: Python interface doesn't build without the multibyte feature.
Solution: Add #ifdef. (Ken Takata) Solution: Add #ifdef. (Ken Takata)
Files: src/if_py_both.h Files: src/if_py_both.h
@@ -14762,7 +14762,7 @@ Solution: Save and restore the cursor position when appropriate. (idea by
Files: src/edit.c Files: src/edit.c
Patch 7.3.769 Patch 7.3.769
Problem: 'matchpairs' does not work with multi-byte characters. Problem: 'matchpairs' does not work with multibyte characters.
Solution: Make it work. (Christian Brabandt) Solution: Make it work. (Christian Brabandt)
Files: src/misc1.c, src/option.c, src/proto/option.pro, src/search.c, Files: src/misc1.c, src/option.c, src/proto/option.pro, src/search.c,
src/testdir/test69.in, src/testdir/test69.ok src/testdir/test69.in, src/testdir/test69.ok
@@ -15182,9 +15182,9 @@ Solution: Add lines for new files.
Files: Filelist Files: Filelist
Patch 7.3.840 Patch 7.3.840
Problem: "\@<!" in regexp does not work correctly with multi-byte Problem: "\@<!" in regexp does not work correctly with multibyte
characters, especially cp932. characters, especially cp932.
Solution: Move column to start of multi-byte character. (Yasuhiro Matsumoto) Solution: Move column to start of multibyte character. (Yasuhiro Matsumoto)
Files: src/regexp.c Files: src/regexp.c
Patch 7.3.841 Patch 7.3.841
@@ -15254,7 +15254,7 @@ Solution: Use Xutf8TextPropertyToTextList(). (Christian Brabandt)
Files: src/ui.c, src/ops.c Files: src/ui.c, src/ops.c
Patch 7.3.853 Patch 7.3.853
Problem: Using "ra" in multiple lines on multi-byte characters leaves a few Problem: Using "ra" in multiple lines on multibyte characters leaves a few
characters not replaced. characters not replaced.
Solution: Adjust the end column only in the last line. (Yasuhiro Matsumoto) Solution: Adjust the end column only in the last line. (Yasuhiro Matsumoto)
Files: src/testdir/test69.in, src/testdir/test69.ok, src/ops.c Files: src/testdir/test69.in, src/testdir/test69.ok, src/ops.c
@@ -15271,7 +15271,7 @@ Solution: Add type casts. (Mike Williams)
Files: src/misc1.c Files: src/misc1.c
Patch 7.3.856 Patch 7.3.856
Problem: When calling system() multi-byte clipboard contents is garbled. Problem: When calling system() multibyte clipboard contents is garbled.
Solution: Save and restore the clipboard contents. (Yukihiro Nakadaira) Solution: Save and restore the clipboard contents. (Yukihiro Nakadaira)
Files: src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro, src/ops.c, Files: src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro, src/ops.c,
src/proto/ops.pro, src/os_unix.c, src/proto/ui.pro, src/ui.c src/proto/ops.pro, src/os_unix.c, src/proto/ui.pro, src/ui.c
@@ -15379,9 +15379,9 @@ Files: src/regexp.c, src/testdir/test79.in, src/testdir/test79.ok,
src/testdir/test80.in, src/testdir/test80.ok src/testdir/test80.in, src/testdir/test80.ok
Patch 7.3.874 Patch 7.3.874
Problem: Comparing file names does not handle multi-byte characters Problem: Comparing file names does not handle multibyte characters
properly. properly.
Solution: Implement multi-byte handling. Solution: Implement multibyte handling.
Files: src/misc1.c, src/misc2.c Files: src/misc1.c, src/misc2.c
Patch 7.3.875 (after 7.3.866) Patch 7.3.875 (after 7.3.866)
@@ -15443,7 +15443,7 @@ Solution: Do not unref list and dict. (Yasuhiro Matsumoto)
Files: src/if_lua.c Files: src/if_lua.c
Patch 7.3.886 Patch 7.3.886
Problem: Can't build with multi-byte on Solaris 10. Problem: Can't build with multibyte on Solaris 10.
Solution: Add #ifdef X_HAVE_UTF8_STRING. (Laurent Blume) Solution: Add #ifdef X_HAVE_UTF8_STRING. (Laurent Blume)
Files: src/ui.c Files: src/ui.c
@@ -15457,7 +15457,7 @@ Files: src/testdir/test94.in, src/testdir/test94.ok,
Patch 7.3.888 Patch 7.3.888
Problem: Filename completion with 'fileignorecase' does not work for Problem: Filename completion with 'fileignorecase' does not work for
multi-byte characters. multibyte characters.
Solution: Make 'fileignorecase' work properly. (Hirohito Higashi) Solution: Make 'fileignorecase' work properly. (Hirohito Higashi)
Files: src/misc2.c Files: src/misc2.c
@@ -15933,7 +15933,7 @@ Files: src/if_py_both.h
Patch 7.3.968 Patch 7.3.968
Problem: Multi-byte support is only available when compiled with "big" Problem: Multi-byte support is only available when compiled with "big"
features. features.
Solution: Include multi-byte by default, with "normal" features. Solution: Include multibyte by default, with "normal" features.
Files: src/feature.h Files: src/feature.h
Patch 7.3.969 Patch 7.3.969
@@ -16009,19 +16009,19 @@ Files: src/regexp_nfa.c
Patch 7.3.980 Patch 7.3.980
Problem: Regexp logs may contain garbage. Character classes don't work Problem: Regexp logs may contain garbage. Character classes don't work
correctly for multi-byte characters. correctly for multibyte characters.
Solution: Check for end of post list. Only use "is" functions for Solution: Check for end of post list. Only use "is" functions for
characters up to 255. (Ken Takata) characters up to 255. (Ken Takata)
Files: src/regexp_nfa.c Files: src/regexp_nfa.c
Patch 7.3.981 Patch 7.3.981
Problem: In the old regexp engine \i, \I, \f and \F don't work on Problem: In the old regexp engine \i, \I, \f and \F don't work on
multi-byte characters. multibyte characters.
Solution: Dereference pointer properly. Solution: Dereference pointer properly.
Files: src/regexp.c, src/testdir/test64.in, src/testdir/test64.ok Files: src/regexp.c, src/testdir/test64.in, src/testdir/test64.ok
Patch 7.3.982 Patch 7.3.982
Problem: In the new regexp engine \p does not work on multi-byte Problem: In the new regexp engine \p does not work on multibyte
characters. characters.
Solution: Don't point to an integer but the characters. Solution: Don't point to an integer but the characters.
Files: src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok Files: src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
@@ -16169,7 +16169,7 @@ Files: src/memfile.c
Patch 7.3.1008 Patch 7.3.1008
Problem: Test 95 fails on MS-Windows. Problem: Test 95 fails on MS-Windows.
Solution: Set 'nomore'. Change \i to \f. Change multi-byte character to Solution: Set 'nomore'. Change \i to \f. Change multibyte character to
something that is not matching \i. (Ken Takata) something that is not matching \i. (Ken Takata)
Files: src/testdir/test95.in, src/testdir/test95.ok Files: src/testdir/test95.in, src/testdir/test95.ok
@@ -16185,7 +16185,7 @@ Solution: Only apply ireg_icombine for composing characters.
Files: src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok Files: src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
Patch 7.3.1011 Patch 7.3.1011
Problem: New regexp engine is inefficient with multi-byte characters. Problem: New regexp engine is inefficient with multibyte characters.
Solution: Handle a character at a time instead of a byte at a time. Also Solution: Handle a character at a time instead of a byte at a time. Also
make \Z partly work. make \Z partly work.
Files: src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok Files: src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
@@ -16313,7 +16313,7 @@ Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok,
src/regexp.h src/regexp.h
Patch 7.3.1034 Patch 7.3.1034
Problem: New regexp code using strange multi-byte code. Problem: New regexp code using strange multibyte code.
Solution: Use the normal code to advance and backup pointers. Solution: Use the normal code to advance and backup pointers.
Files: src/regexp_nfa.c Files: src/regexp_nfa.c

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
*vi_diff.txt* For Vim version 8.2. Last change: 2020 Jun 07 *vi_diff.txt* For Vim version 8.2. Last change: 2020 Aug 15
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -467,7 +467,7 @@ Editing binary files. |edit-binary|
last line in the file. last line in the file.
Multi-language support. |multi-lang| Multi-language support. |multi-lang|
Files in double-byte or multi-byte encodings can be edited. There is Files in double-byte or multibyte encodings can be edited. There is
UTF-8 support to be able to edit various languages at the same time, UTF-8 support to be able to edit various languages at the same time,
without switching fonts. |UTF-8| without switching fonts. |UTF-8|
Messages and menus are available in different languages. Messages and menus are available in different languages.

View File

@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2020 Jul 25 *vim9.txt* For Vim version 8.2. Last change: 2020 Sep 07
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -14,7 +14,7 @@ features in Vim9 script.
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
1 What is Vim9 script? |vim9-script| 1. What is Vim9 script? |vim9-script|
2. Differences |vim9-differences| 2. Differences |vim9-differences|
3. New style functions |fast-functions| 3. New style functions |fast-functions|
4. Types |vim9-types| 4. Types |vim9-types|
@@ -49,6 +49,7 @@ errors are handled.
The Vim9 script syntax and semantics are used in: The Vim9 script syntax and semantics are used in:
- a function defined with the `:def` command - a function defined with the `:def` command
- a script file where the first command is `vim9script` - a script file where the first command is `vim9script`
- an autocommand defined in the context of these
When using `:function` in a Vim9 script file the legacy syntax is used. When using `:function` in a Vim9 script file the legacy syntax is used.
However, this can be confusing and is therefore discouraged. However, this can be confusing and is therefore discouraged.
@@ -70,10 +71,10 @@ comments start with #. >
let count = 0 # number of occurrences let count = 0 # number of occurrences
The reason is that a double quote can also be the start of a string. In many 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 places, especially halfway through an expression with a line break, it's hard
what the meaning is, since both a string and a comment can be followed by to tell what the meaning is, since both a string and a comment can be followed
arbitrary text. To avoid confusion only # comments are recognized. This is by arbitrary text. To avoid confusion only # comments are recognized. This
the same as in shell scripts and Python programs. 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 In Vi # is a command to list text with numbers. In Vim9 script you can use
`:number` for that. > `:number` for that. >
@@ -92,9 +93,13 @@ often 10x to 100x times.
Many errors are already found when compiling, before the function is executed. Many errors are already found when compiling, before the function is executed.
The syntax is strict, to enforce code that is easy to read and understand. 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 Compilation is done when:
`:defcompile` command is encountered in the script where the function was - the function is first called
defined. `:disassemble` also compiles the function. - when the `:defcompile` command is encountered in the script where the
function was defined
- `:disassemble` is used for the function.
- a function that is compiled calls the function or uses it as a function
reference
`:def` has no options like `:function` does: "range", "abort", "dict" or `: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 "closure". A `:def` function always aborts on an error, does not get a range
@@ -104,11 +109,11 @@ The argument types and return type need to be specified. The "any" type can
be used, type checking will then be done at runtime, like with legacy be used, type checking will then be done at runtime, like with legacy
functions. functions.
Arguments are accessed by name, without "a:". There is no "a:" dictionary or Arguments are accessed by name, without "a:", just like any other language.
"a:000" list. Just like any other language. There is no "a:" dictionary or "a:000" list.
Variable arguments are defined as the last argument, with a name and have a 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: > list type, similar to TypeScript. For example, a list of numbers: >
def MyFunc(...itemlist: list<number>) def MyFunc(...itemlist: list<number>)
for item in itemlist for item in itemlist
... ...
@@ -119,11 +124,12 @@ Functions and variables are script-local by default ~
When using `:function` or `:def` to specify a new function at the script level When using `:function` or `:def` to specify a new function at the script level
in a Vim9 script, the function is local to the script, as if "s:" was in a Vim9 script, the function is local to the script, as if "s:" was
prefixed. Using the "s:" prefix is optional. To define or use a global prefixed. Using the "s:" prefix is optional. To define or use a global
function or variable the "g:" prefix must be used. For functions in an function or variable the "g:" prefix should be used. For functions in an
autoload script the "name#" prefix is sufficient. > autoload script the "name#" prefix is sufficient. >
def ThisFunction() # script-local def ThisFunction() # script-local
def s:ThisFunction() # script-local def s:ThisFunction() # script-local
def g:ThatFunction() # global def g:ThatFunction() # global
def ThatFunction() # global if no local ThatFunction()
def scriptname#function() # autoload def scriptname#function() # autoload
When using `:function` or `:def` to specify a new function inside a function, When using `:function` or `:def` to specify a new function inside a function,
@@ -132,18 +138,16 @@ script-local function inside a function. It is possible to define a global
function, using the "g:" prefix. function, using the "g:" prefix.
When referring to a function and no "s:" or "g:" prefix is used, Vim will When referring to a function and no "s:" or "g:" prefix is used, Vim will
search for the function in this order: prefer using a local function (in the function scope, script scope or
- Local to the current scope and outer scopes up to the function scope. imported) before looking for a global function.
- Local to the current script file.
- Imported functions, see `:import`.
In all cases the function must be defined before used. That is when it is In all cases the function must be defined before used. That is when it is
first called or when `:defcompile` causes the call to be compiled. first called or when `:defcompile` causes the call to be compiled.
The result is that functions and variables without a namespace can always be The result is that functions and variables without a namespace can usually be
found in the script, either defined there or imported. Global functions and found in the script, either defined there or imported. Global functions and
variables could be defined anywhere (good luck finding where!). variables could be defined anywhere (good luck finding out where!).
Global functions can be still be defined and deleted at nearly any time. In Global functions can still be defined and deleted at nearly any time. In
Vim9 script script-local functions are defined once when the script is sourced Vim9 script script-local functions are defined once when the script is sourced
and cannot be deleted or replaced. and cannot be deleted or replaced.
@@ -169,7 +173,7 @@ blocks. Once the block ends the variable is no longer accessible: >
else else
let inner = 0 let inner = 0
endif endif
echo inner " Error! echo inner # Error!
The declaration must be done earlier: > The declaration must be done earlier: >
let inner: number let inner: number
@@ -186,14 +190,15 @@ To intentionally avoid a variable being available later, a block can be used:
let temp = 'temp' let temp = 'temp'
... ...
} }
echo temp " Error! echo temp # Error!
An existing variable cannot be assigned to with `:let`, since that implies a An existing variable cannot be assigned to with `:let`, since that implies a
declaration. Global, window, tab, buffer and Vim variables can only be used 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 without `:let`, because they are not really declared, they can also be deleted
deleted with `:unlet`. with `:unlet`.
Variables cannot shadow previously defined variables. Variables and functions cannot shadow previously defined or imported variables
and functions.
Variables may shadow Ex commands, rename the variable if needed. Variables may shadow Ex commands, rename the variable if needed.
Global variables and user defined functions must be prefixed with "g:", also Global variables and user defined functions must be prefixed with "g:", also
@@ -232,16 +237,16 @@ identifier or can't be an Ex command. Examples: >
'foobar'->Process() 'foobar'->Process()
('foobar')->Process() ('foobar')->Process()
In rare case there is ambiguity between a function name and an Ex command, use In the rare case there is ambiguity between a function name and an Ex command,
":" to make clear you want to use the Ex command. For example, there is both prepend ":" to make clear you want to use the Ex command. For example, there
the `:substitute` command and the `substitute()` function. When the line is both the `:substitute` command and the `substitute()` function. When the
starts with `substitute(` this will use the function. Prepend a colon to use line starts with `substitute(` this will use the function. Prepend a colon to
the command instead: > use the command instead: >
:substitute(pattern (replacement ( :substitute(pattern (replacement (
Note that while variables need to be defined before they can be used, 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 functions can be called before being defined. This is required to allow
have cyclic dependencies between functions. It is slightly less efficient, for 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 since the function has to be looked up by name. And a typo in the function
name will only be found when the function is called. name will only be found when the function is called.
@@ -261,8 +266,8 @@ number of arguments and any return type. The function can be defined later.
Automatic line continuation ~ Automatic line continuation ~
In many cases it is obvious that an expression continues on the next line. In In many cases it is obvious that an expression continues on the next line. In
those cases there is no need to prefix the line with a backslash. For those cases there is no need to prefix the line with a backslash
example, when a list spans multiple lines: > |line-continuation|. For example, when a list spans multiple lines: >
let mylist = [ let mylist = [
'one', 'one',
'two', 'two',
@@ -352,10 +357,11 @@ No curly braces expansion ~
|curly-braces-names| cannot be used. |curly-braces-names| cannot be used.
No :xit, :append, :change or :insert ~ No :xit, :t, :append, :change or :insert ~
These commands are too easily confused with local variable names. Instead of These commands are too easily confused with local variable names.
`:x` or `:xit` you can use `:exit`. Instead of `:x` or `:xit` you can use `:exit`.
Instead of `:t` you can use `:copy`.
Comparators ~ Comparators ~
@@ -366,11 +372,11 @@ The 'ignorecase' option is not used for comparators that use strings.
White space ~ White space ~
Vim9 script enforces proper use of white space. This is no longer allowed: > Vim9 script enforces proper use of white space. This is no longer allowed: >
let var=234 " Error! let var=234 # Error!
let var= 234 " Error! let var= 234 # Error!
let var =234 " Error! let var =234 # Error!
There must be white space before and after the "=": > There must be white space before and after the "=": >
let var = 234 " OK let var = 234 # OK
White space must also be put before the # that starts a comment after a White space must also be put before the # that starts a comment after a
command: > command: >
let var = 234# Error! let var = 234# Error!
@@ -380,20 +386,20 @@ White space is required around most operators.
White space is not allowed: White space is not allowed:
- Between a function name and the "(": > - Between a function name and the "(": >
call Func (arg) " Error! call Func (arg) # Error!
call Func call Func
\ (arg) " Error! \ (arg) # Error!
call Func(arg) " OK call Func(arg) # OK
call Func( call Func(
\ arg) " OK \ arg) # OK
call Func( call Func(
\ arg " OK \ arg # OK
\ ) \ )
Conditions and expressions ~ Conditions and expressions ~
Conditions and expression are mostly working like they do in JavaScript. A Conditions and expressions are mostly working like they do in JavaScript. A
difference is made where JavaScript does not work like most people expect. difference is made where JavaScript does not work like most people expect.
Specifically, an empty list is falsey. Specifically, an empty list is falsey.
@@ -425,13 +431,22 @@ The boolean operators "||" and "&&" do not change the value: >
2 && 0 == 0 2 && 0 == 0
[] && 2 == [] [] && 2 == []
When using `..` for string concatenation the arguments are always converted to When using `..` for string concatenation arguments of simple types are always
string. > converted to string. >
'hello ' .. 123 == 'hello 123' 'hello ' .. 123 == 'hello 123'
'hello ' .. v:true == 'hello true' 'hello ' .. v:true == 'hello v:true'
Simple types are string, float, special and bool. For other types |string()|
can be used.
*false* *true*
In Vim9 script one can use "true" for v:true and "false" for v:false. In Vim9 script one can use "true" for v:true and "false" for v:false.
Indexing a string with [idx] or [idx, idx] uses character indexes instead of
byte indexes. Example: >
echo 'bár'[1]
In legacy script this results in the character 0xc3 (an illegal byte), in Vim9
script this results in the string 'á'.
What to watch out for ~ What to watch out for ~
*vim9-gotchas* *vim9-gotchas*
@@ -440,16 +455,21 @@ same time tries to support the legacy Vim commands. Some compromises had to
be made. Here is a summary of what might be unexpected. be made. Here is a summary of what might be unexpected.
Ex command ranges need to be prefixed with a colon. > Ex command ranges need to be prefixed with a colon. >
-> " legacy Vim: shifts the previous line to the right -> # legacy Vim: shifts the previous line to the right
->func() " Vim9: method call in continuation line ->func() # Vim9: method call in continuation line
:-> " Vim9: shifts the previous line to the right :-> # Vim9: shifts the previous line to the right
%s/a/b " legacy Vim: substitute on all lines %s/a/b # legacy Vim: substitute on all lines
x = alongname x = alongname
% another " Vim9: line continuation without a backslash % another # Vim9: line continuation without a backslash
:%s/a/b " Vim9: substitute on all lines :%s/a/b # Vim9: substitute on all lines
'text'->func() " Vim9: method call 'text'->func() # Vim9: method call
:'t " legacy Vim: jump to mark m :'t # legacy Vim: jump to mark m
Some Ex commands can be confused with assignments in Vim9 script: >
g:name = value # assignment
g:pattern:cmd # invalid command - ERROR
:g:pattern:cmd # :global command
Functions defined with `:def` compile the whole function. Legacy functions Functions defined with `:def` compile the whole function. Legacy functions
can bail out, and the following lines are not parsed: > can bail out, and the following lines are not parsed: >
@@ -464,7 +484,7 @@ Vim9 functions are compiled as a whole: >
if !has('feature') if !has('feature')
return return
endif endif
use-feature " May give compilation error use-feature # May give compilation error
enddef enddef
For a workaround, split it in two functions: > For a workaround, split it in two functions: >
func Maybe() func Maybe()
@@ -477,6 +497,18 @@ For a workaround, split it in two functions: >
use-feature use-feature
enddef enddef
endif endif
Or put the unsupported code inside an `if` with a constant expression that
evaluates to false: >
def Maybe()
if has('feature')
use-feature
endif
enddef
Note that for unrecognized commands there is no check for "|" and a following
command. This will give an error for missing `endif`: >
def Maybe()
if has('feature') | use-feature | endif
enddef
============================================================================== ==============================================================================
@@ -485,7 +517,7 @@ For a workaround, split it in two functions: >
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
*:def* *:def*
:def[!] {name}([arguments])[: {return-type} :def[!] {name}([arguments])[: {return-type}]
Define a new function by the name {name}. The body of Define a new function by the name {name}. The body of
the function follows in the next lines, until the the function follows in the next lines, until the
matching `:enddef`. matching `:enddef`.
@@ -524,7 +556,7 @@ If the script the function is defined in is Vim9 script, then script-local
variables can be accessed without the "s:" prefix. They must be defined variables can be accessed without the "s:" prefix. They must be defined
before the function is compiled. If the script the function is defined in is before the function is compiled. If the script the function is defined in is
legacy script, then script-local variables must be accessed with the "s:" legacy script, then script-local variables must be accessed with the "s:"
prefix. prefix and they do not need to exist (they can be deleted any time).
*:defc* *:defcompile* *:defc* *:defcompile*
:defc[ompile] Compile functions defined in the current script that :defc[ompile] Compile functions defined in the current script that
@@ -613,6 +645,8 @@ called in the same way the declaration is the same.
Custom types can be defined with `:type`: > Custom types can be defined with `:type`: >
:type MyList list<string> :type MyList list<string>
Custom types must start with a capital letter, to avoid name clashes with
builtin types added later, similarly to user functions.
{not implemented yet} {not implemented yet}
And classes and interfaces can be used as types: > And classes and interfaces can be used as types: >
@@ -632,13 +666,64 @@ And classes and interfaces can be used as types: >
{not implemented yet} {not implemented yet}
Variable types and type casting *variable-types*
Variables declared in Vim9 script or in a `:def` function have a type, either
specified explicitly or inferred from the initialization.
Global, buffer, window and tab page variables do not have a specific type, the
value can be changed at any time, possibly changing the type. Therefore, in
compiled code the "any" type is assumed.
This can be a problem when the "any" type is undesired and the actual type is
expected to always be the same. For example, when declaring a list: >
let l: list<number> = [1, g:two]
This will give an error, because "g:two" has type "any". To avoid this, use a
type cast: >
let l: list<number> = [1, <number>g:two]
< *type-casting*
The compiled code will then check that "g:two" is a number at runtime and give
an error if it isn't. This is called type casting.
The syntax of a type cast is: "<" {type} ">". There cannot be white space
after the "<" or before the ">" (to avoid them being confused with
smaller-than and bigger-than operators).
The semantics is that, if needed, a runtime type check is performed. The
value is not actually changed. If you need to change the type, e.g. to change
it to a string, use the |string()| function. Or use |str2nr()| to convert a
string to a number.
Type inference *type-inference* Type inference *type-inference*
In general: Whenever the type is clear it can be omitted. For example, when In general: Whenever the type is clear it can be omitted. For example, when
declaring a variable and giving it a value: > declaring a variable and giving it a value: >
let var = 0 " infers number type let var = 0 # infers number type
let var = 'hello' " infers string type let var = 'hello' # infers string type
The type of a list and dictionary comes from the common type of the values.
If the values all have the same type, that type is used for the list or
dictionary. If there is a mix of types, the "any" type is used. >
[1, 2, 3] list<number>
['a', 'b', 'c'] list<string>
[1, 'x', 3] list<any>
Stricter type checking *type-checking*
In legacy Vim script, where a number was expected, a string would be
automatically converted to a number. This was convenient for an actual number
such as "123", but leads to unexpected problems (but no error message) if the
string doesn't start with a number. Quite often this leads to hard-to-find
bugs.
In Vim9 script this has been made stricter. In most places it works just as
before, if the value used matches the expected type. There will sometimes be
an error, thus breaking backwards compatibility. For example:
- Using a number other than 0 or 1 where a boolean is expected. *E1023*
- Using a string value when setting a number options.
- Using a number where a string is expected. *E1024*
============================================================================== ==============================================================================
@@ -651,6 +736,9 @@ A Vim9 script can be written to be imported. This means that everything in
the script is local, unless exported. Those exported items, and only those the script is local, unless exported. Those exported items, and only those
items, can then be imported in another script. items, can then be imported in another script.
You can cheat by using the global namespace explicitly. We will assume here
that you don't do that.
Namespace ~ Namespace ~
*:vim9script* *:vim9* *:vim9script* *:vim9*
@@ -713,6 +801,9 @@ Then you can use "That.EXPORTED_CONST", "That.someValue", etc. You are free
to choose the name "That", but it is highly recommended to use the name of the to choose the name "That", but it is highly recommended to use the name of the
script file to avoid confusion. script file to avoid confusion.
`:import` can also be used in legacy Vim script. The imported items still
become script-local, even when the "s:" prefix is not given.
The script name after `import` can be: The script name after `import` can be:
- A relative path, starting "." or "..". This finds a file relative to the - A relative path, starting "." or "..". This finds a file relative to the
location of the script file itself. This is useful to split up a large location of the script file itself. This is useful to split up a large
@@ -743,7 +834,7 @@ actually needed. A recommended mechanism:
< This goes in .../plugin/anyname.vim. "anyname.vim" can be freely chosen. < This goes in .../plugin/anyname.vim. "anyname.vim" can be freely chosen.
2. In the autocommand script do the actual work. You can import items from 2. In the autoload script do the actual work. You can import items from
other files to split up functionality in appropriate pieces. > other files to split up functionality in appropriate pieces. >
vim9script vim9script
import FilterFunc from "../import/someother.vim" import FilterFunc from "../import/someother.vim"
@@ -762,6 +853,9 @@ actually needed. A recommended mechanism:
... ...
< This goes in .../import/someother.vim. < This goes in .../import/someother.vim.
When compiling a `:def` function and a function in an autoload script is
encountered, the script is not loaded until the `:def` function is called.
Import in legacy Vim script ~ Import in legacy Vim script ~
@@ -775,7 +869,7 @@ namespace will be used for the imported item, even when "s:" is not specified.
The :def command ~ The :def command ~
Plugin writers have asked for a much faster Vim script. Investigation have Plugin writers have asked for a much faster Vim script. Investigations have
shown that keeping the existing semantics of function calls make this close to shown that keeping the existing semantics of function calls make this close to
impossible, because of the overhead involved with calling a function, setting impossible, because of the overhead involved with calling a function, setting
up the local function scope and executing lines. There are many details that up the local function scope and executing lines. There are many details that
@@ -805,7 +899,7 @@ an "add number" instruction can be used, which is faster. The error can be
given at compile time, no error handling is needed at runtime. given at compile time, no error handling is needed at runtime.
The syntax for types is similar to Java, since it is easy to understand and The syntax for types is similar to Java, since it is easy to understand and
widely used. The type names are what was used in Vim before, with some widely used. The type names are what were used in Vim before, with some
additions such as "void" and "bool". additions such as "void" and "bool".
@@ -843,8 +937,8 @@ the well-known parts of legacy Vim script.
Since Vim already uses `:let` and `:const` and optional type checking is Since Vim already uses `:let` and `:const` and optional type checking is
desirable, the JavaScript/TypeScript syntax fits best for variable desirable, the JavaScript/TypeScript syntax fits best for variable
declarations. > declarations: >
const greeting = 'hello' " string type is inferred const greeting = 'hello' # string type is inferred
let name: string let name: string
... ...
name = 'John' name = 'John'
@@ -854,32 +948,40 @@ are doing. Some details are unexpected and can be fixed. For example how the
|| and && operators work. Legacy Vim script: > || and && operators work. Legacy Vim script: >
let result = 44 let result = 44
... ...
return result || 0 " returns 1 return result || 0 # returns 1
Vim9 script works like JavaScript/Typescript, keep the value: > Vim9 script works like JavaScript/TypeScript, keep the value: >
let result = 44 let result = 44
... ...
return result || 0 " returns 44 return result || 0 # returns 44
On the other hand, overloading "+" to use both for addition and string On the other hand, overloading "+" to use both for addition and string
concatenation goes against legacy Vim script and often leads to mistakes. concatenation goes against legacy Vim script and often leads to mistakes.
For that reason we will keep using ".." for string concatenation. Lua also For that reason we will keep using ".." for string concatenation. Lua also
uses ".." this way. uses ".." this way.
There is no intention to completely match TypeScript syntax and semantics. We
just want to take those parts that we can use for Vim and we expect Vim users
are happy with. TypeScript is a complex language with its own advantages and
disadvantages. People used to other languages (Java, Python, etc.) will also
find things in TypeScript that they do not like or do not understand. We'll
try to avoid those things.
Import and Export ~ Import and Export ~
A problem of legacy Vim script is that by default all functions and variables A problem of legacy Vim script is that by default all functions and variables
are global. It is possible to make them script-local, but then they are not are global. It is possible to make them script-local, but then they are not
available in other scripts. available in other scripts. This defies the concept of a package that only
exports selected items and keeps the rest local.
In Vim9 script a mechanism very similar to the Javascript import and export In Vim9 script a mechanism very similar to the JavaScript import and export
mechanism is supported. It is a variant to the existing `:source` command mechanism is supported. It is a variant to the existing `:source` command
that works like one would expect: that works like one would expect:
- Instead of making everything global by default, everything is script-local, - Instead of making everything global by default, everything is script-local,
unless exported. unless exported.
- When importing a script the symbols that are imported are listed, avoiding - When importing a script the symbols that are imported are explicitly listed,
name conflicts and failures if later functionality is added. avoiding name conflicts and failures if functionality is added later.
- The mechanism allows for writing a big, long script with a very clear API: - The mechanism allows for writing a big, long script with a very clear API:
the exported function(s) and class(es). the exported function(s) and class(es).
- By using relative paths loading can be much faster for an import inside of a - By using relative paths loading can be much faster for an import inside of a
@@ -891,27 +993,28 @@ that works like one would expect:
When sourcing a Vim9 script from a legacy script, only the items defined When sourcing a Vim9 script from a legacy script, only the items defined
globally can be used, not the exported items. Alternatives considered: globally can be used, not the exported items. Alternatives considered:
- All the exported items become available as script-local items. This makes - All the exported items become available as script-local items. This makes
it uncontrollable what items get defined. it uncontrollable what items get defined and likely soon leads to trouble.
- Use the exported items and make them global. Disadvantage is that it's then - Use the exported items and make them global. Disadvantage is that it's then
not possible to avoid name clashes in the global namespace. not possible to avoid name clashes in the global namespace.
- Completely disallow sourcing a Vim9 script, require using `:import`. That - Completely disallow sourcing a Vim9 script, require using `:import`. That
makes it difficult to use scripts for testing, or sourcing them from the makes it difficult to use scripts for testing, or sourcing them from the
command line to try them out. command line to try them out.
Note that you can also use `:import` in legacy Vim script, see above.
Classes ~ Classes ~
Vim supports interfaces to Perl, Python, Lua, Tcl and a few others. But Vim supports interfaces to Perl, Python, Lua, Tcl and a few others. But
these have never become widespread. When Vim 9 was designed a decision was these interfaces have never become widespread. When Vim 9 was designed a
made to phase out these interfaces and concentrate on Vim script, while decision was made to phase out these interfaces and concentrate on Vim script,
encouraging plugin authors to write code in any language and run it as an while encouraging plugin authors to write code in any language and run it as
external tool, using jobs and channels. an external tool, using jobs and channels.
Still, using an external tool has disadvantages. An alternative is to convert Still, using an external tool has disadvantages. An alternative is to convert
the tool into Vim script. For that to be possible without too much the tool into Vim script. For that to be possible without too much
translation, and keeping the code fast at the same time, the constructs of the translation, and keeping the code fast at the same time, the constructs of the
tool need to be supported. Since most languages support classes the lack of tool need to be supported. Since most languages support classes the lack of
class support in Vim is then a problem. support for classes in Vim is then a problem.
Previously Vim supported a kind-of object oriented programming by adding Previously Vim supported a kind-of object oriented programming by adding
methods to a dictionary. With some care this could be made to work, but it methods to a dictionary. With some care this could be made to work, but it
@@ -919,7 +1022,7 @@ does not look like real classes. On top of that, it's very slow, because of
the use of dictionaries. the use of dictionaries.
The support of classes in Vim9 script is a "minimal common functionality" of The support of classes in Vim9 script is a "minimal common functionality" of
class support in most languages. It works mostly like Java, which is the most class support in most languages. It works much like Java, which is the most
popular programming language. popular programming language.

View File

@@ -125,7 +125,7 @@ gN Like |gn| but searches backward, like with `N`.
*<LeftMouse>* *<LeftMouse>*
<LeftMouse> Set the current cursor position. If Visual mode is <LeftMouse> Set the current cursor position. If Visual mode is
active it is stopped. Only when 'mouse' option is active it is stopped. Only when 'mouse' option
contains 'n' or 'a'. If the position is within 'so' contains 'n' or 'a'. If the position is within 'so'
lines from the last line on the screen the text is lines from the last line on the screen the text is
scrolled up. If the position is within 'so' lines from scrolled up. If the position is within 'so' lines from
@@ -236,7 +236,7 @@ The objects that can be used are:
is inner sentence |v_is| is inner sentence |v_is|
ap a paragraph (with white space) |v_ap| ap a paragraph (with white space) |v_ap|
ip inner paragraph |v_ip| ip inner paragraph |v_ip|
ab a () block (with parenthesis) |v_ab| ab a () block (with parentheses) |v_ab|
ib inner () block |v_ib| ib inner () block |v_ib|
aB a {} block (with braces) |v_aB| aB a {} block (with braces) |v_aB|
iB inner {} block |v_iB| iB inner {} block |v_iB|

View File

@@ -1,4 +1,4 @@
*windows.txt* For Vim version 8.2. Last change: 2020 May 10 *windows.txt* For Vim version 8.2. Last change: 2020 Sep 02
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -955,12 +955,12 @@ CTRL-W g } *CTRL-W_g}*
cursor. This is less clever than using |:ptag|, but you don't cursor. This is less clever than using |:ptag|, but you don't
need a tags file and it will also find matches in system need a tags file and it will also find matches in system
include files. Example: > include files. Example: >
:au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>") :au! CursorHold *.[ch] ++nested exe "silent! psearch " . expand("<cword>")
< Warning: This can be slow. < Warning: This can be slow.
Example *CursorHold-example* > Example *CursorHold-example* >
:au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>") :au! CursorHold *.[ch] ++nested exe "silent! ptag " . expand("<cword>")
This will cause a ":ptag" to be executed for the keyword under the cursor, This will cause a ":ptag" to be executed for the keyword under the cursor,
when the cursor hasn't moved for the time set with 'updatetime'. The "nested" when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
@@ -973,7 +973,7 @@ be found. Also see |CursorHold|. To disable this again: >
A nice addition is to highlight the found tag, avoid the ":ptag" when there A nice addition is to highlight the found tag, avoid the ":ptag" when there
is no word under the cursor, and a few other things: > is no word under the cursor, and a few other things: >
:au! CursorHold *.[ch] nested call PreviewWord() :au! CursorHold *.[ch] ++nested call PreviewWord()
:func PreviewWord() :func PreviewWord()
: if &previewwindow " don't do this in the preview window : if &previewwindow " don't do this in the preview window
: return : return
@@ -1112,7 +1112,9 @@ list of buffers. |unlisted-buffer|
< <
*:bad* *:badd* *:bad* *:badd*
:bad[d] [+lnum] {fname} :bad[d] [+lnum] {fname}
Add file name {fname} to the buffer list, without loading it. Add file name {fname} to the buffer list, without loading it,
if it wasn't listed yet. If the buffer was previously
deleted, not wiped, it will be made listed again.
If "lnum" is specified, the cursor will be positioned at that If "lnum" is specified, the cursor will be positioned at that
line when the buffer is first entered. Note that other line when the buffer is first entered. Note that other
commands after the + will be ignored. commands after the + will be ignored.

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types " Vim support file to detect file types
" "
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Jun 25 " Last Change: 2020 Aug 04
" Listen very carefully, I will say this only once " Listen very carefully, I will say this only once
if exists("did_load_filetypes") if exists("did_load_filetypes")
@@ -184,7 +184,7 @@ au BufNewFile,BufRead *.at setf m4
au BufNewFile,BufRead *.ave setf ave au BufNewFile,BufRead *.ave setf ave
" Awk " Awk
au BufNewFile,BufRead *.awk setf awk au BufNewFile,BufRead *.awk,*.gawk setf awk
" B " B
au BufNewFile,BufRead *.mch,*.ref,*.imp setf b au BufNewFile,BufRead *.mch,*.ref,*.imp setf b
@@ -240,10 +240,10 @@ au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old setf xml
au BufNewFile,BufRead *bsd,*.bsdl setf bsdl au BufNewFile,BufRead *bsd,*.bsdl setf bsdl
" Bazel (http://bazel.io) " Bazel (http://bazel.io)
autocmd BufRead,BufNewFile *.bzl,WORKSPACE,BUILD.bazel setf bzl autocmd BufRead,BufNewFile *.bzl,*.bazel,WORKSPACE setf bzl
if has("fname_case") if has("fname_case")
" There is another check for BUILD further below. " There is another check for BUILD further below.
autocmd BufRead,BufNewFile BUILD setf bzl autocmd BufRead,BufNewFile *.BUILD,BUILD setf bzl
endif endif
" C or lpc " C or lpc
@@ -1093,6 +1093,9 @@ au BufNewFile,BufRead .netrc setf netrc
" Ninja file " Ninja file
au BufNewFile,BufRead *.ninja setf ninja au BufNewFile,BufRead *.ninja setf ninja
" NPM RC file
au BufNewFile,BufRead npmrc,.npmrc setf dosini
" Novell netware batch files " Novell netware batch files
au BufNewFile,BufRead *.ncf setf ncf au BufNewFile,BufRead *.ncf setf ncf
@@ -1199,6 +1202,9 @@ au BufNewFile,BufRead *.pod6 setf pod6
" Also .ctp for Cake template file " Also .ctp for Cake template file
au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php
" PHP config
au BufNewFile,BufRead php.ini,php.ini-* setf dosini
" Pike and Cmod " Pike and Cmod
au BufNewFile,BufRead *.pike,*.pmod setf pike au BufNewFile,BufRead *.pike,*.pmod setf pike
au BufNewFile,BufRead *.cmod setf cmod au BufNewFile,BufRead *.cmod setf cmod
@@ -2036,7 +2042,7 @@ au BufNewFile,BufRead bzr_log.* setf bzr
" Bazel build file " Bazel build file
if !has("fname_case") if !has("fname_case")
au BufNewFile,BufRead BUILD setf bzl au BufNewFile,BufRead *.BUILD,BUILD setf bzl
endif endif
" BIND zone " BIND zone

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