Compare commits

...

224 Commits

Author SHA1 Message Date
Yee Cheng Chin
a77670726e patch 9.0.1458: buffer overflow when expanding long file name
Problem:    Buffer overflow when expanding long file name.
Solution:   Use a larger buffer and avoid overflowing it. (Yee Cheng Chin,
            closes #12201)
2023-04-16 20:13:12 +01:00
Bram Moolenaar
ceff9cd1bb patch 9.0.1457: no regression test for what patch 9.0.1333 fixes
Problem:    No regression test for what patch 9.0.1333 fixes.
Solution:   Extend existing test to cover the fixed problem. (issue #11930)
2023-04-16 17:17:37 +01:00
zeertzjq
657b31fa3b patch 9.0.1456: shortmess test depends on order of test execution
Problem:    Shortmess test depends on order of test execution.
Solution:   Clear messages. (closes #12264)
2023-04-15 21:28:02 +01:00
Ben Jackson
732d69e191 patch 9.0.1455: C++ 20 modules are not recognized
Problem:    C++ 20 modules are not recognized.
Solution:   Add patterns to recognize C++ 20 modules as "cpp". (Ben Jackson,
            closes #12261)
2023-04-15 18:17:17 +01:00
ichizok
7e5fe38efc patch 9.0.1454: code indenting is confused by macros
Problem:    Code indenting is confused by macros.
Solution:   Put semicolon after the macros instead of inside. (Ozaki Kiichi,
            closes #12257)
2023-04-15 13:17:50 +01:00
Dominique Pelle
b49dfd0cf2 patch 9.0.1453: typos in source code and tests
Problem:    Typos in source code and tests.
Solution:   Fi the typos. (Dominique Pellé, closes #12217)
2023-04-14 21:54:25 +01:00
zeertzjq
b7f6f93475 patch 9.0.1452: code using EVAL_CONSTANT is dead, it is never set
Problem:    Code using EVAL_CONSTANT is dead, it is never set.
Solution:   Remove EVAL_CONSTANT. (closes #12252)
2023-04-13 22:12:50 +01:00
Luuk van Baal
aa7f25ebf1 patch 9.0.1451: unnecessary redrawing when 'showcmdloc' is not "last"
Problem:    Unnecessary redrawing when 'showcmdloc' is not "last".
Solution:   Redraw later when "showcmd_is_clear" is set. (Luuk van Baal,
            closes #12260)
2023-04-13 21:47:38 +01:00
Bram Moolenaar
08210f8def patch 9.0.1450: MacOS: building fails if clock_gettime() is not available
Problem:    MacOS: building fails if clock_gettime() is not available.
Solution:   Add a configure check for clock_gettime(). (closes #12242)
2023-04-13 19:15:54 +01:00
Bram Moolenaar
ff6c230051 patch 9.0.1449: test for prompt buffer is flaky
Problem:    Test for prompt buffer is flaky.
Solution:   Use WaitForAssert() instead of TermWait(). (Ozaki Kiichi,
            closes #12247)
2023-04-13 17:32:23 +01:00
ichizok
d76670fc0d patch 9.0.1448: diff test fails on MacOS 13
Problem:    Diff test fails on MacOS 13.
Solution:   Install GNU diffutils. (Ozaki Kiichi, closes #12258)
2023-04-13 17:23:45 +01:00
zeertzjq
474891bc89 patch 9.0.1447: condition is always true
Problem:    Condition is always true.
Solution:   Remove the useless condition. (closes #12253)
2023-04-12 21:36:03 +01:00
zeertzjq
5299c0933f patch 9.0.1446: unnecessary checks for the "skip" flag when skipping
Problem:    Unnecessary checks for the "skip" flag when skipping.
Solution:   Remove the unnecessary checks. (closes #12254)
2023-04-12 20:48:16 +01:00
Bram Moolenaar
01967f5b10 patch 9.0.1445: openSUSE: configure doesn't find the Motif library
Problem:    openSUSE: configure doesn't find the Motif library. (Tony
            Mechelynck)
Solution:   Also search in /usr/lib64.
2023-04-12 16:24:03 +01:00
zeertzjq
ac6cd31afc patch 9.0.1444: crash when passing NULL to setcmdline()
Problem:    Crash when passing NULL to setcmdline(). (Andreas Louv)
Solution:   Use tv_get_string() instead of using v_string directly.
            (closes #12231, closes #12227)
2023-04-12 16:21:14 +01:00
Bram Moolenaar
05a627c3d4 patch 9.0.1443: ending Insert mode when accessing a hidden prompt buffer
Problem:    Ending Insert mode when accessing a hidden prompt buffer.
Solution:   Don't stop Insert mode when it was active before. (closes #12237)
2023-04-09 22:01:31 +01:00
zeertzjq
bfc7cbd1d4 patch 9.0.1442: mapset() does not restore non-script context
Problem:    mapset() does not restore non-script context.
Solution:   Also accept negative sid. (closes #12132)
2023-04-07 22:09:46 +01:00
Yee Cheng Chin
b6ebe5af74 patch 9.0.1441: MacOS: Python 3 using framework do not set dll name properly
Problem:    MacOS: Python 3 using framework do not set dll name properly.
Solution:   Use the framework prefix. (Yee Cheng Chin, closes #12189)
2023-04-05 18:24:50 +01:00
Bram Moolenaar
23a971da50 patch 9.0.1440: "rvim" can execute a shell through :diffpatch
Problem:    "rvim" can execute a shell through :diffpatch.
Solution:   Disallow the shell "patch" command.
2023-04-04 22:04:53 +01:00
orbital
cde8de0345 patch 9.0.1439: start Insert mode when accessing a hidden prompt buffer
Problem:    Start Insert mode when accessing a hidden prompt buffer.
Solution:   Call leaving_window() in aucmd_restbuf(). (Thorben Tröbst,
            closes #12148, closes #12147)
2023-04-02 22:05:13 +01:00
Johan Kotlinski
065088d554 patch 9.0.1438: .fs files are falsely recognized as forth files
Problem:    .fs files are falsely recognized as forth files.
Solution:   Check 100 lines for something that looks like forth. (Johan
            Kotlinski, closes #12219, closes #11988)
2023-04-02 20:29:38 +01:00
Bram Moolenaar
3cdd799951 patch 9.0.1437: test fails with different error number
Problem:    Test fails with different error number.
Solution:   Adjust the expected error.
2023-04-01 22:24:18 +01:00
Bram Moolenaar
2ed57ac367 patch 9.0.1436: cannot compare a typed variable with v:none
Problem:    Cannot compare a typed variable with v:none.
Solution:   Allow for "x is v:none" and "x isnot v:none". (issue #12194)
2023-04-01 22:05:38 +01:00
Bram Moolenaar
38d867f041 patch 9.0.1435: scrolling too many lines when 'wrap' and 'diff' are set
Problem:    Scrolling too many lines when 'wrap' and 'diff' are set.
Solution:   Only scroll by screenlines for 'diff' when 'wrap' is not set.
            (closes #12211)
2023-04-01 19:54:40 +01:00
zeertzjq
39c9ec16ea patch 9.0.1434: crash when adding package already in 'runtimepath'
Problem:    Crash when adding package already in 'runtimepath'.
Solution:   Change order for using 'runtimepath' entries. (closes #12215)
2023-04-01 13:52:03 +01:00
Bram Moolenaar
869113f376 patch 9.0.1433: on some systems the Lua library is not found
Problem:    On some systems the Lua library is not found.
Solution:   Check if a subdirectory for Lua exists.  (closes #4475)
2023-03-31 21:29:00 +01:00
Bram Moolenaar
6ac2e4392a patch 9.0.1432: completion popup in wrong position with virtual text "above"
Problem:    Completion popup in wrong position with virtual text "above".
Solution:   Adjust the column. (closes #12210)
2023-03-31 19:32:29 +01:00
zeertzjq
2d68b722e3 patch 9.0.1431: getscriptinfo() loops even when specific SID is given
Problem:    getscriptinfo() loops even when specific SID is given.
Solution:   Only loop when needed.  Give a clearer error message.
            (closes #12207)
2023-03-30 21:50:37 +01:00
Mathias Jean Johansen
6400203517 patch 9.0.1430: Livebook files are not recognized
Problem:    Livebook files are not recognized.
Solution:   Add a pattern for Livebook files. (Mathias Jean Johansen,
            closes #12203)
2023-03-28 21:28:36 +01:00
Bram Moolenaar
1a08a3e2a5 patch 9.0.1429: invalid memory access when ending insert mode
Problem:    Invalid memory access when ending insert mode.
Solution:   Check if the insert_skip value is valid.
2023-03-26 21:27:24 +01:00
Bram Moolenaar
c174c2e58c patch 9.0.1428: cursor in wrong position when leaving insert mode
Problem:    Cursor in wrong position when leaving insert mode.
Solution:   Update the w_valid flags.  Position the cursor also when not
            redrawing. (closes #12137)
2023-03-25 20:06:49 +00:00
Bram Moolenaar
1f76138ff1 patch 9.0.1427: warning for uninitialized variable
Problem:    Warning for uninitialized variable. (Tony Mechelynck)
Solution:   Add #ifdef.
2023-03-25 11:31:32 +00:00
Virginia Senioria
99e4ab2a1e patch 9.0.1426: indent wrong after "export namespace" in C++
Problem:    Indent wrong after "export namespace" in C++.
Solution:   Skip over "inline" and "export" in any order. (Virginia Senioria,
            closes #12134, closes #12133)
2023-03-24 19:25:06 +00:00
Amaan Qureshi
3ea62381c5 patch 9.0.1425: "wat" and "wast" files are one filetype
Problem:    "wat" and "wast" files are one filetype.
Solution:   Add a separate filetype for "wat" files. (Amaan Qureshi,
            closes #12165)
2023-03-23 15:45:46 +00:00
Bram Moolenaar
7ac36130e0 patch 9.0.1424: unused macros are defined
Problem:    Unused macros are defined.
Solution:   Remove the unused macros.
2023-03-22 22:03:16 +00:00
Amaan Qureshi
890c772036 patch 9.0.1423: WebAssembly Interface Type files are not recognized
Problem:    WebAssembly Interface Type files are not recognized.
Solution:   Add a pattern for WIT files. (Amaan Qureshi, closes #12173)
2023-03-21 22:03:15 +00:00
Amaan Qureshi
d0639d717b patch 9.0.1422: Sage files are not recognized
Problem:    Sage files are not recognized.
Solution:   Add a pattern for Sage files. (Amaan Qureshi, closes #12176)
2023-03-21 21:31:55 +00:00
Amaan Qureshi
8aa2a37f89 patch 9.0.1421: Nu files are not recognized
Problem:    Nu files are not recognized.
Solution:   Add a pattern for Nu files. (Amaan Qureshi, closes #12172)
2023-03-21 21:28:06 +00:00
Bram Moolenaar
aa26153b6c patch 9.0.1420: build failure because SIZE_MAX is not defined
Problem:    Build failure because SIZE_MAX is not defined.
Solution:   Define SIZE_MAX when missing. (John Marriott)
2023-03-21 20:04:58 +00:00
Amaan Qureshi
4a5c39fc52 patch 9.0.1419: Lean files are not recognized
Problem:    Lean files are not recognized.
Solution:   Add a pattern for Lean files. (Amaan Qureshi, closes #12177)
2023-03-21 19:57:33 +00:00
Yee Cheng Chin
5fedb8a5ab patch 9.0.1418: the included xdiff code is a bit outdated
Problem:    The included xdiff code is a bit outdated.
Solution:   Sync with the latest git xdiff code. (Yee Cheng Chin,
            closes #12181)
2023-03-20 17:30:52 +00:00
Amaan Qureshi
a1fa8b3ac2 patch 9.0.1417: ESDL files are not recognized
Problem:    ESDL files are not recognized.
Solution:   Add a pattern for ESDL files. (Amaan Qureshi, closes #12174)
2023-03-19 21:57:07 +00:00
Ernie Rael
e6d40dcdc7 patch 9.0.1416: crash when collection is modified when using filter()
Problem:    Crash when collection is modified when using filter().
Solution:   Lock the list/dict/blob. (Ernie Rael, closes #12183)
2023-03-19 21:23:38 +00:00
Amaan Qureshi
7c4516fe93 patch 9.0.1415: Crystal files are not recognized
Problem:    Crystal files are not recognized.
Solution:   Add a pattern for Crystal files. (Amaan Qureshi, closes #12175)
2023-03-19 20:43:26 +00:00
Bram Moolenaar
ea83c19462 patch 9.0.1414: <M-S-x> in Kitty does not use the Shift modifier
Problem:    <M-S-x> in Kitty does not use the Shift modifier.
Solution:   Apply the Shift modifier to ASCII letters. (closes #11913)
2023-03-18 17:22:46 +00:00
Bram Moolenaar
2a003177eb patch 9.0.1413: compiler warning for unused variable
Problem:    Compiler warning for unused variable.
Solution:   Move variable declaration. (John Marriott)
2023-03-17 18:50:48 +00:00
Amaan Qureshi
6e377eca8d patch 9.0.1412: Pony files are not recognized
Problem:    Pony files are not recognized.
Solution:   Add a pattern for Pony files. (Amaan Qureshi, closes #12155)
2023-03-17 18:42:58 +00:00
Ernie Rael
076de79ad8 patch 9.0.1411: accuracy of profiling is not optimal
Problem:    Accuracy of profiling is not optimal.
Solution:   Use CLOCK_MONOTONIC if possible. (Ernie Rael, closes #12129)
2023-03-16 21:43:15 +00:00
Yee Cheng Chin
16110ccf11 patch 9.0.1410: MacOS: sed fails on .po files
Problem:    MacOS: sed fails on .po files.
Solution:   Set $LANG to "C". (Yee Cheng Chin, closes #12153)
2023-03-16 21:04:31 +00:00
Gabriel Kakizaki
d11ac403db patch 9.0.1409: racket files are recognized as scheme
Problem:    Racket files are recognized as scheme.
Solution:   Recognize rackets files separately. (Gabriel Kakizaki,
            closes #12164, closes #12162)
2023-03-16 20:13:29 +00:00
Amaan Qureshi
1505bef5c4 patch 9.0.1408: QMLdir files are not recognized
Problem:    QMLdir files are not recognized.
Solution:   Add a pattern for QMLdir files. (Amaan Qureshi, closes #12161)
2023-03-16 19:30:44 +00:00
Amaan Qureshi
b8ef029ee4 patch 9.0.1407: TableGen files are not recognized
Problem:    TableGen files are not recognized.
Solution:   Add a pattern for TableGen files. (Amaan Qureshi, closes #12156)
2023-03-16 15:54:18 +00:00
Andreas Louv
e202ec8a0c patch 9.0.1406: ILE RPG files are not recognized
Problem:    ILE RPG files are not recognized.
Solution:   Add patterns for ILE RPG files. (Andreas Louv, issue #12152)
2023-03-16 12:26:51 +00:00
Bram Moolenaar
14338024c1 patch 9.0.1405: missing check for out-of-memory
Problem:    Missing check for out-of-memory.
Solution:   Check for alloc() returning NULL pointer. (closes #12149)
2023-03-15 22:05:44 +00:00
Bram Moolenaar
e638acc927 patch 9.0.1404: compilation error with some compilers
Problem:    Compilation error with some compilers.
Solution:   Adjust array initialization. (John Marriott)
2023-03-15 17:08:51 +00:00
Dominique Pelle
e764d1b421 patch 9.0.1403: unused variables and functions
Problem:    Unused variables and functions.
Solution:   Delete items and adjust #ifdefs. (Dominique Pellé, closes #12145)
2023-03-12 21:20:59 +00:00
Bram Moolenaar
d13dd30240 patch 9.0.1402: crash when using null_class
Problem:    Crash when using null_class.
Solution:   Give an error when trying to use a null class.
2023-03-11 20:56:35 +00:00
zeertzjq
c481ad38f0 patch 9.0.1401: condition is always true
Problem:    Condition is always true.
Solution:   Remove the condition. (closes #12139)
2023-03-11 16:18:51 +00:00
Bram Moolenaar
5145c9a829 patch 9.0.1400: find_file_in_path() is not reentrant
Problem:    find_file_in_path() is not reentrant.
Solution:   Instead of global variables pass pointers to the functions.
            (closes #12093)
2023-03-11 13:55:53 +00:00
lagygoill
4df0772a41 patch 9.0.1399: highlight test script has a few problems
Problem:    Highlight test script has a few problems.
Solution:   Rewrite the script in Vim9 syntax. (closes #10379)
2023-03-10 18:37:11 +00:00
Bram Moolenaar
c0bdbfb2ee patch 9.0.1398: profile test repeats the headers many times
Problem:    Profile test repeats the headers many times.
Solution:   Put the headers in script variables.
2023-03-10 18:28:12 +00:00
Gianmaria Bajo
6a7c774920 patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Problem:    Highlight for popupmenu kind and extra cannot be set.
Solution:   Add PmenuKind, PmenuKindSel, PmenuExtra and PmenuExtraSel
            highlight groups and use them. (Gianmaria Bajo, closes #12114)
2023-03-10 16:35:53 +00:00
Bram Moolenaar
be19d78c3d patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Problem:    sort(list, 'N') does not work in Vim9 script context.
Solution:   Convert string to number without giving an error. (closes #12061)
2023-03-09 22:06:49 +00:00
Amaan Qureshi
638388b8ef patch 9.0.1395: Odin files are not recognized
Problem:    Odin files are not recognized.
Solution:   Add a pattern for Odin files. (Amaan Qureshi, closes #12122)
2023-03-08 20:35:17 +00:00
Amaan Qureshi
cde1f8714e patch 9.0.1394: Unx Tal files are not recognized
Problem:    Unx Tal files are not recognized.
Solution:   Add a pattern for Unx Tal files. (Amaan Qureshi, closes #12117)
2023-03-08 19:55:50 +00:00
Amaan Qureshi
ff226d49fe patch 9.0.1393: Cairo files are not recognized
Problem:    Cairo files are not recognized.
Solution:   Add a pattern for Cairo files. (Amaan Qureshi, closes #12118)
2023-03-08 16:39:21 +00:00
Bram Moolenaar
7ac5023a5f patch 9.0.1392: using NULL pointer with nested :open command
Problem:    Using NULL pointer with nested :open command.
Solution:   Check that ccline.cmdbuff is not NULL.
2023-03-07 21:05:04 +00:00
Yegappan Lakshmanan
960dcbd098 patch 9.0.1391: "clear" macros are not always used
Problem:    "clear" macros are not always used.
Solution:   Use ALLOC_ONE, VIM_CLEAR, CLEAR_POINTER and CLEAR_FIELD in more
            places. (Yegappan Lakshmanan, closes #12104)
2023-03-07 17:45:11 +00:00
Yegappan Lakshmanan
14113fdf9c patch 9.0.1390: FOR_ALL_ macros are defined in an unexpected file
Problem:    FOR_ALL_ macros are defined in an unexpected file.
Solution:   Move FOR_ALL_ macros to macros.h.  Add FOR_ALL_HASHTAB_ITEMS.
            (Yegappan Lakshmanan, closes #12109)
2023-03-07 17:13:51 +00:00
=?UTF-8?q?Ola=20S=C3=B6der?=
663ee88a82 patch 9.0.1389: Amiga: a couple of include files are included twice
Problem:    Amiga: a couple of include files are included twice.
Solution:   Remove duplicate includes. (Ola Söder, closes #12106)
2023-03-07 15:30:50 +00:00
=?UTF-8?q?Ola=20S=C3=B6der?=
f06c4a7a1d patch 9.0.1388: Amiga: not all builds use gethostname()
Problem:    Amiga: not all builds use gethostname().
Solution:   Use gethostname() for all builds except AROS. (Ola Söder,
            closes #12107)
2023-03-06 20:36:55 +00:00
Christian Brabandt
cf3c1ca276 patch 9.0.1387: scrollbar test sporadically fails
Problem:    Scrollbar test sporadically fails.
Solution:   Mark the scrollbar test as flaky. (Christian Brabandt,
            closes #12113)
2023-03-06 15:29:29 +00:00
zeertzjq
30585e03a7 patch 9.0.1386: options test fails with some window width
Problem:    Options test fails with some window width.
Solution:   Adjust what text the test checks with. (closes #12111)
2023-03-06 08:10:04 +00:00
zeertzjq
f86dea8119 patch 9.0.1385: g'Esc is considered an error
Problem:    g'Esc is considered an error.
Solution:   Make g'Esc silently abandon the command. (closes #12110)
2023-03-05 21:15:06 +00:00
Philip H
b0b6b8b07e patch 9.0.1384: setting HOMEBREW_NO_AUTO_UPDATE is not needed with version 4
Problem:    Setting HOMEBREW_NO_AUTO_UPDATE is not needed with Homebew version
            4.
Solution:   Remove setting HOMEBREW_NO_AUTO_UPDATE. (closes #12008)
2023-03-05 20:56:34 +00:00
Bram Moolenaar
4390d872b6 patch 9.0.1383: xxd: combination of little endian and cols fails
Problem:    xxd: combination of little endian and cols fails. (Aapo
            Rantalainen)
Solution:   Round up the space taken by the hex output. (closes #12097)
2023-03-05 20:17:39 +00:00
Bram Moolenaar
c142d6513e patch 9.0.1382: failing test for strptime() doesn't show returned value
Problem:    Failing test for strptime() doesn't show returned value.
Solution:   Use assert_equal() instead of assert_true().
2023-03-05 19:27:49 +00:00
=?UTF-8?q?Ola=20S=C3=B6der?=
d8742476d1 patch 9.0.1381: ACCESS_ names have a conflict with on some systems
Problem:    ACCESS_ names have a conflict with on some systems.
Solution:   Rename by prepending VIM_. (Ola Söder, closes #12105)
2023-03-05 13:12:32 +00:00
Bram Moolenaar
5fb78c3fa5 patch 9.0.1380: CTRL-X on 2**64 subtracts two
Problem:    CTRL-X on 2**64 subtracts two. (James McCoy)
Solution:   Correct computation for large number. (closes #12103)
2023-03-04 20:47:39 +00:00
Yegappan Lakshmanan
5284b23e14 patch 9.0.1379: functions for handling options are not ordered
Problem:    Functions for handling options are not ordered.
Solution:   Put functions in alphabetical order. (Yegappan Lakshmanan,
            closes #12101)
2023-03-04 19:57:32 +00:00
Bram Moolenaar
c99cbf8f28 patch 9.0.1378: illegal memory access when using virtual editing
Problem:    Illegal memory access when using virtual editing.
Solution:   Make sure "startspaces" is not negative.
2023-03-04 14:13:10 +00:00
Bram Moolenaar
5c6a3c9bad patch 9.0.1377: job_status() may return "dead" if the process parent changed
Problem:    job_status() may return "dead" if the process parent changed.
Solution:   Call mch_process_running() to check if the job is still alive.
2023-03-04 13:23:26 +00:00
Bram Moolenaar
1c73b65229 patch 9.0.1376: accessing invalid memory with put in Visual block mode
Problem:    Accessing invalid memory with put in Visual block mode.
Solution:   Adjust the cursor column if needed.
2023-03-03 21:11:52 +00:00
Ernie Rael
f77a7f704f patch 9.0.1375: crash when getting member of obj of unknown class
Problem:    Crash when getting member of obj of unknown class.
Solution:   Check for NULL class and give an error message. (Ernie Rael,
            closes #12096)
2023-03-03 15:05:30 +00:00
Yegappan Lakshmanan
c727b19e9f patch 9.0.1374: function for setting options not used consistently
Problem:    Function for setting options not used consistently.
Solution:   Use a function for 'encoding' and terminal options. (Yegappan
            Lakshmanan, closes #12099)
2023-03-03 12:26:15 +00:00
h-east
194555c001 patch 9.0.1373: wrong text displayed when using both 'linebreak' and 'list'
Problem:    Wrong text displayed when using both 'linebreak' and 'list'.
Solution:   Only set "c_extra" to NUL when "p_extra" is not empty. (Hirohito
            Higashi, closes #12065)
2023-03-02 18:49:09 +00:00
James McCoy
db1887ce40 patch 9.0.1372: test for 'toolbariconsize' may fail
Problem:    Test for 'toolbariconsize' may fail.
Solution:   Only test 'toolbariconsize' when it is supported. (James McCoy,
            closes #12095)
2023-03-02 18:36:33 +00:00
zeertzjq
440d4cb55b patch 9.0.1371: ballooneval interferes with Insert completion
Problem:    Ballooneval interferes with Insert completion.
Solution:   Ignore mouse-move events when completing. (closes #12094,
            closes #12092)
2023-03-02 17:51:32 +00:00
Bram Moolenaar
c3f971f289 patch 9.0.1370: crash when using a NULL object
Problem:    Crash when using a NULL object. (Ernie Rael)
Solution:   Check for NULL and give an error message. (closes #12083)
2023-03-02 17:38:33 +00:00
Yegappan Lakshmanan
c6ff21e876 patch 9.0.1369: still some "else if" constructs for setting options
Problem:    Still some "else if" constructs for setting options.
Solution:   Add a few more functions for handling options. (Yegappan
            Lakshmanan, closes #12090)
2023-03-02 14:46:48 +00:00
Amaan Qureshi
4ed914b18a patch 9.0.1368: Bass files are not recognized
Problem:    Bass files are not recognized.
Solution:   Add patterns for Bass files. (Amaan Qureshi, closes #12088)
2023-03-02 12:51:18 +00:00
Bram Moolenaar
e0f8691969 patch 9.0.1367: divide by zero in zero-width window
Problem:    Divide by zero in zero-width window.
Solution:   Check the width is positive.
2023-03-01 17:55:31 +00:00
Yegappan Lakshmanan
ad60898aa4 patch 9.0.1366: functions for setting options are in random order
Problem:    Functions for setting options are in random order.
Solution:   Sort functions alphabetically. (Yegappan Lakshmanan,
            closes #12082)
2023-03-01 12:44:06 +00:00
zeertzjq
f0300fc7b8 patch 9.0.1365: dead test code
Problem:    Dead test code.
Solution:   Remove code that depends on Farsi, which has been removed.
            (closes #12084)
2023-02-28 16:02:35 +00:00
Yee Cheng Chin
da77693b17 patch 9.0.1364: build error with older Mac OS
Problem:    Build error with older Mac OS.
Solution:   Adjust #ifdef. (Yee Cheng Chin, closes #12074)
2023-02-28 15:51:23 +00:00
Bram Moolenaar
3f45d67a15 patch 9.0.1363: crash when :def function has :break in skipped block
Problem:    Crash when :def function has :break in skipped block. (Ernie Rael)
Solution:   Don't generate a jump for a skipped :break. (closes #12077)
2023-02-27 22:06:51 +00:00
Bram Moolenaar
99ad3a8bb9 patch 9.0.1362: ml_get error when going to another tab
Problem:    ml_get error when going to another tab. (Daniel J. Perry)
Solution:   Do not call update_topline() if "curwin" is invalid.
            (closes #11907)
2023-02-27 17:18:01 +00:00
Bram Moolenaar
dd60c365cd Update runtime files 2023-02-27 15:49:53 +00:00
zeertzjq
341f3876b3 patch 9.0.1361: extendnew() not sufficiently tested
Problem:    extendnew() not sufficiently tested.
Solution:   Add a few more test cases for extendnew(). (closes #12075)
2023-02-27 14:59:57 +00:00
Amaan Qureshi
80c5b2c0f7 patch 9.0.1360: Cue files are not recognized
Problem:    Cue files are not recognized.
Solution:   Add patterns for Cue files. (Amaan Qureshi, closes #12067)
2023-02-27 14:32:08 +00:00
Yegappan Lakshmanan
5da901bb68 patch 9.0.1359: too many "else if" statements in handling options
Problem:    Too many "else if" statements in handling options.
Solution:   Add more functions for handling option changes. (Yegappan
            Lakshmanan, closes #12060)
2023-02-27 12:47:47 +00:00
Bram Moolenaar
30a8447715 patch 9.0.1358: compilation error with some compilers
Problem:    Compilation error with some compilers.
Solution:   Avoid using "class" as member name.
2023-02-27 08:07:14 +00:00
Bram Moolenaar
c4e1b86cb0 patch 9.0.1357: using null_object results in an internal error
Problem:    Using null_object results in an internal error. (Ernie Rael)
Solution:   Add instructions for pushing an object and class. (closes #12044)
2023-02-26 18:58:23 +00:00
zeertzjq
4f026ea9f1 patch 9.0.1356: cannot cancel "gr" with Esc
Problem:    Cannot cancel "gr" with Esc.
Solution:   Make "gr<Esc>" do nothing. (closes #12064)
2023-02-26 14:47:24 +00:00
Bram Moolenaar
83ae6150bf patch 9.0.1355: no error when declaring a class twice
Problem:    No error when declaring a class twice. (Ernie Rael)
Solution:   Pass different flags when declaring the class. (closes #12057)
2023-02-25 19:59:31 +00:00
Bram Moolenaar
d6a4ea3aa0 patch 9.0.1354: "gr CTRL-G" stays in virtual replace mode
Problem:    "gr CTRL-G" stays in virtual replace mode. (Pierre Ganty)
Solution:   Prepend CTRL-V before control characters. (closes #12045)
2023-02-25 14:24:44 +00:00
Yegappan Lakshmanan
6d611de58c patch 9.0.1353: too many "else if" statements to handle option values
Problem:    Too many "else if" statements to handle option values.
Solution:   Add more functions to handle option value changes. (Yegappan
            Lakshmanan, closes #12058)
2023-02-25 11:59:33 +00:00
K.Takata
a63fd82328 patch 9.0.1352: "ignore" files are outdated
Problem:    "ignore" files are outdated.
Solution:   Update "ignore" files. (Ken Takata, closes #12056)
2023-02-24 17:16:41 +00:00
Amaan Qureshi
def5521752 patch 9.0.1351: Dhall files are not recognized
Problem:    Dhall files are not recognized.
Solution:   Add patterns for Dhall files. (Amaan Qureshi, closes #12052)
2023-02-24 16:01:54 +00:00
Amaan Qureshi
c2254764bc patch 9.0.1350: CPON files are not recognized
Problem:    CPON files are not recognized.
Solution:   Add patterns for CPON files. (Amaan Qureshi, closes #12053)
2023-02-24 12:08:45 +00:00
Bram Moolenaar
3ddb1182b7 patch 9.0.1349: "gr" with a count fails
Problem:    "gr" with a count fails.
Solution:   Break out of the loop only after using the count.
2023-02-23 22:14:37 +00:00
Amaan Qureshi
44e08c1cf8 patch 9.0.1348: Un-grammar files are not recognized
Problem:    Un-grammar files are not recognized.
Solution:   Add patterns for Un-grammar files. (Amaan Qureshi, closes #12034)
2023-02-23 20:31:08 +00:00
Bram Moolenaar
2824d1ee32 patch 9.0.1347: "gr CTRL-O" stays in Insert mode
Problem:    "gr CTRL-O" stays in Insert mode. (Pierre Ganty)
Solution:   Do not set restart_edit when "cmdchar" is 'v'. (closes #12045)
2023-02-23 20:13:04 +00:00
Amaan Qureshi
ca06b30073 patch 9.0.1346: Starlark files are not recognized
Problem:    Starlark files are not recognized.
Solution:   Add patterns for Starlark files. (Amaan Qureshi, closes #12049)
2023-02-23 15:38:49 +00:00
Yegappan Lakshmanan
8ad862a1f9 patch 9.0.1345: too many "else if" statements for handling options
Problem:    Too many "else if" statements for handling options.
Solution:   Add more functions to handle options. (Yegappan Lakshmanan,
            closes #12051)
2023-02-23 15:05:22 +00:00
Bram Moolenaar
a8f0835a6b patch 9.0.1344: check for OSC escape sequence doesn't work
Problem:    Check for OSC escape sequence doesn't work.
Solution:   Fix typo in index.
2023-02-23 13:54:01 +00:00
Johan Mattsson
3451789f58 patch 9.0.1343: check for OSC escape sequence doesn't work
Problem:    Check for OSC escape sequence doesn't work.
Solution:   Move square bracket to the right place. (Johan Mattsson,
            closes #12048)
2023-02-23 12:46:04 +00:00
zhihaoy
3e2d5385ed patch 9.0.1342: MS-Windows: linking may fail with space in directory name
Problem:    MS-Windows: linking may fail with space in directory name.
Solution:   Add quotes. (closes #12050)
2023-02-23 12:36:22 +00:00
K.Takata
4ee083e7f9 patch 9.0.1341: build error with mzscheme but without GUI
Problem:    Build error with mzscheme but without GUI.
Solution:   Adjust #ifdefs. (Ken Takata, closes #12042)  Also fix function
            argument.
2023-02-22 13:14:36 +00:00
Bram Moolenaar
666cb9c530 patch 9.0.1340: Coverity warns for using NULL pointer
Problem:    Coverity warns for using NULL pointer.
Solution:   Check that lhs_type is not NULL.
2023-02-22 12:35:17 +00:00
Bram Moolenaar
38f1ab31fa patch 9.0.1339: no test for :disassemble with class function
Problem:    No test for :disassemble with class function.
Solution:   Add a test.
2023-02-21 20:09:46 +00:00
Bram Moolenaar
99a7c0d89c patch 9.0.1338: :defcompile and :disassemble can't find class method
Problem:    :defcompile and :disassemble can't find class method. (Ernie Rael)
Solution:   Make a class name and class.method name work. (closes #11984)
2023-02-21 19:55:14 +00:00
Amaan Qureshi
cfce5cf542 patch 9.0.1337: yuck files are not recognized
Problem:    Yuck files are not recognized.
Solution:   Add a filetype pattern for yuck files. (Amaan Qureshi,
            closes #12033)
2023-02-21 15:18:50 +00:00
Yegappan Lakshmanan
a23a11b5bf patch 9.0.1336: functions without arguments are not always declared properly
Problem:    Functions without arguments are not always declared properly.
Solution:   Use "(void)" instead of "()". (Yegappan Lakshmanan, closes #12031)
2023-02-21 14:27:41 +00:00
h-east
d950984489 patch 9.0.1335: no test for bad use of spaces in help files
Problem:    No test for bad use of spaces in help files.
Solution:   Add checks for use of spaces in help files.  Ignore intentional
            spaces. (Hirohito Higashi, closes #11952)
2023-02-21 13:33:17 +00:00
Bram Moolenaar
b1e32ac0c9 patch 9.0.1334: using tt_member for the class leads to mistakes
Problem:    Using tt_member for the class leads to mistakes.
Solution:   Add a separate tt_class field.
2023-02-21 12:38:51 +00:00
Bram Moolenaar
938ae280c7 Update runtime files. 2023-02-20 20:44:55 +00:00
Bram Moolenaar
6b066c6d8f patch 9.0.1333: when redo'ing twice <ScriptCmd> may not get the script ID
Problem:    When redo'ing twice <ScriptCmd> may not get the script ID.
Solution:   When "last_used_map" map is not set use "last_used_sid".
            (closes #11930)
2023-02-20 18:44:33 +00:00
zeertzjq
b444ee761a patch 9.0.1332: crash when using buffer-local user command in cmdline window
Problem:    Crash when using buffer-local user command in cmdline window.
            (Karl Yngve Lervåg)
Solution:   Use the right buffer to find the user command. (closes #12030,
            closes #12029)
2023-02-20 15:25:13 +00:00
Pavel Mayorov
e1121b1394 patch 9.0.1331: illegal memory access when using :ball in Visual mode
Problem:    Illegal memory access when using :ball in Visual mode.
Solution:   Stop Visual mode when using :ball. (Pavel Mayorov, closes #11923)
2023-02-20 14:35:20 +00:00
Yegappan Lakshmanan
af93691b53 patch 9.0.1330: handling new value of an option has a long "else if" chain
Problem:    Handling new value of an option has a long "else if" chain.
Solution:   Use a function pointer. (Yegappan Lakshmanan, closes #12015)
2023-02-20 12:16:39 +00:00
zeertzjq
997b8a015c patch 9.0.1329: completion of map includes simplified ones
Problem:    Completion of map includes simplified ones.
Solution:   Do not complete simplified mappings. (closes #12013)
2023-02-19 21:00:31 +00:00
Bram Moolenaar
5b9f57262f patch 9.0.1328: error when using "none" for GUI color is confusing
Problem:    Error when using "none" for GUI color is confusing.
Solution:   Mention that the name should perhaps be "NONE". (closes #1400)
2023-02-19 20:49:38 +00:00
Bram Moolenaar
ea62cee85e patch 9.0.1327: cursor in wrong position below line with virtual text below
Problem:    Cursor in wrong position below line with virtual text below ending
            in multi-byte character.
Solution:   When checking for last character take care of multi-byte
            character.
2023-02-19 18:36:41 +00:00
Bram Moolenaar
a572b936ce patch 9.0.1326: relative line number not updated with virtual text above
Problem:    Relative line number not updated with virtual text above.
Solution:   Adjust the row for the line number for virtual text above.
            (closes #12004)
2023-02-19 14:34:37 +00:00
Bram Moolenaar
f53e065bce patch 9.0.1325: 'colorcolumn' highlight wrong with virtual text above
Problem:    'colorcolumn' highlight wrong with virtual text above.
Solution:   Adjust column of 'colorcolumn' for text propertly. (closes #12004)
2023-02-19 14:16:02 +00:00
Luuk van Baal
441a7a9448 patch 9.0.1324: "gj" and "gk" do not move correctly over a closed fold
Problem:    "gj" and "gk" do not move correctly over a closed fold.
Solution:   Use the same code as used for "j"/"k" to go to the next/previous
            line. (Luuk van Baal, closes #12007)
2023-02-18 20:15:44 +00:00
Bram Moolenaar
3e1ac1443a patch 9.0.1323: build failure with +eval feature
Problem:    Build failure with +eval feature.
Solution:   Add missing part for using funcerror_T.
2023-02-18 19:49:32 +00:00
Bram Moolenaar
2c1c803c7e patch 9.0.1322: crash when indexing "any" which is an object
Problem:    Crash when indexing "any" which is an object.
Solution:   Check the index is a number.  Do not check the member type of an
            object.  (closes #12019)
2023-02-18 18:38:37 +00:00
Bram Moolenaar
d114975b9b patch 9.0.1321: vimscript test fails where using {expr} syntax
Problem:    vimscript test fails where using {expr} syntax.
Solution:   Only return FCERR_FAILED in call_user_func() for Vim9 script.
2023-02-18 15:31:53 +00:00
Bram Moolenaar
0917e86763 patch 9.0.1320: checking the type of a null object causes a crash
Problem:    Checking the type of a null object causes a crash.
Solution:   Don't try to get the class of a null object. (closes #12005)
            Handle error from calling a user function better.
2023-02-18 14:42:44 +00:00
Matthias Queitsch
9de960ace0 patch 9.0.1319: PRQL files are not recognized
Problem:    PRQL files are not recognized.
Solution:   Add a filetype pattern for PRQL files. (Matthias Queitsch,
            closes #12018)
2023-02-18 12:04:37 +00:00
Bram Moolenaar
f2017f255d patch 9.0.1318: code style test fails
Problem:    Code style test fails.
Solution:   Remove trailing white space.
2023-02-17 21:29:57 +00:00
Bram Moolenaar
552bdca781 patch 9.0.1317: crash when using an unset object variable
Problem:    Crash when using an unset object variable.
Solution:   Give an error instead. (closes #12005)
2023-02-17 21:08:50 +00:00
Christopher Plewright
eea0a00811 patch 9.0.1316: MS-Windows: vimfiles dir created with admin group
Problem:    MS-Windows: vimfiles dir created with admin group.
Solution:   Use ShellExecAsUser to create the vimfiles directory. (Christopher
            Plewright, Ken Takata, closes #12000, closes #11888)
2023-02-17 20:04:51 +00:00
zeertzjq
c3a26c6bff patch 9.0.1315: escaping for completion of map command not properly tested
Problem:    Escaping for completion of map command not properly tested.
Solution:   Add a few test cases. (closes #12009)
2023-02-17 16:40:20 +00:00
cero1988
1d87e11a1e patch 9.0.1314: :messages behavior depends on 'fileformat' of current buffer
Problem:    :messages behavior depends on 'fileformat' of current buffer.
Solution:   Pass the buffer pointer to where it is used. (Mirko Ceroni,
            closes #11995)
2023-02-16 15:03:12 +00:00
K.Takata
ce3189d56e patch 9.0.1313: some settings use the current codepage instead of 'encoding'
Problem:    Some settings use the current codepage instead of 'encoding'.
Solution:   Adjust how options are initialized. (Ken Takata, closes #11992)
2023-02-15 19:13:43 +00:00
Luuk van Baal
bc3dc298b3 patch 9.0.1312: Cursor position wrong when splitting window in insert mode
Problem:    Cursor position wrong when splitting window in insert mode.
Solution:   Pass the actual mode to win_fix_cursor(). (Luuk van Baal,
            closes #11999,
2023-02-15 16:45:27 +00:00
Bram Moolenaar
339e114d70 patch 9.0.1311: Coverity warns for using a NULL pointer
Problem:    Coverity warns for using a NULL pointer.
Solution:   Use "empty_option" instead of NULL.
2023-02-15 14:26:25 +00:00
Bram Moolenaar
fdbd14e892 patch 9.0.1310: 'splitkeep' test has failures
Problem:    'splitkeep' test has failures.
Solution:   Adjust expected cursor line position.
2023-02-14 21:56:42 +00:00
Bram Moolenaar
1d6539cf36 patch 9.0.1309: scrolling two lines with even line count and 'scrolloff' set
Problem:    Scrolling two lines with even line count and 'scrolloff' set.
Solution:   Adjust how the topline is computed. (closes #10545)
2023-02-14 17:41:20 +00:00
Yegappan Lakshmanan
1a6476428f patch 9.0.1308: the code for setting options is too complicated
Problem:    The code for setting options is too complicated.
Solution:   Refactor the code for setting options. (Yegappan Lakshmanan,
            closes #11989)
2023-02-14 13:07:18 +00:00
Yegappan Lakshmanan
32ff96ef01 patch 9.0.1307: setting 'formatoptions' with :let doesn't check for errors
Problem:    Setting 'formatoptions' with :let doesn't check for errors.
Solution:   Pass "errbuf" to set_string_option(). (Yegappan Lakshmanan,
            closes #11974, closes #11972)
2023-02-13 16:10:04 +00:00
Bram Moolenaar
5ceb8157bc patch 9.0.1306: no regression test for solved problem of #11959
Problem:    No regression test for solved problem of #11959.
Solution:   Add a test, also with 'list' set. (closes #11959)
2023-02-12 18:11:21 +00:00
Bram Moolenaar
55a27d8ea7 patch 9.0.1305: cursor in wrong line with virtual text above
Problem:    Cursor in wrong line with virtual text above.
Solution:   Count extra line for text property above/below. (closes #11959)
2023-02-12 18:03:57 +00:00
Bram Moolenaar
234c3fab28 patch 9.0.1304: "$" for 'list' option displayed in wrong position
Problem:    "$" for 'list' option displayed in wrong position when there are
            text properties.
Solution:   Adjust logic for order of displayed items. (closes #11959)
2023-02-12 14:42:15 +00:00
qsmodo
094b8473ed patch 9.0.1303: Motif: scrollbar width/height wrong when maximized
Problem:    Motif: scrollbar width/height wrong when maximized.
Solution:   Set the width/height when creating the scrollbar. (closes #11946)
2023-02-11 19:12:57 +00:00
Bram Moolenaar
aab2ead008 patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Problem:    On a Belgian keyboard CTRL-] does not work.
Solution:   Translate CTRL-$ into CTRL-]. (closes #11831)
2023-02-11 16:15:50 +00:00
Bram Moolenaar
9d9a20ee87 patch 9.0.1301: virtual text below empty line not displayed
Problem:    Virtual text below empty line not displayed.
Solution:   Adjust flags and computations. (closes #11959)
2023-02-11 13:49:01 +00:00
Yegappan Lakshmanan
3ec78f973f patch 9.0.1300: 'statusline' only supports one "%=" item
Problem:    'statusline' only supports one "%=" item.
Solution:   Add support for multiple "%=" items. (TJ DeVries, Yegappan
            Lakshmanan, closes #11970, closes #11965)
2023-02-11 11:15:25 +00:00
zeertzjq
412e0e4ed9 patch 9.0.1299: change for triggering incsearch not sufficiently tested
Problem:    Change for triggering incsearch not sufficiently tested.
Solution:   Add a test case.  Simplify the code. (closes #11971)
2023-02-11 10:34:07 +00:00
K.Takata
c4b7dec382 patch 9.0.1298: inserting register on the cmdline does not trigger incsearch
Problem:    Inserting a register on the command line does not trigger
            incsearch or update hlsearch.
Solution:   Have cmdline_insert_reg() return CMDLINE_CHANGED when appropriate
            and handle it correctly. (Ken Takata, closes #11960)
2023-02-10 21:38:44 +00:00
WuerfelDev
962d916435 patch 9.0.1297: wrong value for $LC_CTYPE makes the environ test fail
Problem:    Wrong value for $LC_CTYPE makes the environ test fail.
Solution:   Unset $LC_CTYPE when running tests. (closes #11963)
2023-02-10 20:49:08 +00:00
Bram Moolenaar
094cf9f4d5 patch 9.0.1296: calling an object method with arguments does not work
Problem:    Calling an object method with arguments does not work. (Ernie
            Rael)
Solution:   Take the argument count into account when looking up the object.
            (closes #11911)
2023-02-10 15:52:25 +00:00
Yegappan Lakshmanan
6c41bedeed patch 9.0.1295: the option initialization function is too long
Problem:    The option initialization function is too long.
Solution:   Move code to separate functions. (Yegappan Lakshmanan,
            closes #11966)
2023-02-10 14:50:31 +00:00
Yegappan Lakshmanan
80b817b749 patch 9.0.1294: the set_bool_option() function is too long
Problem:    The set_bool_option() function is too long.
Solution:   Move code to separate functions. (Yegappan Lakshmanan,
            closes #11964)
2023-02-09 22:08:52 +00:00
Yegappan Lakshmanan
0caaf1e465 patch 9.0.1293: the set_num_option() is too long
Problem:    The set_num_option() is too long.
Solution:   Move code to separate functions. (Yegappan Lakshmanan,
            closes #11954)
2023-02-09 12:23:17 +00:00
Bram Moolenaar
313e4724c3 patch 9.0.1292: :defer may call the wrong method for an object
Problem:    :defer may call the wrong method for an object. (Ernie Rael)
Solution:   When en object is from a class that extends or implements, figure
            out the method to call at runtime. (closes #11910)
2023-02-08 20:55:27 +00:00
Amaan Qureshi
6642982bea patch 9.0.1291: Move language files are not recognized
Problem:    Move language files are not recognized.
Solution:   Recognize Move language files. (Amaan Qureshi, closes #11947)
2023-02-07 19:37:32 +00:00
zeertzjq
af9e28a5b8 patch 9.0.1290: CTRL-N and -P on cmdline don't trigger CmdlineChanged
Problem:    CTRL-N and -P on cmdline don't trigger CmdlineChanged.
Solution:   Jump to cmdline_changed instead of cmdline_not_changed.
            (closes #11956)
2023-02-06 20:58:09 +00:00
Philip H
43e234e8b4 patch 9.0.1289: a newer version of clang can be used for CI
Problem:    A newer version of clang can be used for CI.
Solution:   Switch from clang-15 to clang-16. (closes #11577)
2023-02-06 20:22:48 +00:00
Amaan Qureshi
91deac4539 patch 9.0.1288: FunC files are not recognized
Problem:    FunC files are not recognized.
Solution:   Recognize FunC files. (Amaan Qureshi, closes #11949)
2023-02-06 19:32:07 +00:00
Bram Moolenaar
0261e3978e patch 9.0.1287: with the Kitty key protocl Esc with NumLock cannot be mapped
Problem:    With the Kitty key protocl Esc with NumLock cannot be mapped.
Solution:   Also use K_ESC when there is a modifier. (closes #11811)
2023-02-06 17:46:37 +00:00
Bram Moolenaar
546933f497 patch 9.0.1286: Coverity warns for using a NULL pointer
Problem:    Coverity warns for using a NULL pointer.
Solution:   Bail out whan "varp" is NULL.
2023-02-06 16:40:49 +00:00
Bram Moolenaar
a9a6b0323e patch 9.0.1285: various small problems
Problem:    Various small problems.
Solution:   Adjust white space and comments.
2023-02-05 18:00:42 +00:00
Bram Moolenaar
40b4872966 patch 9.0.1284: compiler warnings for uninitialized variables
Problem:    Compiler warnings for uninitialized variables. (Tony Mechelynck)
Solution:   Add variable initializations.
2023-02-05 17:04:50 +00:00
Yegappan Lakshmanan
c72078b631 patch 9.0.1283: the code for setting options is too complicated
Problem:    The code for setting options is too complicated.
Solution:   Refactor the do_set() function. (Yegappan Lakshmanan, Lewis
            Russell, closes #11945)
2023-02-05 16:02:35 +00:00
Amaan Qureshi
c8ef30bc2e patch 9.0.1282: Ron files are not recognized
Problem:    Ron files are not recognized.
Solution:   Recognize Ron files. (Amaan Qureshi, closes #11948)
2023-02-05 14:47:46 +00:00
Janez Podhostnik
cb626a4692 patch 9.0.1281: Cadence files are not recognized
Problem:    Cadence files are not recognized.
Solution:   Recognize Cadence files. (Janez Podhostnik, closes #11951)
2023-02-05 13:01:40 +00:00
Bram Moolenaar
7a1bdaecf2 patch 9.0.1280: inssufficient testing for what 9.0.1265 fixes
Problem:    Inssufficient testing for what 9.0.1265 fixes.
Solution:   Add a couple of test cases. (issue #11885)
2023-02-04 15:45:27 +00:00
Bram Moolenaar
61fdbfa1e3 patch 9.0.1279: display shows lines scrolled down erroneously
Problem:    Display shows lines scrolled down erroneously. (Yishai Lerner)
Solution:   Do not change "wl_lnum" at index zero. (closes #11938)
2023-02-04 13:57:55 +00:00
Amaan Qureshi
4ad8ae8465 patch 9.0.1278: go.work.sum files are not recognized
Problem:    go.work.sum files are not recognized.
Solution:   Recognize go.work.sum files as the gosum filetype. (Amaan Qureshi,
            closes #11940)
2023-02-04 12:12:36 +00:00
zeertzjq
49f0524fb5 patch 9.0.1277: cursor may move with autocmd in Visual mode
Problem:    Cursor may move with autocmd in Visual mode.
Solution:   Restore "VIsual_active" before calling check_cursor().
            (closes #11939)
2023-02-04 10:58:34 +00:00
Bram Moolenaar
4be18e77ff patch 9.0.1276: some mappings with Meta and Shift do not work
Problem:    Some mappings with Meta and Shift do not work.
Solution:   Apply the Shift modifier to the key. (issue #11913)
2023-02-03 12:28:07 +00:00
Yegappan Lakshmanan
78012f55fa patch 9.0.1275: the code for setting options is too complicated
Problem:    The code for setting options is too complicated.
Solution:   Refactor the do_set() function. (Yegappan Lakshmanan, Lewis
            Russell, closes #11932)
2023-02-02 16:34:11 +00:00
Bram Moolenaar
be4e01637e Update runtime files. 2023-02-02 13:59:48 +00:00
Amaan Qureshi
685bf83b73 patch 9.0.1274: FIRRTL files are not recognized
Problem:    FIRRTL files are not recognized.
Solution:   Add a pattern for FIRRTL files. (Amaan Qureshi, closes #11931)
2023-02-02 13:30:13 +00:00
Bram Moolenaar
8f531662e2 patch 9.0.1273: "1v" may select block with wrong size
Problem:    "1v" may select block with wrong size. (Evgeni Chasnovski)
Solution:   Compute "curswant" in the right line. (closes #11925)
2023-02-01 17:33:18 +00:00
zeertzjq
e8d4ae0d11 patch 9.0.1272: typo in pattern for filetype detection
Problem:    Typo in pattern for filetype detection.
Solution:   Fix the typo. (closes #11924)
2023-02-01 15:31:23 +00:00
zeertzjq
1b438a8228 patch 9.0.1271: using sizeof() and subtract array size is tricky
Problem:    Using sizeof() and subtract array size is tricky.
Solution:   Use offsetof() instead. (closes #11926)
2023-02-01 13:11:15 +00:00
zeertzjq
a7d36b7320 patch 9.0.1270: crash when using search stat in narrow screen
Problem:    Crash when using search stat in narrow screen.
Solution:   Check length of message. (closes #11921)
2023-01-31 21:13:38 +00:00
Bram Moolenaar
b40c1de384 patch 9.0.1269: channel test often fails on Mac OS
Problem:    Channel test often fails on Mac OS.
Solution:   Increase the wait time from one to 15 milliseconds. (D. Ben
            Knoble, closes #11894)
2023-01-31 21:01:08 +00:00
Mark Skelton
9c51798a1f patch 9.0.1268: .clangd and .stylelintrc files don't get a filetype
Problem:    .clangd and .stylelintrc files don't get a filetype.
Solution:   Use yaml for .clangd and json for .stylelintrc files. (Mark
            Skelton, closes #11916)
2023-01-31 18:57:17 +00:00
Yegappan Lakshmanan
d6e4c75af2 patch 9.0.1267: the did_set_string_option function is too long
Problem:    The did_set_string_option function is too long.
Solution:   Further cleanup of handling string options.  (Yegappan Lakshmanan,
            Lewis Russell, closes #11920)
2023-01-31 13:25:58 +00:00
Bram Moolenaar
ce93d162da patch 9.0.1266: error for space before ": type" is inconsistent
Problem:    Error for space before ": type" is inconsistent.
Solution:   Give E1059 in more places. (closes #11868)
2023-01-30 21:12:34 +00:00
Bram Moolenaar
b8bebd0cd7 patch 9.0.1265: using an interface method may give a compilation error
Problem:    Using an interface method may give a compilation error.
Solution:   Do not try to compile the body of a method of an interface.
            (closes #11885)
2023-01-30 20:24:23 +00:00
Bram Moolenaar
eb45ad25ab patch 9.0.1264: Motif: compiler warning for unused argument
Problem:    Motif: compiler warning for unused argument.
Solution:   Add "UNUSED".
2023-01-30 19:26:24 +00:00
Amaan Qureshi
907349a743 patch 9.0.1263: KDL files are not recognized
Problem:    KDL files are not recognized.
Solution:   Add a pattern for KDL files. (Amaan Qureshi, closes #11898)
2023-01-30 15:19:57 +00:00
Yegappan Lakshmanan
f2e30d0c44 patch 9.0.1262: the did_set_string_option function is too long
Problem:    The did_set_string_option function is too long.
Solution:   Split off functionality to individual functions.  (Yegappan
            Lakshmanan, Lewis Russell, closes #11904)
2023-01-30 13:04:42 +00:00
Amaan Qureshi
2a99fe6c41 patch 9.0.1261: Elsa files are not recognized
Problem:    Elsa files are not recognized.
Solution:   Add a pattern for Elsa files. (Amaan Qureshi, closes #11908)
2023-01-29 17:50:14 +00:00
Bram Moolenaar
836137d89a patch 9.0.1260: Coverity warns for possible NULL pointer usage
Problem:    Coverity warns for possible NULL pointer usage.
Solution:   Change the condition.
2023-01-29 14:11:24 +00:00
Bram Moolenaar
492324e588 patch 9.0.1259: diffmode test fails
Problem:    Diffmode test fails.
Solution:   Adjust expected result for adjusted indenting.
2023-01-28 20:57:59 +00:00
Bram Moolenaar
755bf2b3d2 patch 9.0.1258: code style test fails
Problem:    Code style test fails.
Solution:   Adjust test files.
2023-01-28 19:38:49 +00:00
Bram Moolenaar
94722c5107 patch 9.0.1257: code style is not check in test scripts
Problem:    Code style is not check in test scripts.
Solution:   Add basic code style check for test files.
2023-01-28 19:19:03 +00:00
ObserverOfTime
04e4f1d985 patch 9.0.1256: NetworkManager connection files are not recognized
Problem:    NetworkManager connection files are not recognized.
Solution:   Add a pattern for NetworkManager connection files. (closes #11893)
2023-01-28 18:05:40 +00:00
Bram Moolenaar
8fe5b9c8c1 patch 9.0.1255: changing 'virtualedit' does not have immediate effect
Problem:    Changing 'virtualedit' does not have immediate effect.
Solution:   Correct how is checked for a changed value. (closes #11878)
2023-01-28 16:37:37 +00:00
Bram Moolenaar
d0200c8631 patch 9.0.1254: calling a method on an interface does not work
Problem:    Calling a method on an interface does not work.
Solution:   At runtime figure out what method to call. (closes #11901)
2023-01-28 15:19:40 +00:00
Philip H
192e24d974 patch 9.0.1253: CI adds repository unnecessarily
Problem:    CI adds repository unnecessarily.
Solution:   Remove the line from the workflow. (closes #11900)
2023-01-28 10:43:50 +00:00
Christopher Plewright
f75a2cb3c7 patch 9.0.1252: MS-Windows: scrollback cropped off on Vim exit
Problem:    MS-Windows: scrollback cropped off on Vim exit.
Solution:   Don't call SetConsoleScreenBufferInfoEx when using the alternate
            screen buffer. (Christopher Plewright, closes #11882)
2023-01-28 10:28:09 +00:00
Yegappan Lakshmanan
fadc02a2a5 patch 9.0.1251: checking returned value of ga_grow() is inconsistent
Problem:    Checking returned value of ga_grow() is inconsistent.
Solution:   Check for FAIL instaed of "not OK". (Yegappan Lakshmanan,
            closes #11897)
2023-01-27 21:03:12 +00:00
Bram Moolenaar
8dbab1d8ce patch 9.0.1250: cannot use an object method with :defer
Problem:    Cannot use an object method with :defer. (Ernie Rael)
Solution:   Find the object method and generate code to call it.
            (closes #11886)
2023-01-27 20:14:02 +00:00
Bram Moolenaar
657aea7fc4 patch 9.0.1249: cannot export an abstract class
Problem:    Cannot export an abstract class. (Ernie Rael)
Solution:   Add the EX_EXPORT flag to :abstract. (closes #11884)
2023-01-27 13:16:19 +00:00
Bram Moolenaar
53f54e49b7 patch 9.0.1248: cannot export an interface
Problem:    Cannot export an interface. (Ernie Rael)
Solution:   Add the EX_EXPORT flag to :interface. (closes #11884)
2023-01-26 20:36:56 +00:00
Bram Moolenaar
870219c58c patch 9.0.1247: divide by zero with 'smoothscroll' set and a narrow window
Problem:    Divide by zero with 'smoothscroll' set and a narrow window.
Solution:   Bail out when the window is too narrow.
2023-01-26 14:14:43 +00:00
Yegappan Lakshmanan
142ed77898 patch 9.0.1246: code is indented more than necessary
Problem:    Code is indented more than necessary.
Solution:   Use an early return where it makes sense. (Yegappan Lakshmanan,
            closes #11887)
2023-01-26 12:00:00 +00:00
Yegappan Lakshmanan
032713f829 patch 9.0.1245: code is indented more than necessary
Problem:    Code is indented more than necessary.
Solution:   Use an early return where it makes sense. (Yegappan Lakshmanan,
            closes #11879)
2023-01-25 21:05:38 +00:00
Bram Moolenaar
0f843ef091 patch 9.0.1244: cursor displayed in wrong position when leaving Insert mode
Problem:    Cursor briefly displayed in a wrong position when pressing Esc in
            Insert mode after autoindent was used.
Solution:   Do not adjust the cursor position for assumed deleted white space
            if text is following.  (closes #11877)
2023-01-25 17:34:41 +00:00
zeertzjq
01d4efe2e8 patch 9.0.1243: :setglobal cannot use script-local function for "expr" option
Problem:    :setglobal cannot use script-local function for "expr" option.
Solution:   Use the pointer to the option value properly. (closes #11883)
2023-01-25 15:31:28 +00:00
zeertzjq
b0d45ec67f patch 9.0.1242: code for :runtime completion is not consistent
Problem:    Code for :runtime completion is not consistent.
Solution:   Make code for cmdline expansion more consistent. (closes #11875)
2023-01-25 15:04:22 +00:00
Bram Moolenaar
b582010350 patch 9.0.1241: Coverity warns for not checking function return value
Problem:    Coverity warns for not checking function return value.
Solution:   Explicitly ignore the return value.
2023-01-25 12:27:13 +00:00
Bram Moolenaar
62a6923470 patch 9.0.1240: cannot access a private object member in a lambda
Problem:    Cannot access a private object member in a lambda defined inside
            the class.
Solution:   Go up the context stack to find the class. (closes #11866)
2023-01-24 15:07:04 +00:00
Bram Moolenaar
b149d22796 patch 9.0.1239: cannot have a line break before an object member access
Problem:    Cannot have a line break before an object member access.
Solution:   Check for "." in next line. (closes #11864)
2023-01-24 13:03:37 +00:00
zeertzjq
5c8771bc5a patch 9.0.1238: :runtime completion can be further improved
Problem:    :runtime completion can be further improved.
Solution:   Also complete the {where} argument values and adjust the
            completion for that. (closes #11874)
2023-01-24 12:34:03 +00:00
417 changed files with 16658 additions and 9674 deletions

View File

@@ -36,7 +36,7 @@ macos_task:
timeout_in: 20m
install_script:
- brew update
- brew install gettext libtool
- brew install gettext libtool diffutils
build_script:
- NPROC=$(getconf _NPROCESSORS_ONLN)
- ./configure --with-features=${FEATURES}

View File

@@ -96,22 +96,21 @@ jobs:
- name: Install gcc-11
if: matrix.compiler == 'gcc'
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt install -y gcc-11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --set gcc /usr/bin/gcc-11
- name: Install clang-15
- name: Install clang-16
if: matrix.compiler == 'clang'
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
. /etc/lsb-release
sudo add-apt-repository -y "deb http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME}-15 main"
sudo apt install -y clang-15 llvm-15
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100
sudo update-alternatives --set clang /usr/bin/clang-15
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-15 100
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-15 100
sudo add-apt-repository -y "deb http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME}-16 main"
sudo apt install -y clang-16 llvm-16
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-16 100
sudo update-alternatives --set clang /usr/bin/clang-16
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-16 100
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-16 100
- name: Set up environment
run: |
@@ -300,8 +299,6 @@ jobs:
- name: Install packages
if: matrix.features == 'huge'
env:
HOMEBREW_NO_AUTO_UPDATE: 1
run: |
brew install lua
echo "LUA_PREFIX=/usr/local" >> $GITHUB_ENV

1
.gitignore vendored
View File

@@ -68,6 +68,7 @@ src/tags
/GPATH
/GTAGS
/GRTAGS
nsis/tags
# Generated by "make test"
src/po/*.ck

View File

@@ -7,9 +7,9 @@ src/xxd/xxd
src/auto/if_perl.c
src/auto/gui_gtk_gresources.c
src/auto/gui_gtk_gresources.h
src/auto/os_haiku.rdef
src/objects/.dirstamp
src/objects
src/tags
src/types.vim
# We do need src/auto/configure.
@@ -46,12 +46,15 @@ gvimext.lib
gvim.lib
runtime/doc/uganda.nsis.txt
nsis/icons/*
/vim90/
.vscode/
# NetBeans
nbproject/*
# Mac OSX
src/xxd/xxd.dSYM
.DS_Store
# All platforms
*.rej
@@ -62,6 +65,12 @@ src/xxd/xxd.dSYM
*.pyc
*.log
src/po/vim.pot
src/tags
/tags
/GPATH
/GTAGS
/GRTAGS
nsis/tags
# Generated by "make test"
src/po/*.ck
@@ -78,14 +87,16 @@ src/testdir/dostmp/*
src/testdir/messages
src/testdir/viminfo
src/testdir/opt_test.vim
src/testdir/failed
src/testdir/starttime
runtime/indent/testdir/*.out
runtime/indent/testdir/*.fail
src/memfile_test
src/json_test
src/message_test
src/kword_test
# Generated by "make install"
runtime/doc/tags
runtime/doc/doctags
# Generated by "make shadow". The directory names could be anything but we
@@ -95,5 +106,10 @@ src/shadow-*
src/runtime
src/pixmaps
# other possible files build by tools
# other files possibly created by tools
src/cscope.out
# Linter/language server files
/.cache/clangd/
/.ccls-cache/
/compile_commands.json

View File

@@ -2,18 +2,17 @@
# What is Vim9?
This is an experimental side of [Vim](https://github.com/vim/vim).
It explores ways of making Vim script faster and better.
This is a new syntax for Vim script that was introduced with Vim 9.0.
It intends making Vim script faster and better.
WARNING: The Vim9 script features are still under development, anything can
break!
# Why Vim9?
## 1. FASTER VIM SCRIPT
The third item on the poll results of 2018, after popup windows and text
properties, is faster Vim script. So how do we do that?
properties, both of which have been implemented, is faster Vim script.
So how do we do that?
I have been throwing some ideas around, and soon came to the conclusion
that the current way functions are called and executed, with
@@ -53,7 +52,7 @@ we can gain, and also that Vim script can be faster than builtin
interfaces.
LuaJit is much faster at Lua-only instructions. In practice the script would
not do something useless as counting but change the text. For example,
not do something useless counting, but change the text. For example,
reindent all the lines:
``` vim

View File

@@ -228,6 +228,28 @@ FunctionEnd
!insertmacro GetParent ""
!insertmacro GetParent "un."
# Get home directory
!macro GetHomeDir un
Function ${un}GetHomeDir
Push $0
Push $1
ReadEnvStr $0 "HOME"
${If} $0 == ""
ReadEnvStr $0 "HOMEDRIVE"
ReadEnvStr $1 "HOMEPATH"
StrCpy $0 "$0$1"
${If} $0 == ""
ReadEnvStr $0 "USERPROFILE"
${EndIf}
${EndIf}
Pop $1
Exch $0 # put $0 on top of stack, restore $0 to original value
FunctionEnd
!macroend
!insertmacro GetHomeDir ""
!insertmacro GetHomeDir "un."
# Check if Vim is already installed.
# return: Installed directory. If not found, it will be empty.
Function CheckOldVim
@@ -520,7 +542,8 @@ SectionGroup $(str_group_plugin) id_group_plugin
Section "$(str_section_plugin_home)" id_section_pluginhome
SectionIn 1 3
StrCpy $1 "$1 -create-directories home"
# use ShellExecAsUser below instead
# StrCpy $1 "$1 -create-directories home"
SectionEnd
Section "$(str_section_plugin_vim)" id_section_pluginvim
@@ -594,6 +617,13 @@ Section -call_install_exe
DetailPrint "$(str_msg_registering)"
nsExec::Exec "$0\install.exe $1"
Pop $3
${If} ${SectionIsSelected} ${id_section_pluginhome}
ReadEnvStr $3 "COMSPEC"
Call GetHomeDir
Pop $4
ShellExecAsUser::ShellExecAsUser "" "$3" '/c "cd /d "$4" & mkdir vimfiles & cd vimfiles & mkdir colors compiler doc ftdetect ftplugin indent keymap plugin syntax"' SW_HIDE
${EndIf}
SectionEnd
##########################################################
@@ -1042,15 +1072,8 @@ SectionEnd
SectionGroup "un.$(str_ungroup_plugin)" id_ungroup_plugin
Section /o "un.$(str_unsection_plugin_home)" id_unsection_plugin_home
# get the home dir
ReadEnvStr $0 "HOME"
${If} $0 == ""
ReadEnvStr $0 "HOMEDRIVE"
ReadEnvStr $1 "HOMEPATH"
StrCpy $0 "$0$1"
${If} $0 == ""
ReadEnvStr $0 "USERPROFILE"
${EndIf}
${EndIf}
Call un.GetHomeDir
Pop $0
${If} $0 != ""
!insertmacro RemoveVimfiles $0

View File

@@ -307,14 +307,16 @@ export def FTfs()
if exists("g:filetype_fs")
exe "setf " .. g:filetype_fs
else
var line = getline(nextnonblank(1))
# comments and colon definitions
if line =~ '^\s*\.\=( ' || line =~ '^\s*\\G\= ' || line =~ '^\\$'
\ || line =~ '^\s*: \S'
setf forth
else
setf fsharp
endif
var n = 1
while n < 100 && n <= line("$")
# Forth comments and colon definitions
if getline(n) =~ "^[:(\\\\] "
setf forth
return
endif
n += 1
endwhile
setf fsharp
endif
enddef

View File

@@ -2,12 +2,12 @@ vim9script
# Language: Vim script
# Maintainer: github user lacygoill
# Last Change: 2023 Jan 03
# Last Change: 2023 Feb 01
# NOTE: Whenever you change the code, make sure the tests are still passing:
#
# $ cd runtime/indent/
# $ make clean; make test || vimdiff testdir/vim.{fail,ok}
# $ make clean; make test || vimdiff testdir/vim.{ok,fail}
# Config {{{1
@@ -112,6 +112,10 @@ const DICT_KEY: string = '^\s*\%('
.. '\)'
.. ':\%(\s\|$\)'
# NOT_A_DICT_KEY {{{3
const NOT_A_DICT_KEY: string = ':\@!'
# END_OF_COMMAND {{{3
const END_OF_COMMAND: string = $'\s*\%($\|||\@!\|{INLINE_COMMENT}\)'
@@ -144,19 +148,43 @@ const HEREDOC_OPERATOR: string = '\s=<<\s\@=\%(\s\+\%(trim\|eval\)\)\{,2}'
#
# But sometimes, it can be too costly and cause `E363` to be given.
const PATTERN_DELIMITER: string = '[-+*/%]\%(=\s\)\@!'
# QUOTE {{{3
const QUOTE: string = '["'']'
# }}}2
# Syntaxes {{{2
# ASSIGNS_HEREDOC {{{3
# BLOCKS {{{3
const ASSIGNS_HEREDOC: string = $'^\%({COMMENT}\)\@!.*\%({HEREDOC_OPERATOR}\)\s\+\zs[A-Z]\+{END_OF_LINE}'
const BLOCKS: list<list<string>> = [
['if', 'el\%[se]', 'elseif\=', 'en\%[dif]'],
['for', 'endfor\='],
['wh\%[ile]', 'endw\%[hile]'],
['try', 'cat\%[ch]', 'fina\|finally\=', 'endt\%[ry]'],
['def', 'enddef'],
['fu\%[nction](\@!', 'endf\%[unction]'],
['class', 'endclass'],
['interface', 'endinterface'],
['enum', 'endenum'],
['aug\%[roup]\%(\s\+[eE][nN][dD]\)\@!\s\+\S\+', 'aug\%[roup]\s\+[eE][nN][dD]'],
]
# CD_COMMAND {{{3
# MODIFIERS {{{3
const CD_COMMAND: string = $'\<[lt]\=cd!\=\s\+-{END_OF_COMMAND}'
# some keywords can be prefixed by modifiers (e.g. `def` can be prefixed by `export`)
const MODIFIERS: dict<string> = {
def: ['export', 'static'],
class: ['export', 'abstract', 'export abstract'],
interface: ['export'],
}
# ...
# class: ['export', 'abstract', 'export abstract'],
# ...
# →
# ...
# class: '\%(export\|abstract\|export\s\+abstract\)\s\+',
# ...
->map((_, mods: list<string>): string =>
'\%(' .. mods
->join('\|')
->substitute('\s\+', '\\s\\+', 'g')
.. '\)' .. '\s\+')
# HIGHER_ORDER_COMMAND {{{3
@@ -174,58 +202,102 @@ patterns =<< trim eval END
g\%[lobal]!\={PATTERN_DELIMITER}.*
v\%[global]!\={PATTERN_DELIMITER}.*
END
const HIGHER_ORDER_COMMAND: string = $'\%(^\|{BAR_SEPARATION}\)\s*\<\%(' .. patterns->join('\|') .. '\):\@!'
# MAPPING_COMMAND {{{3
const HIGHER_ORDER_COMMAND: string = $'\%(^\|{BAR_SEPARATION}\)\s*\<\%({patterns->join('\|')}\){NOT_A_DICT_KEY}'
const MAPPING_COMMAND: string = '\%(\<sil\%[ent]!\=\s\+\)\=\<[nvxsoilct]\=\%(nore\|un\)map!\=\s'
# START_MIDDLE_END {{{3
# NORMAL_COMMAND {{{3
# Let's derive this constant from `BLOCKS`:
#
# [['if', 'el\%[se]', 'elseif\=', 'en\%[dif]'],
# ['for', 'endfor\='],
# ...,
# [...]]
# →
# {
# 'for': ['for', '', 'endfor\='],
# 'endfor': ['for', '', 'endfor\='],
# 'if': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
# 'else': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
# 'elseif': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
# 'endif': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
# ...
# }
var START_MIDDLE_END: dict<list<string>>
const NORMAL_COMMAND: string = '\<norm\%[al]!\=\s*\S\+$'
def Unshorten(kwd: string): string
return BlockStartKeyword(kwd)
enddef
# PLUS_MINUS_COMMAND {{{3
def BlockStartKeyword(line: string): string
var kwd: string = line->matchstr('\l\+')
return fullcommand(kwd, false)
enddef
# In legacy, the `:+` and `:-` commands are not required to be preceded by a colon.
# As a result, when `+` or `-` is alone on a line, there is ambiguity.
# It might be an operator or a command.
# To not break the indentation in legacy scripts, we might need to consider such
# lines as commands.
const PLUS_MINUS_COMMAND: string = '^\s*[+-]\s*$'
{
for kwds: list<string> in BLOCKS
var [start: string, middle: string, end: string] = [kwds[0], '', kwds[-1]]
if MODIFIERS->has_key(start->Unshorten())
start = $'\%({MODIFIERS[start]}\)\={start}'
endif
if kwds->len() > 2
middle = kwds[1 : -2]->join('\|')
endif
for kwd: string in kwds
START_MIDDLE_END->extend({[kwd->Unshorten()]: [start, middle, end]})
endfor
endfor
}
START_MIDDLE_END = START_MIDDLE_END
->map((_, kwds: list<string>) =>
kwds->map((_, kwd: string) => kwd == ''
? ''
: $'\%(^\|{BAR_SEPARATION}\|\<sil\%[ent]\|{HIGHER_ORDER_COMMAND}\)\s*'
.. $'\<\%({kwd}\)\>\%(\s*{OPERATOR}\)\@!'))
lockvar! START_MIDDLE_END
# ENDS_BLOCK {{{3
const ENDS_BLOCK: string = '^\s*\%('
.. 'en\%[dif]'
.. '\|' .. 'endfor\='
.. '\|' .. 'endw\%[hile]'
.. '\|' .. 'endt\%[ry]'
.. '\|' .. 'enddef'
.. '\|' .. 'endclass'
.. '\|' .. 'endf\%[unction]'
.. '\|' .. 'aug\%[roup]\s\+[eE][nN][dD]'
.. BLOCKS
->copy()
->map((_, kwds: list<string>): string => kwds[-1])
->join('\|')
.. '\|' .. CLOSING_BRACKET
.. $'\){END_OF_COMMAND}'
# ENDS_BLOCK_OR_CLAUSE {{{3
patterns =<< trim END
en\%[dif]
el\%[se]
endfor\=
endclass
endw\%[hile]
endt\%[ry]
fina\|finally\=
enddef
endf\%[unction]
aug\%[roup]\s\+[eE][nN][dD]
END
patterns = BLOCKS
->copy()
->map((_, kwds: list<string>) => kwds[1 :])
->flattennew()
# `catch` and `elseif` need to be handled as special cases
->filter((_, pat: string): bool => pat->Unshorten() !~ '^\%(catch\|elseif\)\>')
const ENDS_BLOCK_OR_CLAUSE: string = '^\s*\%(' .. patterns->join('\|') .. $'\){END_OF_COMMAND}'
.. $'\|^\s*cat\%[ch]\%(\s\+\({PATTERN_DELIMITER}\).*\1\)\={END_OF_COMMAND}'
.. $'\|^\s*elseif\=\>\%({OPERATOR}\)\@!'
# STARTS_NAMED_BLOCK {{{3
patterns = []
{
for kwds: list<string> in BLOCKS
for kwd: string in kwds[0 : -2]
if MODIFIERS->has_key(kwd->Unshorten())
patterns += [$'\%({MODIFIERS[kwd]}\)\={kwd}']
else
patterns += [kwd]
endif
endfor
endfor
}
const STARTS_NAMED_BLOCK: string = $'^\s*\%(sil\%[ent]\s\+\)\=\%({patterns->join('\|')}\)\>{NOT_A_DICT_KEY}'
# STARTS_CURLY_BLOCK {{{3
# TODO: `{` alone on a line is not necessarily the start of a block.
@@ -238,73 +310,57 @@ const STARTS_CURLY_BLOCK: string = '\%('
.. '\|' .. $'^\%(\s*\|.*{BAR_SEPARATION}\s*\)\%(com\%[mand]\|au\%[tocmd]\).*\zs\s{{'
.. '\)' .. END_OF_COMMAND
# STARTS_NAMED_BLOCK {{{3
# All of these will be used at the start of a line (or after a bar).
# NOTE: Don't replace `\%x28` with `(`.{{{
#
# Otherwise, the paren would be unbalanced which might cause syntax highlighting
# issues much later in the code of the current script (sometimes, the syntax
# highlighting plugin fails to correctly recognize a heredoc which is far away
# and/or not displayed because inside a fold).
# }}}
patterns =<< trim END
if
el\%[se]
elseif\=
for
class
wh\%[ile]
try
cat\%[ch]
fina\|finally\=
fu\%[nction]\%x28\@!
\%(export\s\+\)\=def
aug\%[roup]\%(\s\+[eE][nN][dD]\)\@!\s\+\S\+
END
const STARTS_NAMED_BLOCK: string = '^\s*\%(sil\%[ent]\s\+\)\=\%(' .. patterns->join('\|') .. '\)\>:\@!'
# STARTS_FUNCTION {{{3
const STARTS_FUNCTION: string = '^\s*\%(export\s\+\)\=def\>:\@!'
const STARTS_FUNCTION: string = $'^\s*\%({MODIFIERS.def}\)\=def\>{NOT_A_DICT_KEY}'
# ENDS_FUNCTION {{{3
const ENDS_FUNCTION: string = $'^\s*enddef\>:\@!{END_OF_COMMAND}'
const ENDS_FUNCTION: string = $'^\s*enddef\>{END_OF_COMMAND}'
# START_MIDDLE_END {{{3
# ASSIGNS_HEREDOC {{{3
const START_MIDDLE_END: dict<list<string>> = {
if: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
else: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
elseif: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
endif: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
for: ['for', '', 'endfor\='],
endfor: ['for', '', 'endfor\='],
class: ['class', '', 'endclass'],
endclass: ['class', '', 'endclass'],
while: ['wh\%[ile]', '', 'endw\%[hile]'],
endwhile: ['wh\%[ile]', '', 'endw\%[hile]'],
try: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
catch: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
finally: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
endtry: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
def: ['\%(export\s\+\)\=def', '', 'enddef'],
enddef: ['\%(export\s\+\)\=def', '', 'enddef'],
function: ['fu\%[nction]', '', 'endf\%[unction]'],
endfunction: ['fu\%[nction]', '', 'endf\%[unction]'],
augroup: ['aug\%[roup]\%(\s\+[eE][nN][dD]\)\@!\s\+\S\+', '', 'aug\%[roup]\s\+[eE][nN][dD]'],
}->map((_, kwds: list<string>) =>
kwds->map((_, kwd: string) => kwd == ''
? ''
: $'\%(^\|{BAR_SEPARATION}\|\<sil\%[ent]\|{HIGHER_ORDER_COMMAND}\)\s*'
.. $'\%({printf('\C\<\%%(%s\)\>:\@!\%%(\s*%s\)\@!', kwd, OPERATOR)}\)'))
const ASSIGNS_HEREDOC: string = $'^\%({COMMENT}\)\@!.*\%({HEREDOC_OPERATOR}\)\s\+\zs[A-Z]\+{END_OF_LINE}'
# PLUS_MINUS_COMMAND {{{3
# In legacy, the `:+` and `:-` commands are not required to be preceded by a colon.
# As a result, when `+` or `-` is alone on a line, there is ambiguity.
# It might be an operator or a command.
# To not break the indentation in legacy scripts, we might need to consider such
# lines as commands.
const PLUS_MINUS_COMMAND: string = '^\s*[+-]\s*$'
# TRICKY_COMMANDS {{{3
# Some commands are tricky because they accept an argument which can be
# conflated with an operator. Examples:
#
# argdelete *
# cd -
# normal! ==
# nunmap <buffer> (
#
# TODO: Other commands might accept operators as argument. Handle them too.
patterns =<< trim eval END
{'\'}<argd\%[elete]\s\+\*\s*$
\<[lt]\=cd!\=\s\+-\s*$
\<norm\%[al]!\=\s*\S\+$
\%(\<sil\%[ent]!\=\s\+\)\=\<[nvxsoilct]\=\%(nore\|un\)map!\=\s
{PLUS_MINUS_COMMAND}
END
const TRICKY_COMMANDS: string = patterns->join('\|')
# }}}2
# EOL {{{2
# OPENING_BRACKET_AT_EOL {{{3
const OPENING_BRACKET_AT_EOL: string = OPENING_BRACKET .. END_OF_VIM9_LINE
# CLOSING_BRACKET_AT_EOL {{{3
const CLOSING_BRACKET_AT_EOL: string = CLOSING_BRACKET .. END_OF_VIM9_LINE
# COMMA_AT_EOL {{{3
const COMMA_AT_EOL: string = $',{END_OF_VIM9_LINE}'
@@ -392,6 +448,7 @@ export def Expr(lnum = v:lnum): number # {{{2
endif
if line_A->AtStartOf('FuncHeader')
&& !IsInInterface()
line_A.lnum->CacheFuncHeader()
elseif line_A.lnum->IsInside('FuncHeader')
return b:vimindent.startindent + 2 * shiftwidth()
@@ -430,6 +487,7 @@ export def Expr(lnum = v:lnum): number # {{{2
if line_A.text->ContinuesBelowBracketBlock(line_B, past_bracket_block)
&& line_A.text !~ CLOSING_BRACKET_AT_SOL
return past_bracket_block.startindent
+ (past_bracket_block.startline =~ STARTS_NAMED_BLOCK ? 2 * shiftwidth() : 0)
endif
# Problem: If we press `==` on the line right below the start of a multiline
@@ -438,6 +496,18 @@ export def Expr(lnum = v:lnum): number # {{{2
if line_B->EndsWithLambdaArrow()
return Indent(line_B.lnum) + shiftwidth() + IndentMoreInBracketBlock()
endif
# FIXME: Similar issue here:
#
# var x = []
# ->filter((_, _) =>
# true)
# ->items()
#
# Press `==` on last line.
# Expected: The `->items()` line is indented like `->filter(...)`.
# Actual: It's indented like `true)`.
# Is it worth fixing? `=ip` gives the correct indentation, because then the
# cache is used.
# Don't move this block before the heredoc one.{{{
#
@@ -536,8 +606,13 @@ def Offset( # {{{2
line_B: dict<any>,
): number
if line_B->AtStartOf('FuncHeader')
&& IsInInterface()
return 0
# increase indentation inside a block
if line_B.text =~ STARTS_NAMED_BLOCK || line_B->EndsWithCurlyBlock()
elseif line_B.text =~ STARTS_NAMED_BLOCK
|| line_B->EndsWithCurlyBlock()
# But don't indent if the line starting the block also closes it.
if line_B->AlsoClosesBlock()
return 0
@@ -807,11 +882,6 @@ def Indent(lnum: number): number # {{{3
return indent(lnum)
enddef
def BlockStartKeyword(line: string): string # {{{3
var kwd: string = line->matchstr('\l\+')
return fullcommand(kwd, false)
enddef
def MatchingOpenBracket(line: dict<any>): number # {{{3
var end: string = line.text->matchstr(CLOSING_BRACKET)
var start: string = {']': '[', '}': '{', ')': '('}[end]
@@ -908,7 +978,8 @@ def SearchPair( # {{{3
if end == '[' || end == ']'
e = e->escape('[]')
endif
return searchpair(s, middle, e, flags, (): bool => InCommentOrString(), stopline, TIMEOUT)
return searchpair('\C' .. s, (middle == '' ? '' : '\C' .. middle), '\C' .. e,
flags, (): bool => InCommentOrString(), stopline, TIMEOUT)
enddef
def SearchPairStart( # {{{3
@@ -1016,6 +1087,10 @@ def IsInThisBlock(line_A: dict<any>, lnum: number): bool # {{{3
return line_A.lnum <= end
enddef
def IsInInterface(): bool # {{{3
return SearchPair('interface', '', 'endinterface', 'nW') > 0
enddef
def IsFirstLineOfCommand(line_1: dict<any>, line_2: dict<any>): bool # {{{3
if line_1.text->Is_IN_KeywordForLoop(line_2.text)
return false
@@ -1046,13 +1121,8 @@ def Is_IN_KeywordForLoop(line_1: string, line_2: string): bool # {{{3
enddef
def InCommentOrString(): bool # {{{3
for synID: number in synstack('.', col('.'))
if synIDattr(synID, 'name') =~ '\ccomment\|string\|heredoc'
return true
endif
endfor
return false
return synstack('.', col('.'))
->indexof((_, id: number): bool => synIDattr(id, 'name') =~ '\ccomment\|string\|heredoc') >= 0
enddef
def AlsoClosesBlock(line_B: dict<any>): bool # {{{3
@@ -1096,6 +1166,10 @@ def EndsWithOpeningBracket(line: dict<any>): bool # {{{3
return NonCommentedMatch(line, OPENING_BRACKET_AT_EOL)
enddef
def EndsWithClosingBracket(line: dict<any>): bool # {{{3
return NonCommentedMatch(line, CLOSING_BRACKET_AT_EOL)
enddef
def NonCommentedMatch(line: dict<any>, pat: string): bool # {{{3
# Could happen if there is no code above us, and we're not on the 1st line.
# In that case, `PrevCodeLine()` returns `{lnum: 0, line: ''}`.
@@ -1103,16 +1177,6 @@ def NonCommentedMatch(line: dict<any>, pat: string): bool # {{{3
return false
endif
if line.text =~ PLUS_MINUS_COMMAND
return false
endif
# In `argdelete *`, `*` is not a multiplication operator.
# TODO: Other commands can accept `*` as an argument. Handle them too.
if line.text =~ '\<argd\%[elete]\s\+\*\s*$'
return false
endif
# Technically, that's wrong. A line might start with a range and end with a
# line continuation symbol. But it's unlikely. And it's useful to assume the
# opposite because it prevents us from conflating a mark with an operator or
@@ -1179,24 +1243,7 @@ def NonCommentedMatch(line: dict<any>, pat: string): bool # {{{3
return false
endif
# `:help cd-`
if line.text =~ CD_COMMAND
return false
endif
# At the end of a mapping, any character might appear; e.g. a paren:
#
# nunmap <buffer> (
#
# Don't conflate this with a line continuation symbol.
if line.text =~ MAPPING_COMMAND
return false
endif
# not a comparison operator
# vv
# normal! ==
if line.text =~ NORMAL_COMMAND
if line.text =~ TRICKY_COMMANDS
return false
endif

View File

@@ -22,8 +22,7 @@ let s:maxoff = 50 " maximum number of lines to look backwards for ()
function s:SearchBracket(fromlnum, flags)
return searchpairpos('[[({]', '', '[])}]', a:flags,
\ {-> synstack('.', col('.'))
\ ->map({_, id -> id->synIDattr('name')})
\ ->match('\%(Comment\|Todo\|String\)$') >= 0},
\ ->indexof({_, id -> synIDattr(id, 'name') =~ '\%(Comment\|Todo\|String\)$'}) >= 0},
\ [0, a:fromlnum - s:maxoff]->max(), g:python_indent.searchpair_timeout)
endfunction
@@ -157,15 +156,13 @@ function python#GetIndent(lnum, ...)
" the start of the comment. synID() is slow, a linear search would take
" too long on a long line.
if synstack(plnum, pline_len)
\ ->map({_, id -> id->synIDattr('name')})
\ ->match('\%(Comment\|Todo\)$') >= 0
\ ->indexof({_, id -> synIDattr(id, 'name') =~ '\%(Comment\|Todo\)$'}) >= 0
let min = 1
let max = pline_len
while min < max
let col = (min + max) / 2
if synstack(plnum, col)
\ ->map({_, id -> id->synIDattr('name')})
\ ->match('\%(Comment\|Todo\)$') >= 0
\ ->indexof({_, id -> synIDattr(id, 'name') =~ '\%(Comment\|Todo\)$'}) >= 0
let max = col
else
let min = col + 1

View File

@@ -1,6 +1,6 @@
" Vim autoload file for the tohtml plugin.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
" Last Change: 2019 Aug 16
" Last Change: 2023 Jan 01
"
" Additional contributors:
"
@@ -351,63 +351,65 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
let s:old_magic = &magic
set magic
if s:settings.use_xhtml
if s:settings.encoding != ""
let xml_line = "<?xml version=\"1.0\" encoding=\"" . s:settings.encoding . "\"?>"
else
let xml_line = "<?xml version=\"1.0\"?>"
endif
let tag_close = ' />'
endif
let style = [s:settings.use_xhtml ? "" : '-->']
let body_line = ''
let html = []
let s:html5 = 0
if s:settings.use_xhtml
call add(html, xml_line)
endif
if s:settings.use_xhtml
call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
elseif s:settings.use_css && !s:settings.no_pre
call add(html, "<!DOCTYPE html>")
call add(html, '<html>')
let s:html5 = 1
else
call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">')
call add(html, '<html>')
endif
call add(html, '<head>')
" include encoding as close to the top as possible, but only if not already
" contained in XML information
if s:settings.encoding != "" && !s:settings.use_xhtml
if s:html5
call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
else
call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
if !s:settings.no_doc
if s:settings.use_xhtml
if s:settings.encoding != ""
let xml_line = "<?xml version=\"1.0\" encoding=\"" . s:settings.encoding . "\"?>"
else
let xml_line = "<?xml version=\"1.0\"?>"
endif
let tag_close = ' />'
endif
let style = [s:settings.use_xhtml ? "" : '-->']
let body_line = ''
let s:html5 = 0
if s:settings.use_xhtml
call add(html, xml_line)
endif
if s:settings.use_xhtml
call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
elseif s:settings.use_css && !s:settings.no_pre
call add(html, "<!DOCTYPE html>")
call add(html, '<html>')
let s:html5 = 1
else
call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">')
call add(html, '<html>')
endif
call add(html, '<head>')
" include encoding as close to the top as possible, but only if not already
" contained in XML information
if s:settings.encoding != "" && !s:settings.use_xhtml
if s:html5
call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
else
call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
endif
endif
call add(html, '<title>diff</title>')
call add(html, '<meta name="Generator" content="Vim/'.v:version/100.'.'.v:version%100.'"'.tag_close)
call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
call add(html, '<meta name="settings" content="'.
\ join(filter(keys(s:settings),'s:settings[v:val]'),',').
\ ',prevent_copy='.s:settings.prevent_copy.
\ ',use_input_for_pc='.s:settings.use_input_for_pc.
\ '"'.tag_close)
call add(html, '<meta name="colorscheme" content="'.
\ (exists('g:colors_name')
\ ? g:colors_name
\ : 'none'). '"'.tag_close)
call add(html, '</head>')
let body_line_num = len(html)
call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
endif
call add(html, '<title>diff</title>')
call add(html, '<meta name="Generator" content="Vim/'.v:version/100.'.'.v:version%100.'"'.tag_close)
call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
call add(html, '<meta name="settings" content="'.
\ join(filter(keys(s:settings),'s:settings[v:val]'),',').
\ ',prevent_copy='.s:settings.prevent_copy.
\ ',use_input_for_pc='.s:settings.use_input_for_pc.
\ '"'.tag_close)
call add(html, '<meta name="colorscheme" content="'.
\ (exists('g:colors_name')
\ ? g:colors_name
\ : 'none'). '"'.tag_close)
call add(html, '</head>')
let body_line_num = len(html)
call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
call add(html, "<table ".(s:settings.use_css? "" : "border='1' width='100%' ")."id='vimCodeElement".s:settings.id_suffix."'>")
call add(html, '<tr>')
@@ -430,47 +432,53 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" When not using CSS or when using xhtml, the <body> line can be important.
" Assume it will be the same for all buffers and grab it from the first
" buffer. Similarly, need to grab the body end line as well.
if body_line == ''
if !s:settings.no_doc
if body_line == ''
1
call search('<body')
let body_line = getline('.')
$
call search('</body>', 'b')
let s:body_end_line = getline('.')
endif
" Grab the style information. Some of this will be duplicated so only insert
" it if it's not already there. {{{
1
call search('<body')
let body_line = getline('.')
$
call search('</body>', 'b')
let s:body_end_line = getline('.')
endif
" Grab the style information. Some of this will be duplicated so only insert
" it if it's not already there. {{{
1
let style_start = search('^<style\( type="text/css"\)\?>')
1
let style_end = search('^</style>')
if style_start > 0 && style_end > 0
let buf_styles = getline(style_start + 1, style_end - 1)
for a_style in buf_styles
if index(style, a_style) == -1
if diff_style_start == 0
if a_style =~ '\<Diff\(Change\|Text\|Add\|Delete\)'
let diff_style_start = len(style)-1
let style_start = search('^<style\( type="text/css"\)\?>')
1
let style_end = search('^</style>')
if style_start > 0 && style_end > 0
let buf_styles = getline(style_start + 1, style_end - 1)
for a_style in buf_styles
if index(style, a_style) == -1
if diff_style_start == 0
if a_style =~ '\<Diff\(Change\|Text\|Add\|Delete\)'
let diff_style_start = len(style)-1
endif
endif
call insert(style, a_style, insert_index)
let insert_index += 1
endif
call insert(style, a_style, insert_index)
let insert_index += 1
endif
endfor
endif " }}}
endfor
endif " }}}
" everything new will get added before the diff styles so diff highlight
" properly overrides normal highlight
if diff_style_start != 0
let insert_index = diff_style_start
" everything new will get added before the diff styles so diff highlight
" properly overrides normal highlight
if diff_style_start != 0
let insert_index = diff_style_start
endif
" Delete those parts that are not needed so we can include the rest into the
" resulting table.
1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
$
?</body>?,$d_
elseif !s:settings.no_modeline
" remove modeline from source files if it is included and we haven't deleted
" due to removing html footer already
$d
endif
" Delete those parts that are not needed so we can include the rest into the
" resulting table.
1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
$
?</body>?,$d_
let temp = getline(1,'$')
" clean out id on the main content container because we already set it on
" the table
@@ -478,7 +486,11 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" undo deletion of start and end part
" so we can later save the file as valid html
" TODO: restore using grabbed lines if undolevel is 1?
normal! 2u
if !s:settings.no_doc
normal! 2u
elseif !s:settings.no_modeline
normal! u
endif
if s:settings.use_css
call add(html, '<td><div>')
elseif s:settings.use_xhtml
@@ -495,17 +507,23 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
quit!
endfor
let html[body_line_num] = body_line
if !s:settings.no_doc
let html[body_line_num] = body_line
endif
call add(html, '</tr>')
call add(html, '</table>')
call add(html, s:body_end_line)
call add(html, '</html>')
if !s:settings.no_doc
call add(html, s:body_end_line)
call add(html, '</html>')
endif
" The generated HTML is admittedly ugly and takes a LONG time to fold.
" Make sure the user doesn't do syntax folding when loading a generated file,
" using a modeline.
call add(html, '<!-- vim: set foldmethod=manual : -->')
if !s:settings.no_modeline
call add(html, '<!-- vim: set foldmethod=manual : -->')
endif
let i = 1
let name = "Diff" . (s:settings.use_xhtml ? ".xhtml" : ".html")
@@ -542,129 +560,131 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
call append(0, html)
if len(style) > 0
1
let style_start = search('^</head>')-1
if !s:settings.no_doc
if len(style) > 0
1
let style_start = search('^</head>')-1
" add required javascript in reverse order so we can just call append again
" and again without adjusting {{{
" add required javascript in reverse order so we can just call append again
" and again without adjusting {{{
let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
" insert script closing tag if needed
if s:uses_script
call append(style_start, [
\ '',
\ s:settings.use_xhtml ? '//]]>' : '-->',
\ "</script>"
\ ])
endif
" insert javascript to get IDs from line numbers, and to open a fold before
" jumping to any lines contained therein
if s:settings.line_ids
call append(style_start, [
\ " /* Always jump to new location even if the line was hidden inside a fold, or",
\ " * we corrected the raw number to a line ID.",
\ " */",
\ " if (lineElem) {",
\ " lineElem.scrollIntoView(true);",
\ " }",
\ " return true;",
\ "}",
\ "if ('onhashchange' in window) {",
\ " window.onhashchange = JumpToLine;",
\ "}"
\ ])
if s:settings.dynamic_folds
" insert script closing tag if needed
if s:uses_script
call append(style_start, [
\ "",
\ " /* navigate upwards in the DOM tree to open all folds containing the line */",
\ " var node = lineElem;",
\ " while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
\ " {",
\ " if (node.className == 'closed-fold')",
\ " {",
\ " /* toggle open the fold ID (remove window ID) */",
\ " toggleFold(node.id.substr(4));",
\ " }",
\ " node = node.parentNode;",
\ " }",
\ '',
\ s:settings.use_xhtml ? '//]]>' : '-->',
\ "</script>"
\ ])
endif
endif
if s:settings.line_ids
call append(style_start, [
\ "",
\ "/* function to open any folds containing a jumped-to line before jumping to it */",
\ "function JumpToLine()",
\ "{",
\ " var lineNum;",
\ " lineNum = window.location.hash;",
\ " lineNum = lineNum.substr(1); /* strip off '#' */",
\ "",
\ " if (lineNum.indexOf('L') == -1) {",
\ " lineNum = 'L'+lineNum;",
\ " }",
\ " if (lineNum.indexOf('W') == -1) {",
\ " lineNum = 'W1'+lineNum;",
\ " }",
\ " var lineElem = document.getElementById(lineNum);"
\ ])
endif
" insert javascript to get IDs from line numbers, and to open a fold before
" jumping to any lines contained therein
if s:settings.line_ids
call append(style_start, [
\ " /* Always jump to new location even if the line was hidden inside a fold, or",
\ " * we corrected the raw number to a line ID.",
\ " */",
\ " if (lineElem) {",
\ " lineElem.scrollIntoView(true);",
\ " }",
\ " return true;",
\ "}",
\ "if ('onhashchange' in window) {",
\ " window.onhashchange = JumpToLine;",
\ "}"
\ ])
" Insert javascript to toggle matching folds open and closed in all windows,
" if dynamic folding is active.
if s:settings.dynamic_folds
call append(style_start, [
\ " function toggleFold(objID)",
\ " {",
\ " for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
\ " {",
\ " var fold;",
\ ' fold = document.getElementById("win"+win_num+objID);',
\ " if(fold.className == 'closed-fold')",
\ " {",
\ " fold.className = 'open-fold';",
\ " }",
\ " else if (fold.className == 'open-fold')",
\ " {",
\ " fold.className = 'closed-fold';",
\ " }",
\ " }",
\ " }",
\ ])
endif
if s:settings.dynamic_folds
call append(style_start, [
\ "",
\ " /* navigate upwards in the DOM tree to open all folds containing the line */",
\ " var node = lineElem;",
\ " while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
\ " {",
\ " if (node.className == 'closed-fold')",
\ " {",
\ " /* toggle open the fold ID (remove window ID) */",
\ " toggleFold(node.id.substr(4));",
\ " }",
\ " node = node.parentNode;",
\ " }",
\ ])
endif
endif
if s:uses_script
" insert script tag if needed
call append(style_start, [
\ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
endif
if s:settings.line_ids
call append(style_start, [
\ "",
\ "/* function to open any folds containing a jumped-to line before jumping to it */",
\ "function JumpToLine()",
\ "{",
\ " var lineNum;",
\ " lineNum = window.location.hash;",
\ " lineNum = lineNum.substr(1); /* strip off '#' */",
\ "",
\ " if (lineNum.indexOf('L') == -1) {",
\ " lineNum = 'L'+lineNum;",
\ " }",
\ " if (lineNum.indexOf('W') == -1) {",
\ " lineNum = 'W1'+lineNum;",
\ " }",
\ " var lineElem = document.getElementById(lineNum);"
\ ])
endif
" Insert styles from all the generated html documents and additional styles
" for the table-based layout of the side-by-side diff. The diff should take
" up the full browser window (but not more), and be static in size,
" horizontally scrollable when the lines are too long. Otherwise, the diff
" is pretty useless for really long lines. {{{
if s:settings.use_css
call append(style_start,
\ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
\ style+
\ [ s:settings.use_xhtml ? '' : '<!--',
\ 'table { table-layout: fixed; }',
\ 'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
\ 'table, td, th { border: 1px solid; }',
\ 'td { vertical-align: top; }',
\ 'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
\ 'td div { overflow: auto; }',
\ s:settings.use_xhtml ? '' : '-->',
\ '</style>'
\])
endif "}}}
" Insert javascript to toggle matching folds open and closed in all windows,
" if dynamic folding is active.
if s:settings.dynamic_folds
call append(style_start, [
\ " function toggleFold(objID)",
\ " {",
\ " for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
\ " {",
\ " var fold;",
\ ' fold = document.getElementById("win"+win_num+objID);',
\ " if(fold.className == 'closed-fold')",
\ " {",
\ " fold.className = 'open-fold';",
\ " }",
\ " else if (fold.className == 'open-fold')",
\ " {",
\ " fold.className = 'closed-fold';",
\ " }",
\ " }",
\ " }",
\ ])
endif
if s:uses_script
" insert script tag if needed
call append(style_start, [
\ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
endif
" Insert styles from all the generated html documents and additional styles
" for the table-based layout of the side-by-side diff. The diff should take
" up the full browser window (but not more), and be static in size,
" horizontally scrollable when the lines are too long. Otherwise, the diff
" is pretty useless for really long lines. {{{
if s:settings.use_css
call append(style_start,
\ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
\ style+
\ [ s:settings.use_xhtml ? '' : '<!--',
\ 'table { table-layout: fixed; }',
\ 'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
\ 'table, td, th { border: 1px solid; }',
\ 'td { vertical-align: top; }',
\ 'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
\ 'td div { overflow: auto; }',
\ s:settings.use_xhtml ? '' : '-->',
\ '</style>'
\])
endif "}}}
endif
endif
let &paste = s:old_paste

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 9.0. Last change: 2022 Dec 12
*autocmd.txt* For Vim version 9.0. Last change: 2023 Feb 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -64,7 +64,7 @@ Example in Vim9 script: >
In legacy script: >
call autocmd_add(#{replace: v:true,
\ group: 'DemoGroup',
\ event: 'BufEnter',
\ event: 'BufEnter',
\ pattern: '*.txt',
\ cmd: 'call DemoBufEnter()'
\ })
@@ -398,7 +398,7 @@ Name triggered by ~
|InsertEnter| starting Insert mode
|InsertChange| when typing <Insert> while in Insert or Replace mode
|InsertLeave| when leaving Insert mode
|InsertLeavePre| just before leaving Insert mode
|InsertLeavePre| just before leaving Insert mode
|InsertCharPre| when a character was typed in Insert mode, before
inserting it
@@ -611,9 +611,11 @@ CmdlineEnter After moving the cursor to the command line,
where the user can type a command or search
string; including non-interactive use of ":"
in a mapping, but not when using |<Cmd>|.
The pattern is matched against the character
representing the type of command-line.
|cmdwin-char|
<afile> is set to a single character,
indicating the type of command-line.
|cmdwin-char|
*CmdlineLeave*
CmdlineLeave Before leaving the command line; including
non-interactive use of ":" in a mapping, but

View File

@@ -1,4 +1,4 @@
*builtin.txt* For Vim version 9.0. Last change: 2022 Dec 23
*builtin.txt* For Vim version 9.0. Last change: 2023 Feb 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -266,7 +266,7 @@ gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
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
getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
getwinpos([{timeout}]) List X and Y coord in pixels of Vim window
getwinposx() Number X coord in pixels of the Vim window
getwinposy() Number Y coord in pixels of the Vim window
getwinvar({nr}, {varname} [, {def}])
@@ -382,7 +382,7 @@ matchstrpos({expr}, {pat} [, {start} [, {count}]])
max({expr}) Number maximum value of items in {expr}
menu_info({name} [, {mode}]) Dict get menu item information
min({expr}) Number minimum value of items in {expr}
mkdir({name} [, {path} [, {prot}]])
mkdir({name} [, {flags} [, {prot}]])
Number create directory {name}
mode([expr]) String current editing mode
mzeval({expr}) any evaluate |MzScheme| expression
@@ -2569,8 +2569,7 @@ extend({expr1}, {expr2} [, {expr3}]) *extend()*
extendnew({expr1}, {expr2} [, {expr3}]) *extendnew()*
Like |extend()| but instead of adding items to {expr1} a new
List or Dictionary is created and returned. {expr1} remains
unchanged. Items can still be changed by {expr2}, if you
don't want that use |deepcopy()| first.
unchanged.
feedkeys({string} [, {mode}]) *feedkeys()*
@@ -2995,7 +2994,7 @@ funcref({name} [, {arglist}] [, {dict}])
Can also be used as a |method|: >
GetFuncname()->funcref([arg])
<
*function()* *partial* *E700* *E922* *E923*
*function()* *partial* *E700* *E923*
function({name} [, {arglist}] [, {dict}])
Return a |Funcref| variable that refers to function {name}.
{name} can be the name of a user defined function or an
@@ -3528,7 +3527,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
messages |:messages| suboptions
option options
packadd optional package |pack-add| names
runtime runtime file names |:runtime|
runtime |:runtime| completion
scriptnames sourced script names |:scriptnames|
shellcmd Shell command
sign |:sign| suboptions
@@ -6261,17 +6260,20 @@ min({expr}) Return the minimum value of all items in {expr}. Example: >
mylist->min()
< *mkdir()* *E739*
mkdir({name} [, {path} [, {prot}]])
mkdir({name} [, {flags} [, {prot}]])
Create directory {name}.
If {path} contains "p" then intermediate directories are
created as necessary. Otherwise it must be "".
When {flags} is present it must be a string. An empty string
has no effect.
If {path} contains "D" then {name} is deleted at the end of
If {flags} contains "p" then intermediate directories are
created as necessary.
If {flags} contains "D" then {name} is deleted at the end of
the current function, as with: >
defer delete({name}, 'd')
<
If {path} contains "R" then {name} is deleted recursively at
If {flags} contains "R" then {name} is deleted recursively at
the end of the current function, as with: >
defer delete({name}, 'rf')
< Note that when {name} has more than one part and "p" is used
@@ -7148,7 +7150,8 @@ reltimestr({time}) *reltimestr()*
call MyFunction()
echo reltimestr(reltime(start))
< Note that overhead for the commands will be added to the time.
The accuracy depends on the system.
The accuracy depends on the system. Use reltimefloat() for the
greatest accuracy which is nanoseconds on some systems.
Leading spaces are used to make the string align nicely. You
can use split() to remove it. >
echo split(reltimestr(reltime(start)))[0]
@@ -7958,7 +7961,7 @@ setcellwidths({list}) *setcellwidths()*
terminal, counted in screen cells. The values override
'ambiwidth'. Example: >
call setcellwidths([
\ [0x111, 0x111, 1],
\ [0x111, 0x111, 1],
\ [0x2194, 0x2199, 2],
\ ])
@@ -7972,7 +7975,7 @@ setcellwidths({list}) *setcellwidths()*
{width} must be either 1 or 2, indicating the character width
in screen cells. *E1112*
An error is given if the argument is invalid, also when a
range overlaps with another. *E1113*
range overlaps with another. *E1113*
If the new value causes 'fillchars' or 'listchars' to become
invalid it is rejected and an error is given.
@@ -8639,8 +8642,9 @@ sort({list} [, {how} [, {dict}]]) *sort()* *E702*
When {how} is given and it is 'n' then all items will be
sorted numerical (Implementation detail: this uses the
strtod() function to parse numbers, Strings, Lists, Dicts and
Funcrefs will be considered as being 0).
strtod() function to parse numbers. Strings, Lists, Dicts and
Funcrefs will be considered as being 0). Note that this won't
sort a list of strings with numbers!
When {how} is given and it is 'N' then all items will be
sorted numerical. This is like 'n' but a string containing
@@ -9808,6 +9812,8 @@ timer_start({time}, {callback} [, {options}])
{time} is the waiting time in milliseconds. This is the
minimum time before invoking the callback. When the system is
busy or Vim is not waiting for input the time will be longer.
Zero can be used to execute the callback when Vim is back in
the main loop.
{callback} is the function to call. It can be the name of a
function or a |Funcref|. It is called with one argument, which
@@ -10551,7 +10557,7 @@ writefile({object}, {fname} [, {flags}])
<
'D' Delete the file when the current function ends. This
works like: >
:defer delete({fname})
:defer delete({fname})
< Fails when not in a function. Also see |:defer|.
's' fsync() is called after writing the file. This flushes
@@ -10748,6 +10754,7 @@ persistent_undo Compiled with support for persistent undo history.
postscript Compiled with PostScript file printing.
printer Compiled with |:hardcopy| support.
profile Compiled with |:profile| support.
prof_nsec Profile results are in nano seconds.
python Python 2.x interface available. |has-python|
python_compiled Compiled with Python 2.x interface. |has-python|
python_dynamic Python 2.x interface is dynamically loaded. |has-python|

View File

@@ -1,4 +1,4 @@
*change.txt* For Vim version 9.0. Last change: 2022 Nov 20
*change.txt* For Vim version 9.0. Last change: 2023 Feb 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -296,7 +296,9 @@ gr{char} Replace the virtual characters under the cursor with
{char}. This replaces in screen space, not file
space. See |gR| and |Virtual-Replace-mode| for more
details. As with |r| a count may be given.
{char} can be entered like with |r|.
{char} can be entered like with |r|, but characters
that have a special meaning in Insert mode, such as
most CTRL-keys, cannot be used.
*digraph-arg*
The argument for Normal mode commands like |r| and |t| is a single character.
@@ -1033,7 +1035,7 @@ inside of strings can change! Also see 'softtabstop' option. >
< to display registers '1' and 'a'. Spaces are allowed
in {arg}.
*:di* *:display*
*:di* *:dis* *:display*
:di[splay] [arg] Same as :registers.
*y* *yank*

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 9.0. Last change: 2022 Nov 11
*cmdline.txt* For Vim version 9.0. Last change: 2023 Feb 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -617,6 +617,7 @@ followed by another Vim command:
:read !
:scscope
:sign
:tabdo
:tcl
:tcldo
:tclfile

View File

@@ -1,4 +1,4 @@
*diff.txt* For Vim version 9.0. Last change: 2022 Dec 24
*diff.txt* For Vim version 9.0. Last change: 2023 Jan 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -136,7 +136,7 @@ file for a moment and come back to the same file and be in diff mode again.
buffers.
The `:diffoff` command resets the relevant options to the values they had when
using `:diffsplit`, `:diffpatch` , `:diffthis`. or starting Vim in diff mode.
using `:diffsplit`, `:diffpatch`, `:diffthis`. or starting Vim in diff mode.
When using `:diffoff` twice the last saved values are restored.
Otherwise they are set to their default value:
@@ -181,7 +181,7 @@ possible to view the changes you have made to a buffer since the file was
loaded. Since Vim doesn't allow having two buffers for the same file, you
need another buffer. This command is useful: >
command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_
\ | diffthis | wincmd p | diffthis
\ | diffthis | wincmd p | diffthis
(this is in |defaults.vim|). Use ":DiffOrig" to see the differences between
the current buffer and the file it was loaded from.

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 9.0. Last change: 2023 Jan 03
*eval.txt* For Vim version 9.0. Last change: 2023 Feb 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1372,7 +1372,7 @@ Note that the dot is also used for String concatenation. To avoid confusion
always put spaces around the dot for String concatenation.
expr10(expr1, ...) |Funcref| function call *E1085*
expr10(expr1, ...) |Funcref| function call *E1085*
When expr10 is a |Funcref| type variable, invoke the function it refers to.
@@ -1654,7 +1654,7 @@ See below |functions|.
lambda expression *expr-lambda* *lambda*
-----------------
{args -> expr1} legacy lambda expression *E451*
{args -> expr1} legacy lambda expression *E451*
(args) => expr1 |Vim9| lambda expression
A lambda expression creates a new unnamed function which returns the result of
@@ -4581,10 +4581,10 @@ The input is in the variable "line", the results in the variables "file",
getting the scriptnames in a Dictionary ~
*scriptnames-dictionary*
The |:scriptnames| command can be used to get a list of all script files that
have been sourced. There is no equivalent function or variable for this
(because it's rarely needed). In case you need to manipulate the list this
code can be used: >
The `:scriptnames` command can be used to get a list of all script files that
have been sourced. There is also the `getscriptinfo()` function, but the
information returned is not exactly the same. In case you need to manipulate
the output of `scriptnames` this code can be used: >
" Get the output of ":scriptnames" in the scriptnames_output variable.
let scriptnames_output = ''
redir => scriptnames_output

View File

@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 9.0. Last change: 2022 Apr 09
*filetype.txt* For Vim version 9.0. Last change: 2023 Feb 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -679,7 +679,10 @@ MARKDOWN *ft-markdown-plugin*
To enable folding use this: >
let g:markdown_folding = 1
<
'expandtab' will be set by default. If you do not want that use this: >
let g:markdown_recommended_style = 0
PDF *ft-pdf-plugin*

View File

@@ -1,4 +1,4 @@
*fold.txt* For Vim version 9.0. Last change: 2022 Nov 26
*fold.txt* For Vim version 9.0. Last change: 2023 Jan 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -202,7 +202,7 @@ non-matching marker pairs. Example: >
/* funcB() {{{2 */
void funcB() {}
< *{{{* *}}}*
A fold starts at a "{{{" marker. The following number specifies the fold
level. What happens depends on the difference between the current fold level
and the level given by the marker:

View File

@@ -48,7 +48,7 @@ typesetting command. That must be a function that takes a path and returns the
command as a List. For example:
>
def ConTeXtCustomCommand(path: string): list<string>
return ['mtxrun', '--script', 'context', '--nonstopmode, path]
return ['mtxrun', '--script', 'context', '--nonstopmode', path]
enddef
context.ConTeXtTypeset("%", v:none, ConTeXtCustomCommand)

View File

@@ -84,7 +84,7 @@ METAFONT buffers, and it is set to 0 by default in MetaPost buffers.
Define additional keywords that end indented blocks. For instance, if you
define:
>
g:mp_end_tag = ['\<endfoo\>']
g:mp_close_tag = ['\<endfoo\>']
<
any line starting with `endfoo` will be de-indented compared to its previous
line.

View File

@@ -1,4 +1,4 @@
*gui.txt* For Vim version 9.0. Last change: 2022 Nov 17
*gui.txt* For Vim version 9.0. Last change: 2023 Feb 26
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -95,11 +95,11 @@ terminal version.
Recommended place for your personal GUI initializations:
Unix $HOME/.gvimrc or $HOME/.vim/gvimrc
Win32 $HOME/_gvimrc, $HOME/vimfiles/gvimrc
Win32 $HOME/_gvimrc, $HOME/vimfiles/gvimrc
or $VIM/_gvimrc
Amiga s:.gvimrc, home:.gvimrc, home:vimfiles:gvimrc
or $VIM/.gvimrc
Haiku $HOME/config/settings/vim/gvimrc
Haiku $HOME/config/settings/vim/gvimrc
The personal initialization files are searched in the order specified above
and only the first one that is found is read.
@@ -856,7 +856,7 @@ Example for debugger tools: >
nnoremenu 1.20 WinBar.Next :Next<CR>
nnoremenu 1.30 WinBar.Finish :Finish<CR>
nnoremenu 1.40 WinBar.Cont :Continue<CR>
<
< *hl-ToolbarLine* *hl-ToolbarButton*
The window toolbar uses the ToolbarLine and ToolbarButton highlight groups.
When splitting the window the window toolbar is not copied to the new window.
@@ -1181,7 +1181,7 @@ When 'guifont' is set and a valid font is found in it and 'guifontwide' is
empty Vim will attempt to find a matching double-width font and set
'guifontwide' to it.
GTK+ GUI only: *guifontwide_gtk*
GTK+ GUI only: *guifontwide_gtk*
If set and valid, 'guifontwide' is always used for double width characters,
even if 'encoding' is not set to "utf-8".

View File

@@ -17,7 +17,7 @@ Vim's Win32 Graphical User Interface *gui-w32* *win32-gui*
Other relevant documentation:
|gui.txt| For generic items of the GUI.
|os_win32.txt| For Win32 specific items.
|os_win32.txt| For Win32 specific items.
==============================================================================

View File

@@ -101,7 +101,7 @@ Help on help files *helphelp*
find a tag in a file with the same language as the
current file. See |help-translated|.
*:helpc* *:helpclose*
*:helpc* *:helpclose*
:helpc[lose] Close one help window, if there is one.
Vim will try to restore the window layout (including
cursor position) to the same layout it was before

View File

@@ -857,7 +857,7 @@ You can test what Python version is available with: >
if has('python')
echo 'there is Python 2.x'
endif
if has('python3')
if has('python3')
echo 'there is Python 3.x'
endif
@@ -874,7 +874,7 @@ python support: >
echo 'Python 2.x dynamically loaded'
endif
endif
if has('python3_compiled')
if has('python3_compiled')
echo 'compiled with Python 3.x support'
if has('python3_dynamic')
echo 'Python 3.x dynamically loaded'

View File

@@ -236,7 +236,7 @@ tag char note action in Normal mode ~
|CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode (no-op)
|CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode'
CTRL-\ a - z reserved for extensions
CTRL-\ others not used
CTRL-\ others not used
|CTRL-]| CTRL-] :ta to ident under cursor
|CTRL-^| CTRL-^ edit Nth alternate file (equivalent to
":e #N")
@@ -247,7 +247,7 @@ tag char note action in Normal mode ~
2 filter Nmove text through the {filter}
command
|!!| !!{filter} 2 filter N lines through the {filter} command
|quote| "{register} use {register} for next delete, yank or put
|quote| "{register} use {register} for next delete, yank or put
({.%#:} only work with put)
|#| # 1 search backward for the Nth occurrence of
the ident under the cursor

View File

@@ -877,7 +877,7 @@ Groß): >
func Thesaur(findstart, base)
if a:findstart
return searchpos('\<', 'bnW', line('.'))[1] - 1
return searchpos('\<', 'bnW', line('.'))[1] - 1
endif
let res = []
let h = ''
@@ -1118,8 +1118,8 @@ cursor column will be replaced with the matches. If the returned value is
larger than the cursor column, the cursor column is used.
Negative return values:
-2 To cancel silently and stay in completion mode.
-3 To cancel silently and leave completion mode.
-2 To cancel silently and stay in completion mode.
-3 To cancel silently and leave completion mode.
Another negative value: completion starts at the cursor column
On the second invocation the arguments are:
@@ -1176,7 +1176,7 @@ items:
item with the same word is already present.
empty when non-zero this match will be added even when it is
an empty string
user_data custom data which is associated with the item and
user_data custom data which is associated with the item and
available in |v:completed_item|; it can be any type;
defaults to an empty string

View File

@@ -1,4 +1,4 @@
*map.txt* For Vim version 9.0. Last change: 2023 Jan 09
*map.txt* For Vim version 9.0. Last change: 2023 Feb 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -20,9 +20,10 @@ manual.
1.8 Examples |map-examples|
1.9 Using mappings |map-typing|
1.10 Mapping alt-keys |:map-alt-keys|
1.11 Mapping in modifyOtherKeys mode |modifyOtherKeys|
1.12 Mapping with Kitty keyboard protocol |kitty-keyboard-protocol|
1.13 Mapping an operator |:map-operator|
1.11 Mapping meta-keys |:map-meta-keys|
1.12 Mapping in modifyOtherKeys mode |modifyOtherKeys|
1.13 Mapping with Kitty keyboard protocol |kitty-keyboard-protocol|
1.14 Mapping an operator |:map-operator|
2. Abbreviations |abbreviations|
3. Local mappings and functions |script-local|
4. User-defined commands |user-commands|
@@ -794,8 +795,8 @@ otherwise you would not be able to use those commands anymore. Here are a few
suggestions:
- Function keys <F2>, <F3>, etc.. Also the shifted function keys <S-F1>,
<S-F2>, etc. Note that <F1> is already used for the help command.
- Meta-keys (with the ALT key pressed). Depending on your keyboard accented
characters may be used as well. |:map-alt-keys|
- Any key with the Alt or Meta key pressed. Depending on your keyboard
accented characters may be used as well. |:map-alt-keys|
- Use the '_' or ',' character and then any other character. The "_" and ","
commands do exist in Vim (see |_| and |,|), but you probably never use them.
- Use a key that is a synonym for another command. For example: CTRL-P and
@@ -844,7 +845,7 @@ option). After that it assumes that the 'q' is to be interpreted as such. If
you type slowly, or your system is slow, reset the 'timeout' option. Then you
might want to set the 'ttimeout' option.
*map-precedence*
*map-precedence*
Buffer-local mappings (defined using |:map-<buffer>|) take precedence over
global mappings. When a buffer-local mapping is the same as a global mapping,
Vim will use the buffer-local mapping. In addition, Vim will use a complete
@@ -922,12 +923,19 @@ in the original Vi, you would get back the text before the first undo).
1.10 MAPPING ALT-KEYS *:map-alt-keys*
For a readable mapping command the <A-k> form can be used. Note that <A-k>
and <A-K> are different, the latter will use an upper case letter. Actually,
<A-K> and <A-S-K> are the same. Instead of "A" you can use "M". If you have
an actual Meta modifier key, please see |:map-meta-keys|.
In the GUI Vim handles the Alt key itself, thus mapping keys with ALT should
always work. But in a terminal Vim gets a sequence of bytes and has to figure
out whether ALT was pressed or not.
If the terminal supports the modifyOtherKeys mode and it has been enabled,
then Vim can recognize more key combinations, see |modifyOtherKeys| below.
The Kitty keyboard protocol works in a similar way, see
|kitty-keyboard-protocol|.
By default Vim assumes that pressing the ALT key sets the 8th bit of a typed
character. Most decent terminals can work that way, such as xterm, aterm and
@@ -966,7 +974,21 @@ on the terminal; that's a good last resource in case you want to send ESC when
using other applications but not when inside Vim.
1.11 MAPPING IN modifyOtherKeys mode *modifyOtherKeys*
1.11 MAPPING META-KEYS *:map-meta-keys*
Mapping keys with the Meta modifier works very similar to using the Alt key.
What key on your keyboard produces the Meta modifier depends on your keyboard
and configuration.
Note that mapping <M-a> actually is for using the Alt key. That can be
confusing! It cannot be changed, it would not be backwards compatible.
For the Meta modifier the "T" character is used. For example, to map Meta-b
in Insert mode: >
:imap <T-b> terrible
1.12 MAPPING IN modifyOtherKeys mode *modifyOtherKeys*
Xterm and a few other terminals can be put in a mode where keys with modifiers
are sent with a special escape code. Vim recognizes these codes and can then
@@ -1011,7 +1033,7 @@ enabled when it spots an escape sequence that must have been created by it.
To see if Vim detected such an escape sequence use `:verbose map`, the first
line will then show "Seen modifyOtherKeys: true" (possibly translated).
This automatic detection depends on receiving an escape code starting with
This automatic detection depends on receiving an escape code starting with
"<1b>[27;". This is the normal way xterm sends these key codes. However, if
the *formatOtherKeys* resource is set another form is used that is not
recognized, therefore you must not set formatOtherKeys.
@@ -1028,7 +1050,7 @@ When the 'esckeys' option is off, then modifyOtherKeys will be disabled in
Insert mode to avoid every key with a modifier causing Insert mode to end.
1.12 MAPPING WITH KITTY KEYBOARD PROTOCOL *kitty-keyboard-protocol*
1.13 MAPPING WITH KITTY KEYBOARD PROTOCOL *kitty-keyboard-protocol*
If the value of 'term' contains "kitty" then Vim will send out an escape
sequence to enable the Kitty keyboard protocol. This can be changed with the
@@ -1051,11 +1073,11 @@ translated). The meaning of {value}:
On protocol is used
Disabled protocol was used but expected to have been disabled
by 't_TE'
Cleared protocol expected to have beeen disabled by 't_TE',
previous state is unknown
Cleared protocol expected to have been disabled by 't_TE',
previous state is unknown
1.13 MAPPING AN OPERATOR *:map-operator*
1.14 MAPPING AN OPERATOR *:map-operator*
An operator is used before a {motion} command. To define your own operator
you must create a mapping that first sets the 'operatorfunc' option and then
@@ -1195,7 +1217,7 @@ non-id The "non-id" type ends in a non-keyword character, the other
Examples of strings that cannot be abbreviations: "a.b", "#def", "a b", "_$r"
An abbreviation is only recognized when you type a non-keyword character.
This can also be the <Esc> that ends insert mode or the <CR> that ends a
This can also be the <Esc> that ends Insert mode or the <CR> that ends a
command. The non-keyword character which ends the abbreviation is inserted
after the expanded abbreviation. An exception to this is the character <C-]>,
which is used to expand an abbreviation without inserting any extra
@@ -1399,12 +1421,13 @@ this, they can be made local to the script.
*<SID>* *<SNR>* *E81*
The string "<SID>" can be used in a mapping or menu. This requires that the
'<' flag is not present in 'cpoptions'.
'<' flag is not present in 'cpoptions'. This is useful if you have a
script-local function that you want to call from a mapping in the same script.
When executing the map command, Vim will replace "<SID>" with the special
key code <SNR>, followed by a number that's unique for the script, and an
underscore. Example: >
:map <SID>Add
could define a mapping "<SNR>23_Add".
would define a mapping "<SNR>23_Add".
When defining a function in a script, "s:" can be prepended to the name to
make it local to the script (in |Vim9| script functions without a prefix are
@@ -1706,7 +1729,7 @@ by default correspond to the current line, last line and the whole buffer,
relate to arguments, (loaded) buffers, windows or tab pages.
Possible values are (second column is the short name used in listing):
-addr=lines Range of lines (this is the default for -range)
-addr=lines Range of lines (this is the default for -range)
-addr=arguments arg Range for arguments
-addr=buffers buf Range for buffers (also not loaded buffers)
-addr=loaded_buffers load Range for loaded buffers

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 9.0. Last change: 2023 Jan 02
*options.txt* For Vim version 9.0. Last change: 2023 Feb 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1547,7 +1547,7 @@ A jump table for the options with a short description can be found at |Q_op|.
case mapping, the current locale is not effective.
This probably only matters for Turkish.
*'cdhome'* *'cdh'*
*'cdhome'* *'cdh'* *'nocdhome'* *'nocdh'*
'cdhome' 'cdh' boolean (default: off)
global
When on, |:cd|, |:tcd| and |:lcd| without an argument changes the
@@ -1899,7 +1899,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'allowrevins' + off no CTRL-_ command
'antialias' + off don't use antialiased fonts
'arabic' + off reset arabic-related options
'arabic' + off reset arabic-related options
'arabicshape' + on correct character shapes
'backspace' + "" normal backspace
'backup' + off no backup file
@@ -4198,6 +4198,8 @@ A jump table for the options with a short description can be found at |Q_op|.
T:DiffText,>:SignColumn,-:Conceal,
B:SpellBad,P:SpellCap,R:SpellRare,
L:SpellLocal,+:Pmenu,=:PmenuSel,
[:PmenuKind,]:PmenuKindSel,
{:PmenuExtra,}:PmenuExtraSel,
x:PmenuSbar,X:PmenuThumb,*:TabLine,
#:TabLineSel,_:TabLineFill,!:CursorColumn,
.:CursorLine,o:ColorColumn,q:QuickFixLine,
@@ -4254,6 +4256,10 @@ A jump table for the options with a short description can be found at |Q_op|.
|hl-SpellLocal| L word from other region |spell|
|hl-Pmenu| + popup menu normal line
|hl-PmenuSel| = popup menu selected line
|hl-PmenuKind| [ popup menu "kind" normal line
|hl-PmenuKindSel| ] popup menu "kind" selected line
|hl-PmenuExtra| { popup menu "kind" normal line
|hl-PmenuExtraSel| } popup menu "kind" selected line
|hl-PmenuSbar| x popup menu scrollbar
|hl-PmenuThumb| X popup menu scrollbar thumb
@@ -4911,7 +4917,7 @@ A jump table for the options with a short description can be found at |Q_op|.
< This means that when 'term' contains "kitty, "foot" or "wezterm"
somewhere then the "kitty" protocol is used. When 'term' contains
"xterm" somewhere, then the "mok2" protocol is used.
"xterm" somewhere, then the "mok2" protocol is used.
The first match is used, thus if you want to have "kitty" use the
kitty protocol, but "badkitty" not, then you should match "badkitty"
@@ -4943,7 +4949,7 @@ A jump table for the options with a short description can be found at |Q_op|.
empty. Then set the 'term' option to have it take effect: >
set keyprotocol=
let &term = &term
<
*'keywordprg'* *'kp'*
'keywordprg' 'kp' string (default "man" or "man -s", DOS: ":help",
@@ -5201,8 +5207,8 @@ A jump table for the options with a short description can be found at |Q_op|.
are left blank.
*lcs-multispace*
multispace:c...
One or more characters to use cyclically to show for
multiple consecutive spaces. Overrides the "space"
One or more characters to use cyclically to show for
multiple consecutive spaces. Overrides the "space"
setting, except for single spaces. When omitted, the
"space" setting is used. For example,
`:set listchars=multispace:---+` shows ten consecutive
@@ -5665,7 +5671,7 @@ A jump table for the options with a short description can be found at |Q_op|.
The 'mousemodel' option is set by the |:behave| command.
*'mousemoveevent'* *'mousemev'*
*'mousemoveevent'* *'mousemev'* *'nomousemoveevent'* *'nomousemev'*
'mousemoveevent' 'mousemev' boolean (default off)
global
{only works in the GUI}
@@ -7157,7 +7163,7 @@ A jump table for the options with a short description can be found at |Q_op|.
A don't give the "ATTENTION" message when an existing *shm-A*
swap file is found
I don't give the intro message when starting Vim, *shm-I*
see |:intro|
see |:intro|
c don't give |ins-completion-menu| messages; for *shm-c*
example, "-- XXX completion (YYY)", "match 1 of 2", "The only
match", "Pattern not found", "Back at original", etc.
@@ -7167,8 +7173,8 @@ A jump table for the options with a short description can be found at |Q_op|.
F don't give the file info when editing a file, like *shm-F*
`:silent` was used for the command; note that this also
affects messages from autocommands
S do not show search count message when searching, e.g. *shm-S*
"[1/5]"
S do not show search count message when searching, e.g. *shm-S*
"[1/5]"
This gives you the opportunity to avoid that a change between buffers
requires you to hit <Enter>, but still gives as useful a message as
@@ -7345,9 +7351,9 @@ A jump table for the options with a short description can be found at |Q_op|.
{not available when compiled without the |+signs|
feature}
Whether or not to draw the signcolumn. Valid values are:
"auto" only when there is a sign to display
"no" never
"yes" always
"auto" only when there is a sign to display
"no" never
"yes" always
"number" display signs in the 'number' column. If the number
column is not present, then behaves like "auto".
@@ -7776,7 +7782,10 @@ A jump table for the options with a short description can be found at |Q_op|.
mark. This information is used for mouse clicks.
< - Where to truncate line if too long. Default is at the start.
No width fields allowed.
= - Separation point between left and right aligned items.
= - Separation point between alignment sections. Each section will
be separated by an equal number of spaces. With one %= what
comes after it will be right-aligned. With two %= there is a
middle part, with white space left and right of it.
No width fields allowed.
# - Set highlight group. The name must follow and then a # again.
Thus use %#HLname# for highlight group HLname. The same
@@ -7784,8 +7793,8 @@ A jump table for the options with a short description can be found at |Q_op|.
windows.
* - Set highlight group to User{N}, where {N} is taken from the
minwid field, e.g. %1*. Restore normal highlight with %* or %0*.
The difference between User{N} and StatusLine will be applied
to StatusLineNC for the statusline of non-current windows.
The difference between User{N} and StatusLine will be applied to
StatusLineNC for the statusline of non-current windows.
The number N must be between 1 and 9. See |hl-User1..9|
When displaying a flag, Vim removes the leading comma, if any, when
@@ -8231,7 +8240,7 @@ A jump table for the options with a short description can be found at |Q_op|.
:set encoding=utf-8
< You need to do this when your system has no locale support for UTF-8.
*'termguicolors'* *'tgc'* *E954*
*'termguicolors'* *'tgc'* *'notermguicolors'* *'notgc'* *E954*
'termguicolors' 'tgc' boolean (default off)
global
{not available when compiled without the

View File

@@ -10,7 +10,7 @@ This file contains the particulars for the z/OS UNIX version of Vim.
2. Putty and Colors |zOS-PuTTY|
3. Motif Problems |zOS-Motif|
4. Bugs |zOS-Bugs|
5. Limitations |zOS-limitations|
5. Limitations |zOS-limitations|
6. Open source on z/OS UNIX |zOS-open-source|
Contributors: ~
@@ -75,7 +75,7 @@ There is no solution for this yet.
this occurs in both the terminal and gui versions.
==============================================================================
5. Limitations *OS390-limitations* *zOS-limitations*
5. Limitations *OS390-limitations* *zOS-limitations*
- No binary search in tag files.
The program /bin/sort sorts by ASCII value by default. This program is

View File

@@ -203,7 +203,7 @@ You can check that everything is at the right place with the :version command.
Example LOGIN.COM: >
$ define/nolog VIM DKA0:[UTIL.VIM81]
$ define/nolog VIM DKA0:[UTIL.VIM81]
$ vi*m :== mcr VIM:VIM.EXE
$ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
$ set disp/create/node=192.168.10.202/trans=tcpip

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 9.0. Last change: 2022 Sep 24
*pattern.txt* For Vim version 9.0. Last change: 2023 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -101,6 +101,8 @@ g# Like "#", but don't put "\<" and "\>" around the word.
*gd*
gd Goto local Declaration. When the cursor is on a local
variable, this command will jump to its declaration.
This was made to work for C code, in other languages
it may not work well.
First Vim searches for the start of the current
function, just like "[[". If it is not found the
search stops in line 1. If it is found, Vim goes back
@@ -1142,21 +1144,21 @@ x A single character, with no special meaning, matches itself
are supported:
Name Func Contents ~
*[:alnum:]* [:alnum:] isalnum ASCII letters and digits
*[:alpha:]* [:alpha:] isalpha ASCII letters
*[:blank:]* [:blank:] space and tab
*[:cntrl:]* [:cntrl:] iscntrl ASCII control characters
*[:digit:]* [:digit:] decimal digits '0' to '9'
*[:alpha:]* [:alpha:] isalpha ASCII letters
*[:blank:]* [:blank:] space and tab
*[:cntrl:]* [:cntrl:] iscntrl ASCII control characters
*[:digit:]* [:digit:] decimal digits '0' to '9'
*[:graph:]* [:graph:] isgraph ASCII printable characters excluding
space
*[:lower:]* [:lower:] (1) lowercase letters (all letters when
'ignorecase' is used)
*[:print:]* [:print:] (2) printable characters including space
*[:print:]* [:print:] (2) printable characters including space
*[:punct:]* [:punct:] ispunct ASCII punctuation characters
*[:space:]* [:space:] whitespace characters: space, tab, CR,
*[:space:]* [:space:] whitespace characters: space, tab, CR,
NL, vertical tab, form feed
*[:upper:]* [:upper:] (3) uppercase letters (all letters when
'ignorecase' is used)
*[:xdigit:]* [:xdigit:] hexadecimal digits: 0-9, a-f, A-F
*[:xdigit:]* [:xdigit:] hexadecimal digits: 0-9, a-f, A-F
*[:return:]* [:return:] the <CR> character
*[:tab:]* [:tab:] the <Tab> character
*[:escape:]* [:escape:] the <Esc> character

View File

@@ -24,7 +24,7 @@ get the latest versions of scripts listed therein from http://vim.sf.net/.
==============================================================================
1. Contents *glvs-contents* *glvs* *getscript*
*GetLatestVimScripts*
*GetLatestVimScripts*
1. Contents........................................: |glvs-contents|
2. GetLatestVimScripts -- Getting Started..........: |glvs-install|
@@ -116,7 +116,7 @@ reflect the latest version of script(s) so downloaded.
==============================================================================
4. GetLatestVimScripts Data File *getscript-data* *glvs-data*
*:GetLatestVimScripts_dat*
*:GetLatestVimScripts_dat*
The data file <GetLatestVimScripts.dat> must have for its first two lines
the following text:
>
@@ -330,7 +330,7 @@ after/syntax/c.vim contained in it to overwrite a user's c.vim.
This variable holds the options to be used with the
g:GetLatestVimScripts_wget command.
>
g:GetLatestVimScripts_allowautoinstall
g:GetLatestVimScripts_allowautoinstall
< default= 1
This variable indicates whether GetLatestVimScripts is allowed
to attempt to automatically install scripts. Furthermore, the

View File

@@ -1085,8 +1085,8 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
<c-tab> Shrink/expand a netrw/explore window |netrw-c-tab|
- Makes Netrw go up one directory |netrw--|
a Cycles between normal display, |netrw-a|
hiding (suppress display of files matching g:netrw_list_hide)
and showing (display only files which match g:netrw_list_hide)
hiding (suppress display of files matching g:netrw_list_hide)
and showing (display only files which match g:netrw_list_hide)
cd Make browsing directory the current directory |netrw-cd|
C Setting the editing window |netrw-C|
d Make a directory |netrw-d|
@@ -1118,7 +1118,7 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
mX Apply arbitrary shell command to marked files en bloc|netrw-mX|
mz Compress/decompress marked files |netrw-mz|
o Enter the file/directory under the cursor in a new |netrw-o|
browser window. A horizontal split is used.
browser window. A horizontal split is used.
O Obtain a file specified by cursor |netrw-O|
p Preview the file |netrw-p|
P Browse in the previously used window |netrw-P|
@@ -1134,7 +1134,7 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
u Change to recently-visited directory |netrw-u|
U Change to subsequently-visited directory |netrw-U|
v Enter the file/directory under the cursor in a new |netrw-v|
browser window. A vertical split is used.
browser window. A vertical split is used.
x View file with an associated program |netrw-x|
X Execute filename under cursor via |system()| |netrw-X|
@@ -2271,7 +2271,7 @@ Example:
...
MARKED FILES, ARBITRARY SHELL COMMAND, EN BLOC *netrw-mX* {{{2
MARKED FILES, ARBITRARY SHELL COMMAND, EN BLOC *netrw-mX* {{{2
(See |netrw-mf| and |netrw-mr| for how to mark files)
(uses the global marked-file list)
@@ -2620,7 +2620,7 @@ your browsing preferences. (see also: |netrw-settings|)
Used to change access permission for a file.
*g:netrw_clipboard* =1
By default, netrw will attempt to insure that
By default, netrw will attempt to insure that
the clipboard's values will remain unchanged.
However, some users report that they have
speed problems with this; consequently, this
@@ -2768,7 +2768,7 @@ your browsing preferences. (see also: |netrw-settings|)
escaped before applying glob()
*g:netrw_gx* ="<cfile>"
This option controls how gx (|netrw-gx|) picks
This option controls how gx (|netrw-gx|) picks
up the text under the cursor. See |expand()|
for possibilities.
@@ -2834,11 +2834,11 @@ your browsing preferences. (see also: |netrw-settings|)
directory (|netrw-mt|, |netrw-mc|)
*g:netrw_localcopycmdopt* ='' Linux/Unix/MacOS/Cygwin
=' \c copy' Windows
=' \c copy' Windows
Options for the |g:netrw_localcopycmd|
*g:netrw_localcopydircmd* ="cp" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
=expand("$COMSPEC") Windows
Copies directories to target directory.
(|netrw-mc|, |netrw-mt|)
@@ -2864,7 +2864,7 @@ your browsing preferences. (see also: |netrw-settings|)
Options for |g:netrw_localmovecmd|
*g:netrw_localrmdir* ="rmdir" Linux/Unix/MacOS/Cygwin
=expand("$COMSPEC") Windows
=expand("$COMSPEC") Windows
Remove directory command (rmdir)
This variable is only used if your vim is
earlier than 7.4 or if your vim doesn't
@@ -2900,10 +2900,10 @@ your browsing preferences. (see also: |netrw-settings|)
(see |'ballooneval'|)
*g:netrw_sizestyle* not defined: actual bytes (default)
="b" : actual bytes (default)
="h" : human-readable (ex. 5k, 4m, 3g)
="b" : actual bytes (default)
="h" : human-readable (ex. 5k, 4m, 3g)
uses 1000 base
="H" : human-readable (ex. 5K, 4M, 3G)
="H" : human-readable (ex. 5K, 4M, 3G)
uses 1024 base
The long listing (|netrw-i|) and query-file
maps (|netrw-qf|) will display file size
@@ -2951,7 +2951,7 @@ your browsing preferences. (see also: |netrw-settings|)
default: "NETRWSERVER"
*g:netrw_sort_by* sort by "name", "time", "size", or
"exten".
"exten".
default: "name"
*g:netrw_sort_direction* sorting direction: "normal" or "reverse"
@@ -3008,7 +3008,7 @@ your browsing preferences. (see also: |netrw-settings|)
.vim/after/syntax/netrw.vim.
< The netrwGray highlighting is set up by
netrw when >
* netrwGray has not been previously
* netrwGray has not been previously
defined
* the gui is running
< As an example, I myself use a dark-background
@@ -3266,7 +3266,7 @@ If there are marked files: (see |netrw-mf|)
name, applying that substitute, and renaming each file to the result.
As an example : >
mr [query: reply with *.c]
mr [query: reply with *.c]
R [query: reply with s/^\(.*\)\.c$/\1.cpp/]
<
This example will mark all *.c files and then rename them to *.cpp
@@ -3275,7 +3275,7 @@ If there are marked files: (see |netrw-mf|)
The ctrl-X character has special meaning for renaming files: >
<c-x> : a single ctrl-x tells netrw to ignore the portion of the response
<c-x> : a single ctrl-x tells netrw to ignore the portion of the response
lying between the last '/' and the ctrl-x.
<c-x><c-x> : a pair of contiguous ctrl-x's tells netrw to ignore any
@@ -3843,7 +3843,7 @@ netrw:
Decho.vim is provided as a "vimball"; see |vimball-intro|. You
should edit the Decho.vba.gz file and source it in: >
vim Decho.vba.gz
vim Decho.vba.gz
:so %
:q
<
@@ -3885,7 +3885,7 @@ netrw:
To save the file: under linux, the output will be in a separate
remote server window; in it, just save the file with >
:w! DBG
:w! DBG
< Under a vim that doesn't support clientserver, your debugging
output will appear in another tab: >

View File

@@ -770,7 +770,7 @@ The second argument of |popup_create()| is a dictionary with options:
cursorline TRUE: Highlight the cursor line. Also scrolls the
text to show this line (only works properly
when 'wrap' is off).
zero: Do not highlight the cursor line.
zero: Do not highlight the cursor line.
Default is zero, except for |popup_menu()|.
filter A callback that can filter typed characters, see
|popup-filter|.

View File

@@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 9.0. Last change: 2022 Sep 26
*quickfix.txt* For Vim version 9.0. Last change: 2023 Jan 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -365,8 +365,6 @@ processing a quickfix or location list command, it will be aborted.
If numbers [from] and/or [to] are given, the respective
range of errors is listed. A negative number counts
from the last error backwards, -1 being the last error.
The 'switchbuf' settings are respected when jumping
to a buffer.
The |:filter| command can be used to display only the
quickfix entries matching a supplied pattern. The
pattern is matched against the filename, module name,
@@ -1279,7 +1277,7 @@ The .NET CLI compiler outputs both errors and warnings by default. The output
may be limited to include only errors, by setting the g:dotnet_errors_only
variable to |v:true|.
The associated project name is included in each error and warning. To supress
The associated project name is included in each error and warning. To suppress
the project name, set the g:dotnet_show_project_file variable to |v:false|.
Example: limit output to only display errors, and suppress the project name: >

View File

@@ -64,7 +64,7 @@ The following command line arguments are available:
below). The name used will be uppercase.
*--remote-send*
--remote-send {keys} Send {keys} to server and exit. The {keys}
are not mapped. Special key names are
are not mapped. Special key names are
recognized, e.g., "<CR>" results in a CR
character.
*--remote-expr*

View File

@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 9.0. Last change: 2022 Sep 22
*repeat.txt* For Vim version 9.0. Last change: 2023 Feb 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -267,7 +267,7 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
When [where] is omitted only 'runtimepath' is used.
Other values:
START search under "start" in 'packpath'
OPT search under "opt" in 'packpath'
OPT search under "opt" in 'packpath'
PACK search under "start" and "opt" in
'packpath'
ALL first use 'runtimepath', then search
@@ -423,6 +423,7 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
after resolving symbolic links got sourced with
another name the other script is after "->". E.g.
"20->22" means script 20 was sourced as script 22.
Also see `getscriptinfo()`.
{not available when compiled without the |+eval|
feature}
@@ -729,15 +730,15 @@ up-to-date easily, but it requires a program like "git" to be available.
You can do both, github can automatically create an archive for a release.
Your directory layout would be like this:
start/foobar/plugin/foo.vim " always loaded, defines commands
start/foobar/plugin/bar.vim " always loaded, defines commands
start/foobar/autoload/foo.vim " loaded when foo command used
start/foobar/doc/foo.txt " help for foo.vim
start/foobar/doc/tags " help tags
opt/fooextra/plugin/extra.vim " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt " help for extra.vim
opt/fooextra/doc/tags " help tags
start/foobar/plugin/foo.vim " always loaded, defines commands
start/foobar/plugin/bar.vim " always loaded, defines commands
start/foobar/autoload/foo.vim " loaded when foo command used
start/foobar/doc/foo.txt " help for foo.vim
start/foobar/doc/tags " help tags
opt/fooextra/plugin/extra.vim " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt " help for extra.vim
opt/fooextra/doc/tags " help tags
This allows for the user to do: >
mkdir ~/.vim/pack
@@ -1147,9 +1148,10 @@ long you take to respond to the input() prompt is irrelevant.
Profiling should give a good indication of where time is spent, but keep in
mind there are various things that may clobber the results:
- The accuracy of the time measured depends on the gettimeofday() system
function. It may only be as accurate as 1/100 second, even though the times
are displayed in micro seconds.
- The accuracy of the time measured depends on the gettimeofday(), or
clock_gettime if available, system function. The accuracy ranges from 1/100
second to nano seconds. With clock_gettime the times are displayed in nano
seconds, otherwise micro seconds. You can use `has("prof_nsec")`.
- Real elapsed time is measured, if other processes are busy they may cause
delays at unpredictable moments. You may want to run the profiling several

View File

@@ -1,4 +1,4 @@
*sign.txt* For Vim version 9.0. Last change: 2022 Dec 20
*sign.txt* For Vim version 9.0. Last change: 2023 Feb 21
VIM REFERENCE MANUAL by Gordon Prieur
@@ -614,23 +614,23 @@ sign_placelist({list})
|sign_place()| function. The {list} argument specifies the
List of signs to place. Each list item is a dict with the
following sign attributes:
buffer buffer name or number. For the accepted
buffer Buffer name or number. For the accepted
values, see |bufname()|.
group sign group. {group} functions as a namespace
group Sign group. {group} functions as a namespace
for {id}, thus two groups can use the same
IDs. If not specified or set to an empty
string, then the global group is used. See
|sign-group| for more information.
id sign identifier. If not specified or zero,
id Sign identifier. If not specified or zero,
then a new unique identifier is allocated.
Otherwise the specified number is used. See
|sign-identifier| for more information.
lnum line number in the buffer where the sign is to
lnum Line number in the buffer where the sign is to
be placed. For the accepted values, see
|line()|.
name name of the sign to place. See |sign_define()|
for more information.
priority priority of the sign. When multiple signs are
name Name of the sign to place. See |sign_define()|
for more information.
priority Priority of the sign. When multiple signs are
placed on a line, the sign with the highest
priority is used. If not specified, the
default value of 10 is used. See

View File

@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 9.0. Last change: 2022 Dec 26
*syntax.txt* For Vim version 9.0. Last change: 2023 Feb 26
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1307,18 +1307,32 @@ When not set 4 is used.
DOSBATCH *dosbatch.vim* *ft-dosbatch-syntax*
There is one option with highlighting DOS batch files. This covers new
extensions to the Command Interpreter introduced with Windows 2000 and
is controlled by the variable dosbatch_cmdextversion. For Windows NT
this should have the value 1, and for Windows 2000 it should be 2.
Select the set of Windows Command interpreter extensions that should be
supported with the variable dosbatch_cmdextversion. For versions of Windows
NT (before Windows 2000) this should have the value of 1. For Windows 2000
and later it should be 2.
Select the version you want with the following line: >
:let dosbatch_cmdextversion = 1
If this variable is not defined it defaults to a value of 2 to support
Windows 2000.
Windows 2000 and later.
A second option covers whether *.btm files should be detected as type
The original MS-DOS supports an idiom of using a double colon (::) as an
alternative way to enter a comment line. This idiom can be used with the
current Windows Command Interpreter, but it can lead to problems when used
inside ( ... ) command blocks. You can find a discussion about this on
Stack Overflow -
https://stackoverflow.com/questions/12407800/which-comment-style-should-i-use-in-batch-files
To allow the use of the :: idiom for comments in the Windows Command
Interpreter or working with MS-DOS bat files, set the
dosbatch_colons_comment variable to anything: >
:let dosbatch_colons_comment = 1
There is an option that covers whether *.btm files should be detected as type
"dosbatch" (MS-DOS batch files) or type "btm" (4DOS batch files). The latter
is used by default. You may select the former with the following line: >
@@ -2777,17 +2791,25 @@ For highlighted doctests and code inside: >
:let python_no_doctest_highlight = 1
or >
:let python_no_doctest_code_highlight = 1
(first option implies second one).
The first option implies the second one.
For highlighted trailing whitespace and mix of spaces and tabs: >
:let python_space_error_highlight = 1
If you want all possible Python highlighting (the same as setting the
preceding last option and unsetting all other ones): >
If you want all possible Python highlighting:
:let python_highlight_all = 1
This has the same effect as setting python_space_error_highlight and
unsetting all the other ones.
If you use Python 2 or straddling code (Python 2 and 3 compatible),
you can enforce the use of an older syntax file with support for
Python 2 and up to Python 3.5.
: let python_use_python2_syntax = 1
This option will exclude all modern Python 3.6 or higher features.
Note: Only existence of these options matters, not their value.
You can replace 1 above with anything.
Note: Only existence of these options matter, not their value. You can replace
1 above with anything.
QUAKE *quake.vim* *ft-quake-syntax*
@@ -3836,7 +3858,7 @@ SYNTAX ISKEYWORD SETTING *:syn-iskeyword*
clear: Syntax specific iskeyword setting is disabled and the
buffer-local 'iskeyword' setting is used.
{option} Set the syntax 'iskeyword' option to a new value.
{option} Set the syntax 'iskeyword' option to a new value.
Example: >
:syntax iskeyword @,48-57,192-255,$,_
@@ -5283,7 +5305,7 @@ guisp={color-name} *highlight-guisp*
(guisp) color to use in the GUI. "guisp" is used for undercurl and
strikethrough.
There are a few special names:
NONE no color (transparent)
NONE no color (transparent) *E1361*
bg use normal background color
background use normal background color
fg use normal foreground color
@@ -5356,7 +5378,7 @@ ColorColumn Used for the columns set with 'colorcolumn'.
*hl-Conceal*
Conceal Placeholder characters substituted for concealed
text (see 'conceallevel').
*hl-Cursor*
*hl-Cursor* *hl-lCursor*
Cursor Character under the cursor.
lCursor Character under the cursor when |language-mapping|
is used (see 'guicursor').
@@ -5430,6 +5452,14 @@ Normal Normal text.
Pmenu Popup menu: Normal item.
*hl-PmenuSel*
PmenuSel Popup menu: Selected item.
*hl-PmenuKind*
PmenuKind Popup menu: Normal item "kind".
*hl-PmenuKindSel*
PmenuKindSel Popup menu: Selected item "kind".
*hl-PmenuExtra*
PmenuExtra Popup menu: Normal item "extra text".
*hl-PmenuExtraSel*
PmenuExtraSel Popup menu: Selected item "extra text".
*hl-PmenuSbar*
PmenuSbar Popup menu: Scrollbar.
*hl-PmenuThumb*

View File

@@ -438,8 +438,10 @@ $quote eval.txt /*$quote*
'keymap' options.txt /*'keymap'*
'keymodel' options.txt /*'keymodel'*
'keyprotocol' options.txt /*'keyprotocol'*
'keywordprg' options.txt /*'keywordprg'*
'km' options.txt /*'km'*
'kmp' options.txt /*'kmp'*
'kp' options.txt /*'kp'*
'kpc' options.txt /*'kpc'*
'langmap' options.txt /*'langmap'*
'langmenu' options.txt /*'langmenu'*
@@ -566,6 +568,8 @@ $quote eval.txt /*$quote*
'nobreakindent' options.txt /*'nobreakindent'*
'nobri' options.txt /*'nobri'*
'nobuflisted' options.txt /*'nobuflisted'*
'nocdh' options.txt /*'nocdh'*
'nocdhome' options.txt /*'nocdhome'*
'nocf' options.txt /*'nocf'*
'noci' options.txt /*'noci'*
'nocin' options.txt /*'nocin'*
@@ -674,6 +678,8 @@ $quote eval.txt /*$quote*
'nomousef' options.txt /*'nomousef'*
'nomousefocus' options.txt /*'nomousefocus'*
'nomousehide' options.txt /*'nomousehide'*
'nomousemev' options.txt /*'nomousemev'*
'nomousemoveevent' options.txt /*'nomousemoveevent'*
'nonu' options.txt /*'nonu'*
'nonumber' options.txt /*'nonumber'*
'noodev' options.txt /*'noodev'*
@@ -743,10 +749,12 @@ $quote eval.txt /*$quote*
'notbidi' options.txt /*'notbidi'*
'notbs' options.txt /*'notbs'*
'notermbidi' options.txt /*'notermbidi'*
'notermguicolors' options.txt /*'notermguicolors'*
'noterse' options.txt /*'noterse'*
'notextauto' options.txt /*'notextauto'*
'notextmode' options.txt /*'notextmode'*
'notf' options.txt /*'notf'*
'notgc' options.txt /*'notgc'*
'notgst' options.txt /*'notgst'*
'notildeop' options.txt /*'notildeop'*
'notimeout' options.txt /*'notimeout'*
@@ -2451,6 +2459,7 @@ $quote eval.txt /*$quote*
:diffupdate diff.txt /*:diffupdate*
:dig digraph.txt /*:dig*
:digraphs digraph.txt /*:digraphs*
:dis change.txt /*:dis*
:disa vim9.txt /*:disa*
:disassemble vim9.txt /*:disassemble*
:display change.txt /*:display*
@@ -2840,6 +2849,7 @@ $quote eval.txt /*$quote*
:map-commands map.txt /*:map-commands*
:map-expression map.txt /*:map-expression*
:map-local map.txt /*:map-local*
:map-meta-keys map.txt /*:map-meta-keys*
:map-modes map.txt /*:map-modes*
:map-nowait map.txt /*:map-nowait*
:map-operator map.txt /*:map-operator*
@@ -4416,7 +4426,15 @@ E1351 vim9class.txt /*E1351*
E1352 vim9class.txt /*E1352*
E1353 vim9class.txt /*E1353*
E1354 vim9class.txt /*E1354*
E1355 vim9class.txt /*E1355*
E1356 vim9class.txt /*E1356*
E1357 vim9class.txt /*E1357*
E1358 vim9class.txt /*E1358*
E1359 vim9class.txt /*E1359*
E136 starting.txt /*E136*
E1360 vim9class.txt /*E1360*
E1361 syntax.txt /*E1361*
E1362 vim9class.txt /*E1362*
E137 starting.txt /*E137*
E138 starting.txt /*E138*
E139 message.txt /*E139*
@@ -5633,6 +5651,7 @@ View starting.txt /*View*
Vim9 vim9.txt /*Vim9*
Vim9-abstract-class vim9class.txt /*Vim9-abstract-class*
Vim9-class vim9class.txt /*Vim9-class*
Vim9-class-member vim9class.txt /*Vim9-class-member*
Vim9-class-overview vim9class.txt /*Vim9-class-overview*
Vim9-enum vim9class.txt /*Vim9-enum*
Vim9-script vim9.txt /*Vim9-script*
@@ -6311,7 +6330,6 @@ cino-} indent.txt /*cino-}*
cinoptions-values indent.txt /*cinoptions-values*
class vim9class.txt /*class*
class-function vim9class.txt /*class-function*
class-member vim9class.txt /*class-member*
clear-undo undo.txt /*clear-undo*
clearmatches() builtin.txt /*clearmatches()*
client-server remote.txt /*client-server*
@@ -7558,6 +7576,7 @@ getbufinfo() builtin.txt /*getbufinfo()*
getbufline() builtin.txt /*getbufline()*
getbufoneline() builtin.txt /*getbufoneline()*
getbufvar() builtin.txt /*getbufvar()*
getcellwidths() builtin.txt /*getcellwidths()*
getchangelist() builtin.txt /*getchangelist()*
getchar() builtin.txt /*getchar()*
getcharmod() builtin.txt /*getcharmod()*
@@ -7881,6 +7900,8 @@ hl-TabLineFill syntax.txt /*hl-TabLineFill*
hl-TabLineSel syntax.txt /*hl-TabLineSel*
hl-Terminal syntax.txt /*hl-Terminal*
hl-Title syntax.txt /*hl-Title*
hl-ToolbarButton gui.txt /*hl-ToolbarButton*
hl-ToolbarLine gui.txt /*hl-ToolbarLine*
hl-Tooltip syntax.txt /*hl-Tooltip*
hl-User1 syntax.txt /*hl-User1*
hl-User1..9 syntax.txt /*hl-User1..9*
@@ -7892,6 +7913,7 @@ hl-WarningMsg syntax.txt /*hl-WarningMsg*
hl-WildMenu syntax.txt /*hl-WildMenu*
hl-debugBreakpoint terminal.txt /*hl-debugBreakpoint*
hl-debugPC terminal.txt /*hl-debugPC*
hl-lCursor syntax.txt /*hl-lCursor*
hlID() builtin.txt /*hlID()*
hlexists() builtin.txt /*hlexists()*
hlget() builtin.txt /*hlget()*
@@ -10042,6 +10064,7 @@ t_channel-variable eval.txt /*t_channel-variable*
t_ci version4.txt /*t_ci*
t_cil version4.txt /*t_cil*
t_cl term.txt /*t_cl*
t_class-variable eval.txt /*t_class-variable*
t_cm term.txt /*t_cm*
t_cri version4.txt /*t_cri*
t_cs term.txt /*t_cs*
@@ -10106,6 +10129,7 @@ t_ms term.txt /*t_ms*
t_nd term.txt /*t_nd*
t_none-variable eval.txt /*t_none-variable*
t_number-variable eval.txt /*t_number-variable*
t_object-variable eval.txt /*t_object-variable*
t_op term.txt /*t_op*
t_se term.txt /*t_se*
t_sf1 version4.txt /*t_sf1*
@@ -10614,6 +10638,7 @@ v:t_TYPE eval.txt /*v:t_TYPE*
v:t_blob eval.txt /*v:t_blob*
v:t_bool eval.txt /*v:t_bool*
v:t_channel eval.txt /*v:t_channel*
v:t_class eval.txt /*v:t_class*
v:t_dict eval.txt /*v:t_dict*
v:t_float eval.txt /*v:t_float*
v:t_func eval.txt /*v:t_func*
@@ -10621,6 +10646,7 @@ v:t_job eval.txt /*v:t_job*
v:t_list eval.txt /*v:t_list*
v:t_none eval.txt /*v:t_none*
v:t_number eval.txt /*v:t_number*
v:t_object eval.txt /*v:t_object*
v:t_string eval.txt /*v:t_string*
v:termblinkresp eval.txt /*v:termblinkresp*
v:termrbgresp eval.txt /*v:termrbgresp*
@@ -11208,6 +11234,8 @@ zz scroll.txt /*zz*
{rhs} map.txt /*{rhs}*
{server} remote.txt /*{server}*
{subject} helphelp.txt /*{subject}*
{{{ fold.txt /*{{{*
{} intro.txt /*{}*
} motion.txt /*}*
}}} fold.txt /*}}}*
~ change.txt /*~*

View File

@@ -1,4 +1,4 @@
*tagsrch.txt* For Vim version 9.0. Last change: 2020 Dec 19
*tagsrch.txt* For Vim version 9.0. Last change: 2023 Feb 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -98,7 +98,7 @@ The ignore-case matches are found when:
- when 'tagcase' is "followscs" and 'ignorecase' is on or the 'smartcase'
option is on and the pattern does not contain an upper case character
- when 'tagcase' is "ignore"
- when 'tagcase' is "smart" and the patter does not contain an upper case
- when 'tagcase' is "smart" and the pattern does not contain an upper case
character
Note that using ignore-case tag searching disables binary searching in the

View File

@@ -1,4 +1,4 @@
*term.txt* For Vim version 9.0. Last change: 2023 Jan 09
*term.txt* For Vim version 9.0. Last change: 2023 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -322,9 +322,14 @@ using the "xterm" workaround. These are the relevant entries (so far):
PS "\033[200~" pasted text start |t_PS|
PE "\033[201~" pasted text end |t_PE|
XM "\033[?1006;1000%?%p1%{1}%=%th%el%;"
XM "\033[?1006;1004;1000%?%p1%{1}%=%th%el%;"
mouse enable / disable |t_XM|
The "XM" entry includes "1006" to enable SGR style mouse reporting. This
supports columns above 223. It also includes "1004" which enables focus
reporting. The t_fe and t_fd entries can be left empty (they don't have
entries in terminfo/termcap anyway).
*xterm-kitty* *kitty-terminal*
The Kitty terminal is a special case. Mainly because it works differently
from most other terminals, but also because, instead of trying the fit in and

View File

@@ -30,9 +30,9 @@ If the result is "1" you have it.
Using the client-server feature |terminal-client-server|
4. Remote testing |terminal-testing|
5. Diffing screen dumps |terminal-diff|
Writing a screen dump test for Vim |terminal-dumptest|
Creating a screen dump |terminal-screendump|
Comparing screen dumps |terminal-diffscreendump|
Writing a screen dump test for Vim |terminal-dumptest|
Creating a screen dump |terminal-screendump|
Comparing screen dumps |terminal-diffscreendump|
6. Debugging |terminal-debug|
Starting |termdebug-starting|
Example session |termdebug-example|
@@ -240,7 +240,7 @@ Command syntax ~
in a session file.
++shell Instead of executing {command}
directly, use a shell, like with
`:!command` *E279*
`:!command` *E279*
{only works on Unix and MS-Windows}
++kill={how} When trying to close the terminal
window kill the job with {how}. See

View File

@@ -197,7 +197,7 @@ test_gui_event({event}, {args})
Inject an event to select a tabline menu entry. The
supported items in {args} are:
tabnr: tab page number
item: tab page menu item number. 1 for the first
item: tab page menu item number. 1 for the first
menu item, 2 for the second item and so on.
After injecting the GUI events you probably should call
@@ -223,12 +223,12 @@ test_ignore_error({expr}) *test_ignore_error()*
Can also be used as a |method|: >
GetErrorText()->test_ignore_error()
test_mswin_event({event}, {args}) *test_mswin_event()*
Generate a low-level MS-Windows {event} with arguments {args}
for testing Vim functionality. It works for MS-Windows GUI
for testing Vim functionality. It works for MS-Windows GUI
and for the console.
{event} is a String and the supported values are:
"mouse" mouse event.
"key" keyboard event.
@@ -369,7 +369,7 @@ test_override({name}, {val}) *test_override()*
string is detected
ui_delay time in msec to use in ui_delay(); overrules a
wait time of up to 3 seconds for messages
uptime overrules sysinfo.uptime
uptime overrules sysinfo.uptime
vterm_title setting the window title by a job running in a
terminal window
ALL clear all overrides, except alloc_lines ({val} is

View File

@@ -56,7 +56,7 @@ how to highlight the text. The property type can have these entries:
priority will be used.
"start_incl" when TRUE inserts at the start position will be
included in the text property
"end_incl" when TRUE inserts at the end position will be
"end_incl" when TRUE inserts at the end position will be
included in the text property
@@ -107,14 +107,14 @@ prop_type_list([{props}]) get list of property types
Manipulating text properties:
prop_add({lnum}, {col}, {props}) add a text property
prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
prop_add({lnum}, {col}, {props}) add a text property
prop_add_list({props}, [{item}, ...])
add a text property at multiple
positions.
prop_clear({lnum} [, {lnum-end} [, {bufnr}]])
remove all text properties
prop_find({props} [, {direction}]) search for a text property
prop_list({lnum} [, {props}]) text properties in {lnum}
prop_list({lnum} [, {props}]) text properties in {lnum}
prop_remove({props} [, {lnum} [, {lnum-end}]])
remove a text property
@@ -149,7 +149,7 @@ prop_add({lnum}, {col}, {props})
highlighting; cannot be used with "length",
"end_lnum" and "end_col"
See |virtual-text| for more information.
*E1294*
*E1294*
text_align when "text" is present and {col} is zero;
specifies where to display the text:
after after the end of the line
@@ -172,7 +172,7 @@ prop_add({lnum}, {col}, {props})
fit:
wrap wrap the text to the next line
truncate truncate the text to make it fit
When omitted "truncate" is used.
When omitted "truncate" is used.
Note that this applies to the individual text
property, the 'wrap' option sets the overall
behavior
@@ -263,12 +263,12 @@ prop_add_list({props}, [{item}, ...])
It is not possible to add a text property with a "text" field
here.
Example:
Example: >
call prop_add_list(#{type: 'MyProp', id: 2},
\ [[1, 4, 1, 7],
\ [1, 15, 1, 20],
\ [2, 30, 3, 30]]
<
Can also be used as a |method|: >
GetProp()->prop_add_list([[1, 1, 1, 2], [1, 4, 1, 8]])

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 9.0. Last change: 2023 Jan 09
*todo.txt* For Vim version 9.0. Last change: 2023 Feb 26
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,6 +38,25 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
Crash when splitting window: #11961. Set RedrawingDisabled in
win_split_ins().
CI: include #12008 end of February.
In runtime/autoload/dist/script.vim change "set ft=" to "setlocal ft=" ?
CTRL-J mapping is not used if halfway another mapping. #12002
Is simplified mapping not used but escape code has been simplified?
Include #11952 after a runtime files update.
Errors when running tests with valgrind:
- test_codestyle.vim: e.g.:
command line..script /home/mool/vim/vim90/src/testdir/runtest.vim[569]..function RunTheTest[52]..Test_test_files line 6: keycode_check.vim: space before tab: Expected 0 but got 7
command line..script /home/mool/vim/vim90/src/testdir/runtest.vim[569]..function RunTheTest[52]..Test_test_files line 10: setup.vim: trailing white space: Expected 0 but got 23
- test_gui.vim:
Found errors in Test_gui_mouse_event():
Upcoming larger works:
- Make spell checking work with recent .dic/.aff files, e.g. French. #4916
Make Vim understand the format somehow? Search for "spell" below.
@@ -53,18 +72,36 @@ Upcoming larger works:
Further Vim9 improvements, possibly after launch:
- implement :class and :interface: See |vim9-classes| #11544
inheritance: how about super()?
inheritance: new() method from parent used in child?
import/export of a class
type() should return different type for each class?
give error for shadowing (variable and argument) when defining a class or
interface, not later when compiling it.
object empty(), len() - can class define a method to be used for them?
how about lock/unlock?
When checking "implements" also check types of members and function args.
- implement :class and :interface: See |vim9-classes
- Change access: public by default, private by prefixing "_".
Check for error: can't have same name twice (ignoring "_" prefix).
- Make ":defcompile ClassName" compile all functions and methods in the
class.
- Private methods?
either: private def Func()
or: def _Func()
Perhaps use "private" keyword instead of "_" prefix?
- "final" object members - can only be set in the constructor.
- accept line breaks in member initialization. #11957
- object empty(), len() - can class define a method to be used for them?
- add to help: when using a default new() method then reordering object
members may cause trouble. Can define new() without arguments to avoid.
- TODO items: check types for "implements" - members and methods
- how about lock/unlock?
- When checking "implements" also check types of members and function args.
- For chaining, allow using the class name as type for function return
value.
- Implement generics
- Add "instanceof" (exact class name). And "assignable" (class or child)?
- More efficient way for interface member index than iterating over list?
- a variant of type() that returns a different type for each class?
list<number> and list<string> should also differ.
- Issue #11822: any.Func() can be a dict or an object call, need to handle
this at runtime.
- implement :type
- implement :enum
- Promise class, could be used to wait on a popup close callback?
- class local to a function
- Use Vim9 for more runtime files.
- Inline call to map() and filter(), better type checking.
- When evaluating constants for script variables, some functions could work:
@@ -72,16 +109,20 @@ Further Vim9 improvements, possibly after launch:
- Implement as part of an expression: ++expr, --expr, expr++, expr--.
Information missing in terminfo:
Priority:
- Accept "hyper" and "meta" modifiers (16 and 32) from Kitty like Meta?
8 is actually "super".
- t_RV request terminal version string; xterm: "\033[>c"
change in terminfo for "RV" uses the wrong escape sequence... ?
Mouse support:
on/off: hard coded in mch_setmouse() - use "XM" terminfo/termcap entry;
If it starts with "\E[?1006;1000%" then set 'ttymouse' to "sgr".
change in terminfo for "RV" uses the wrong escape sequence 7 - 14 Jan only
Codes used for focus gained and lost (currently using use_xterm_like_mouse())
termcodes are hard-coded in set_termname(), not named.
Use the XF flag? enables recognizing the focus in/out events.
Check if t_fe is not empty.
Check for "1004" in t_XM. (disadvantage: only focus events when mouse is
used)
- t_fe enable focus-event tracking
- t_fd disable focus-event tracking
Modifiers for various keys
- flag to indicate "xterm compatible modifiers" ?
Underline and similar:
- t_AU - Set underline color: like "AF" and "AB" entries.
- t_Ce undercurl and underline end
@@ -278,11 +319,15 @@ Can we not request XT key sequences, or reduce them drastically?
Issue #10512: Dynamic loading broken with Perl 5.36
Damien has a patch (2022 Dec 4)
Request #11965: Allow severaql "%=" items in 'statusline', makes it possible
to have text in the center.
Add some kind of ":whathappend" command and functions to make visible what the
last few typed keys and executed commands are. To be used when the user
wonders what went wrong.
wonders what went wrong. Could also be used for statistics #12046.
- typed keys - Normal mode command - like what is recorded in a register and
displayed by 'showcmd'.
- register used - #12063
- executed command lines
- with more verbosity: what scripts/functions/autocommands were executed
@@ -317,7 +362,7 @@ Better terminal emulator support:
"xterm" and then add "kitty" entries.
Using "A" and "o" in manually created fold (in empty buffer) does not behave
consistenly (James McCoy, #10698)
consistently (James McCoy, #10698)
In a timer callback, when using ":echo" and then input() the message is
overwritten. Could use ":echowin" and call redraw_cmd() in get_user_input().
@@ -362,8 +407,6 @@ IDEA: when drawing the text, store the text byte index in ScreenLinesIdx[].
When converting screen column to text position use this.
The line number can be obtained from win->w_lines[].
MS-Windows: did path modifier :p:8 stop working? #8600
Version of getchar() that does not move the cursor - #10603 Use a separate
argument for the new flag.
@@ -445,6 +488,9 @@ Any way to convert "$" back by using a special value? (#6901)
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.
Add a v:register_used variable, which has the name of the register used for
the last command, e.g. put. #12003
Make the jumplist behave like a tag stack. (#7738) Should there be a more
time bound navigation, like with undo?
@@ -660,6 +706,7 @@ Added tests (James McCoy, 2016 Aug 3, #958). Still needs more work.
Would be nice to set tab-local values for 'diffexpr' and 'diffopt'. Use
t:diffexpr_option t:diffopt_option? (#4782)
Also make 'scrollopt' tab-local, remove "hor" only for the current tab page.
Internal diff doesn't handle binary file like external diff does. (Mike
Williams, 2018 Oct 30)
@@ -1150,9 +1197,6 @@ Avoids exceptions, e.g. when using the b: namespace as a dict.
Patch to make v:shell_error writable. (Christian Brabandt, 2016 Sep 27)
Useful to restore it. Is there another solution?
"ci[" does not look for next [ like ci" does look for next ".
(J.F. 2017 Jan 7)
Patch for wrong cursor position on wrapped line, involving breakindent.
(Ozaki Kiichi, 2016 Nov 25)
@@ -1176,9 +1220,6 @@ Should :vmap in matchit.vim be :xmap? (Tony Mechelynck)
Problem with whitespace in errorformat. (Gerd Wachsmuth, 2016 May 15, #807)
Add "unicode true" to NSIS installer. Doesn't work with Windows 95, which we
no longer support.
Support sort(l, 'F'), convert strings to float. (#7857)
sort() is not stable when using numeric/float sort (Nikolay Pavlov, 2016 Sep
@@ -1364,9 +1405,6 @@ Do not include the linebreak at the start?
Feature request: add the "al" text object, to manipulate a screen line.
Especially useful when using 'linebreak'
":cd C:\Windows\System32\drivers\etc*" does not work, even though the
directory exists. (Sergio Gallelli, 2013 Dec 29)
Patch to avoid redrawing tabline when the popup menu is visible.
(Christian Brabandt, 2016 Jan 28)
@@ -2951,10 +2989,6 @@ Win32 GUI known bugs:
console, go back to Vim and click "reload" in the dialog for the changed
file: Window moves with the cursor!
Put focus event in input buffer and let generic Vim code handle it?
8 Win32 GUI: With maximized window, ":set go-=r" doesn't use the space that
comes available. (Poucet) It works OK on Win 98 but doesn't work on Win
NT 4.0. Leaves a grey area where the scrollbar was. ":set go+=r" also
doesn't work properly.
8 When Vim is minimized and when maximizing it a file-changed dialog pops
up, Vim isn't maximized. It should be done before the dialog, so that it
appears in the right position. (Webb)
@@ -3478,8 +3512,6 @@ Problems that will (probably) not be solved:
input method called from GDK code. Without Perl it doesn't crash.
- VMS: Vimdiff doesn't work with the VMS diff, because the output looks
different. This makes test 47 fail. Install a Unix-compatible diff.
- Win32 GUI: mouse wheel always scrolls rightmost window. The events arrive
in Vim as if the rightmost scrollbar was used.
- GTK with Gnome: Produces an error message when starting up:
Gdk-WARNING **: locale not supported by C library
This is caused by the gnome library gnome_init() setting $LC_CTYPE to
@@ -4436,8 +4468,6 @@ Tags:
Win32 GUI:
8 Make debug mode work while starting up (vim -D). Open console window for
the message and input?
7 GvimExt: when there are several existing Vims, move the list to a submenu.
(Mike McCollister)
8 When using "Edit with Vim" for one file it changes directory, when several
files are selected and using "Edit with single Vim" the directory isn't
changed. At least change directory when the path is the same for all
@@ -5982,7 +6012,7 @@ Various improvements:
many percent down the windows).
- Make it possible for the 'showbreak' to be displayed at the end of the
line. Use a comma to separate the part at the end and the start of the
line? Highlight the linebreak characters, add flag in 'highlight'.
line? #754 Highlight the linebreak characters, add flag in 'highlight'.
Make 'showbreak' local to a window.
- Some string options should be expanded if they have wildcards, e.g.
'dictionary' when it is "*.h".

View File

@@ -250,7 +250,7 @@ Credit Card: You can use PayPal to send money with a Credit card. This is
Bram@iccf-holland.org
Others: Transfer to this account if possible:
ING bank: IBAN: NL95 INGB 0004 5487 74
ING bank: IBAN: NL95 INGB 0004 5487 74
Swift code: INGBNL2A
under the name "stichting ICCF Holland", Amersfoort
Checks are not accepted.

View File

@@ -1,4 +1,4 @@
*userfunc.txt* For Vim version 9.0. Last change: 2023 Jan 09
*userfunc.txt* For Vim version 9.0. Last change: 2023 Feb 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -211,7 +211,8 @@ See |:verbose-cmd| for more information.
*function-argument* *a:var*
An argument can be defined by giving its name. In the function this can then
be used as "a:name" ("a:" for argument).
be used as "a:name" ("a:" for argument) (in a `:def` function "a:" is not
used).
*a:0* *a:1* *a:000* *E740* *...*
Up to 20 arguments can be given, separated by commas. After the named
arguments an argument "..." can be specified, which means that more arguments
@@ -246,9 +247,10 @@ Example: >
call Something('key', 20) "key: 20"
The argument default expressions are evaluated at the time of the function
call, not definition. Thus it is possible to use an expression which is
invalid the moment the function is defined. The expressions are also only
evaluated when arguments are not specified during a call.
call, not when the function is defined. Thus it is possible to use an
expression which is invalid the moment the function is defined. The
expressions are also only evaluated when arguments are not specified during a
call.
*none-function_argument*
You can pass |v:none| to use the default expression. Note that this means you
cannot pass v:none as an ordinary value when an argument has a default

View File

@@ -505,7 +505,7 @@ You can use the error ID at the start to find help about it: >
:help E37
Summary: *help-summary* >
Summary: *help-summary* >
1) Use Ctrl-D after typing a topic and let Vim show all available topics.
Or press Tab to complete: >

View File

@@ -409,7 +409,7 @@ an archive or as a repository. For an archive you can follow these steps:
package.
2. unpack the archive in that directory. This assumes the top
directory in the archive is "start": >
cd ~/.vim/pack/fancy
cd ~/.vim/pack/fancy
unzip /tmp/fancy.zip
< If the archive layout is different make sure that you end up with a
path like this:

View File

@@ -77,25 +77,25 @@ browser. This is what you get: >
9. Directory Browsing netrw-browse netrw-dir netrw-list netrw-help
MAPS netrw-maps
<F1>.............Help.......................................|netrw-help|
<cr>.............Browsing...................................|netrw-cr|
<del>............Deleting Files or Directories..............|netrw-delete|
-................Going Up...................................|netrw--|
a................Hiding Files or Directories................|netrw-a|
mb...............Bookmarking a Directory....................|netrw-mb|
gb...............Changing to a Bookmarked Directory.........|netrw-gb|
cd...............Make Browsing Directory The Current Dir....|netrw-c|
d................Make A New Directory.......................|netrw-d|
D................Deleting Files or Directories..............|netrw-D|
<c-h>............Edit File/Directory Hiding List............|netrw-ctrl-h|
i................Change Listing Style.......................|netrw-i|
<c-l>............Refreshing the Listing.....................|netrw-ctrl-l|
o................Browsing with a Horizontal Split...........|netrw-o|
p................Use Preview Window.........................|netrw-p|
P................Edit in Previous Window....................|netrw-p|
q................Listing Bookmarks and History..............|netrw-qb|
r................Reversing Sorting Order....................|netrw-r|
< (etc)
<F1>.............Help.......................................|netrw-help|
<cr>.............Browsing...................................|netrw-cr|
<del>............Deleting Files or Directories..............|netrw-delete|
-................Going Up...................................|netrw--|
a................Hiding Files or Directories................|netrw-a|
mb...............Bookmarking a Directory....................|netrw-mb|
gb...............Changing to a Bookmarked Directory.........|netrw-gb|
cd...............Make Browsing Directory The Current Dir....|netrw-c|
d................Make A New Directory.......................|netrw-d|
D................Deleting Files or Directories..............|netrw-D|
<c-h>............Edit File/Directory Hiding List............|netrw-ctrl-h|
i................Change Listing Style.......................|netrw-i|
<c-l>............Refreshing the Listing.....................|netrw-ctrl-l|
o................Browsing with a Horizontal Split...........|netrw-o|
p................Use Preview Window.........................|netrw-p|
P................Edit in Previous Window....................|netrw-p|
q................Listing Bookmarks and History..............|netrw-qb|
r................Reversing Sorting Order....................|netrw-r|
< (etc)
The <F1> key thus brings you to a netrw directory browsing contents help page.
It's a regular help page; use the usual |CTRL-]| to jump to tagged help items
@@ -106,7 +106,7 @@ To select files for display and editing: (with the cursor is atop a filename)
<enter> Open the file in the current window. |netrw-cr|
o Horizontally split window and display file |netrw-o|
v Vertically split window and display file |netrw-v|
p Use the |preview-window| |netrw-p|
p Use the |preview-window| |netrw-p|
P Edit in the previous window |netrw-P|
t Open file in a new tab |netrw-t|

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 9.0. Last change: 2022 Dec 20
*usr_41.txt* For Vim version 9.0. Last change: 2023 Jan 17
VIM USER MANUAL - by Bram Moolenaar

View File

@@ -8123,7 +8123,7 @@ Files: src/message.c
Patch 7.2.119
Problem: Status line is redrawn too often.
Solution: Check ScreeenLinesUC[] properly. (Yukihiro Nakadaira)
Solution: Check ScreenLinesUC[] properly. (Yukihiro Nakadaira)
Files: src/screen.c
Patch 7.2.120
@@ -9782,8 +9782,8 @@ Files: src/syntax.c
Patch 7.2.406
Problem: Patch 7.2.119 introduces uninit mem read. (Dominique Pelle)
Solution: Only used ScreeenLinesC when ScreeenLinesUC is not zero. (Yukihiro
Nakadaira) Also clear ScreeenLinesC when allocating.
Solution: Only used ScreenLinesC when ScreenLinesUC is not zero. (Yukihiro
Nakadaira) Also clear ScreenLinesC when allocating.
Files: src/screen.c
Patch 7.2.407

View File

@@ -342,11 +342,11 @@ New Vim variables: ~
|v:mouse_winid| Window ID for a mouse click obtained with |getchar()|
|v:none| an empty String, used for JSON
|v:null| an empty String, used for JSON
|v:option_new| new value of the option, used by |OptionSet|
|v:option_old| old value of the option, used by |OptionSet|
|v:option_new| new value of the option, used by |OptionSet|
|v:option_old| old value of the option, used by |OptionSet|
|v:option_oldlocal| old local value of the option, used by |OptionSet|
|v:option_oldglobal| old global value of the option, used by |OptionSet|
|v:option_type| scope of the set command, used by |OptionSet|
|v:option_type| scope of the set command, used by |OptionSet|
|v:option_command| command used to set the option, used by |OptionSet|
|v:progpath| the command with which Vim was invoked
|v:t_bool| value of Boolean type

View File

@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 9.0. Last change: 2022 Dec 08
*vim9.txt* For Vim version 9.0. Last change: 2023 Feb 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -105,7 +105,7 @@ script and `:def` functions; details are below:
`:open`
`:s` with only flags
`:t`
`:xit`
`:xit`
- Some commands, especially those used for flow control, cannot be shortened.
E.g., `:throw` cannot be written as `:th`. *vim9-no-shorten*
- You cannot use curly-braces names.
@@ -113,7 +113,7 @@ script and `:def` functions; details are below:
:%s/this/that
- Executing a register with "@r" does not work, you can prepend a colon or use
`:exe`: >
:exe @a
:exe @a
- Unless mentioned specifically, the highest |scriptversion| is used.
- When defining an expression mapping, the expression will be evaluated in the
context of the script where it was defined.
@@ -265,7 +265,7 @@ Detail: this is because "Inner" will actually become a function reference to a
function with a generated name.
It is not possible to define a script-local function in a function. You can
define a local function and assign it to a script-local funcref (it must have
define a local function and assign it to a script-local Funcref (it must have
been declared at the script level). It is possible to define a global
function by using the "g:" prefix.
@@ -340,7 +340,7 @@ function, the function does not need to be defined more than once: >
Variable declarations with :var, :final and :const ~
*vim9-declaration* *:var* *E1079*
*E1017* *E1020* *E1054* *E1087* *E1108* *E1124*
*E1017* *E1020* *E1054* *E1087* *E1124*
Local variables need to be declared with `:var`. Local constants need to be
declared with `:final` or `:const`. We refer to both as "variables" in this
section.
@@ -388,7 +388,6 @@ used: >
echo temp # Error!
This is especially useful in a user command: >
command -range Rename {
var save = @a
@a = 'some expression'
@@ -397,7 +396,6 @@ This is especially useful in a user command: >
}
And with autocommands: >
au BufWritePre *.go {
var save = winsaveview()
silent! exe ':%! some formatting command'
@@ -624,7 +622,7 @@ Additionally, a lambda can contain statements in {}: >
}
This can be useful for a timer, for example: >
var count = 0
var timer = timer_start(500, (_) => {
var timer = timer_start(500, (_) => {
count += 1
echom 'Handler called ' .. count
}, {repeat: 3})
@@ -746,7 +744,7 @@ continuation is used without a backslash and a line starts with a bar: >
*E1050*
To make it possible for the operator at the start of the line to be
recognized, it is required to put a colon before a range. This example will
add "start" and print: >
add "start" and "print": >
var result = start
+ print
Like this: >
@@ -805,7 +803,7 @@ Notes:
echo [1, 2]
[3, 4]
- In some cases it is difficult for Vim to parse a command, especially when
commands are used as an argument to another command, such as `windo`. In
commands are used as an argument to another command, such as `:windo`. In
those cases the line continuation with a backslash has to be used.
@@ -826,7 +824,7 @@ White space is required around most operators.
White space is required in a sublist (list slice) around the ":", except at
the start and end: >
otherlist = mylist[v : count] # v:count has a different meaning
otherlist = mylist[v : count] # v:count has a different meaning
otherlist = mylist[:] # make a copy of the List
otherlist = mylist[v :]
otherlist = mylist[: v]
@@ -881,7 +879,7 @@ This works for alphanumeric characters, underscore and dash. If you want to
use another character, use a single or double quoted string: >
var dict = {'key with space': value}
var dict = {"key\twith\ttabs": value}
var dict = {'': value} # empty key
var dict = {'': value} # empty key
< *E1139*
In case the key needs to be an expression, square brackets can be used, just
like in JavaScript: >
@@ -1256,6 +1254,7 @@ level. They cannot be created in a function, also not in a legacy function.
:defc[ompile] Compile functions defined in the current script that
were not compiled yet.
This will report any errors found during compilation.
This excludes functions defined inside a class.
:defc[ompile] {func}
:defc[ompile] debug {func}
@@ -1263,6 +1262,10 @@ level. They cannot be created in a function, also not in a legacy function.
Compile function {func}, if needed. Use "debug" and
"profile" to specify the compilation mode.
This will report any errors found during compilation.
{func} call also be "ClassName.functionName" to
compile a function or method in a class.
{func} call also be "ClassName" to compile all
functions and methods in a class.
*:disa* *:disassemble*
:disa[ssemble] {func} Show the instructions generated for {func}.
@@ -1311,7 +1314,7 @@ Closures defined in a loop will share the same context. For example: >
< *E1271*
A closure must be compiled in the context that it is defined in, so that
variables in that context can be found. This mostly happens correctly, except
when a function is marked for debugging with `breakadd` after it was compiled.
when a function is marked for debugging with `:breakadd` after it was compiled.
Make sure to define the breakpoint before compiling the outer function.
The "inloop" variable will exist only once, all closures put in the list refer
@@ -1353,7 +1356,7 @@ closure: >
}
endfor
Using `echowindow` is useful in a timer, the messages go into a popup and will
Using `:echowindow` is useful in a timer, the messages go into a popup and will
not interfere with what the user is doing when it triggers.
@@ -1404,7 +1407,7 @@ to a Vim9 function:
echo line(1) .. line(2)
- line continuation does not always require a backslash: >
echo ['one',
echo ['one',
\ 'two',
\ 'three'
\ ]
@@ -1594,7 +1597,7 @@ That is because the declaration looks like a list of numbers, thus is
equivalent to: >
var ll: list<number> = [1, 2, 3]
If you do want a more permissive list you need to declare the type: >
var ll: list<any = [1, 2, 3]
var ll: list<any> = [1, 2, 3]
ll->extend(['x']) # OK
@@ -1661,8 +1664,8 @@ type, it can not be used in Vim9 script.
*E1211* *E1217* *E1218* *E1219* *E1220* *E1221*
*E1222* *E1223* *E1224* *E1225* *E1226* *E1227*
*E1228* *E1238* *E1250* *E1251* *E1252* *E1253*
*E1256* *E1297* *E1298* *E1301*
*E1228* *E1238* *E1250* *E1251* *E1252* *E1256*
*E1297* *E1298* *E1301*
Types are checked for most builtin functions to make it easier to spot
mistakes.

View File

@@ -1,21 +1,22 @@
*vim9class.txt* For Vim version 9.0. Last change: 2023 Jan 09
*vim9class.txt* For Vim version 9.0. Last change: 2023 Feb 26
VIM REFERENCE MANUAL by Bram Moolenaar
NOTE - This is under development, anything can still change! - NOTE
NOTE - This is not finished yet, anything can still change! - NOTE
Vim9 classes, objects, interfaces, types and enums.
1. Overview |Vim9-class-overview|
2. A simple class |Vim9-simple-class|
3. Using an abstract class |Vim9-abstract-class|
4. Using an interface |Vim9-using-interface|
5. More class details |Vim9-class|
6. Type definition |Vim9-type|
7. Enum |Vim9-enum|
3. Class members and functions |Vim9-class-member|
4. Using an abstract class |Vim9-abstract-class|
5. Using an interface |Vim9-using-interface|
6. More class details |Vim9-class|
7. Type definition |Vim9-type|
8. Enum |Vim9-enum|
9. Rationale
10. To be done later
@@ -25,25 +26,25 @@ Vim9 classes, objects, interfaces, types and enums.
1. Overview *Vim9-class-overview*
The fancy term is "object-oriented programming". You can find lots of study
material about this subject. Here we document what |Vim9| script provides,
assuming you know the basics already. Added are helpful hints about how
to use this functionality effectively.
material on this subject. Here we document what |Vim9| script provides,
assuming you know the basics already. Added are helpful hints about how to
use this functionality effectively.
The basic item is an object:
- An object stores state. It contains one or more variables that can each
have a value.
- An object usually provides functions that manipulate its state. These
- An object provides functions that use and manipulate its state. These
functions are invoked "on the object", which is what sets it apart from the
traditional separation of data and code that manipulates the data.
- An object has a well defined interface, with typed member variables and
member functions.
- Objects are created by a class and all objects have the same interface.
This never changes, it is not dynamic.
- Objects are created from a class and all objects have the same interface.
This does not change at runtime, it is not dynamic.
An object can only be created by a class. A class provides:
- A new() method, the constructor, which returns an object for the class.
This method is invoked on the class name: MyClass.new().
- State shared by all objects of the class: class variables and constants.
- State shared by all objects of the class: class variables (class members).
- A hierarchy of classes, with super-classes and sub-classes, inheritance.
An interface is used to specify properties of an object:
@@ -62,17 +63,18 @@ teachers use real-world objects to explain class relations and you might think
your model should therefore reflect the real world. It doesn't! The model
should match your purpose.
You will soon find that composition is often better than inheritance. Don't
waste time trying to find the optimal class model. Or waste time discussing
whether a square is a rectangle or that a rectangle is a square. It doesn't
matter.
Keep in mind that composition (an object contains other objects) is often
better than inheritance (an object extends another object). Don't waste time
trying to find the optimal class model. Or waste time discussing whether a
square is a rectangle or that a rectangle is a square. It doesn't matter.
==============================================================================
2. A simple class *Vim9-simple-class*
Let's start with a simple example: a class that stores a text position: >
Let's start with a simple example: a class that stores a text position (see
below for how to do this more efficiently): >
class TextPosition
this.lnum: number
@@ -107,7 +109,7 @@ The object members "lnum" and "col" can be accessed directly: >
< *E1317* *E1327*
If you have been using other object-oriented languages you will notice that
in Vim the object members are consistently referred to with the "this."
prefix. This is different from languages like Java and TypeScript. This
prefix. This is different from languages like Java and TypeScript. The
naming convention makes the object members easy to spot. Also, when a
variable does not have the "this." prefix you know it is not an object member.
@@ -117,9 +119,9 @@ Member write access ~
Now try to change an object member directly: >
pos.lnum = 9
< *E1335*
< *E1335*
This will give you an error! That is because by default object members can be
read but not set. That's why the class provides a method for it: >
read but not set. That's why the TextPosition class provides a method for it: >
pos.SetLnum(9)
@@ -128,12 +130,12 @@ way. Most often there is no problem using a value, while setting a value may
have side effects that need to be taken care of. In this case, the SetLnum()
method could check if the line number is valid and either give an error or use
the closest valid value.
*:public* *E1331*
*:public* *E1331*
If you don't care about side effects and want to allow the object member to be
changed at any time, you can make it public: >
public this.lnum: number
public this.col number
public this.col: number
Now you don't need the SetLnum(), SetCol() and SetPosition() methods, setting
"pos.lnum" directly above will no longer give an error.
@@ -153,7 +155,7 @@ name: >
this._col number
Now you need to provide methods to get the value of the private members.
These are commonly call getters. We recommend using a name that starts with
These are commonly called getters. We recommend using a name that starts with
"Get": >
def GetLnum(): number
@@ -181,6 +183,7 @@ Simplifying the new() method ~
Many constructors take values for the object members. Thus you very often see
this pattern: >
class SomeClass
this.lnum: number
this.col: number
@@ -188,6 +191,7 @@ this pattern: >
this.lnum = lnum
this.col = col
enddef
endclass
Not only is this text you need to write, it also has the type of each member
twice. Since this is so common a shorter way to write new() is provided: >
@@ -197,8 +201,24 @@ twice. Since this is so common a shorter way to write new() is provided: >
The semantics are easy to understand: Providing the object member name,
including "this.", as the argument to new() means the value provided in the
new() call is assigned to that object member. This mechanism is coming from
the Dart language.
new() call is assigned to that object member. This mechanism comes from the
Dart language.
Putting together this way of using new() and making the members public results
in a much shorter class definition as what we started with: >
class TextPosition
public this.lnum: number
public this.col: number
def new(this.lnum, this.col)
enddef
def SetPosition(lnum: number, col: number)
this.lnum = lnum
this.col = col
enddef
endclass
The sequence of constructing a new object is:
1. Memory is allocated and cleared. All values are zero/false/empty.
@@ -208,22 +228,69 @@ The sequence of constructing a new object is:
3. Arguments in the new() method in the "this.name" form are assigned.
4. The body of the new() method is executed.
TODO: for a sub-class the constructor of the parent class will be invoked
somewhere.
If the class extends a parent class, the same thing happens. In the second
step the members of the parent class are done first. There is no need to call
"super()" or "new()" on the parent.
==============================================================================
3. Using an abstract class *Vim9-abstract-class*
3. class members and functions *Vim9-class-member*
*:static* *E1337* *E1338*
Class members are declared with "static". They are used by the name without a
prefix: >
class OtherThing
this.size: number
static totalSize: number
def new(this.size)
totalSize += this.size
enddef
endclass
< *E1340* *E1341*
Since the name is used as-is, shadowing the name by a function argument name
or local variable name is not allowed.
Just like object members the access can be made private by using an underscore
as the first character in the name, and it can be made public by prefixing
"public": >
class OtherThing
static total: number # anybody can read, only class can write
static _sum: number # only class can read and write
public static result: number # anybody can read and write
endclass
<
*class-function*
Class functions are also declared with "static". They have no access to
object members, they cannot use the "this" keyword. >
class OtherThing
this.size: number
static totalSize: number
# Clear the total size and return the value it had before.
static def ClearTotalSize(): number
var prev = totalSize
totalSize = 0
return prev
enddef
endclass
Inside the class the function can be called by name directly, outside the
class the class name must be prefixed: `OtherThing.ClearTotalSize()`.
==============================================================================
4. Using an abstract class *Vim9-abstract-class*
An abstract class forms the base for at least one sub-class. In the class
model one often finds that a few classes have the same properties that can be
shared, but a class with those properties does not have enough state to create
shared, but a class with these properties does not have enough state to create
an object from. A sub-class must extend the abstract class and add the
missing state and/or methods before it can be used to create objects for.
An abstract class does not have a new() method.
For example, a Shape class could store a color and thickness. You cannot
create a Shape object, it is missing the information about what kind of shape
it is. The Shape class functions as the base for a Square and a Triangle
@@ -249,51 +316,13 @@ class, for which objects can be created. Example: >
enddef
endclass
<
*class-member* *:static* *E1337* *E1338*
Class members are declared with "static". They are used by the name without a
prefix: >
class OtherThing
this.size: number
static totalSize: number
def new(this.size)
totalSize += this.size
enddef
endclass
< *E1340* *E1341*
Since the name is used as-is, shadowing the name by a function argument name
or variable name is not allowed.
Just like object members the access can be made private by using an underscore
as the first character in the name, and it can be made public by prefixing
"public": >
class OtherThing
static total: number # anybody can read, only class can write
static _sum: number # only class can read and write
public static result: number # anybody can read and write
endclass
<
*class-function*
Class functions are also declared with "static". They have no access to
object members, they cannot use the "this" keyword. >
class OtherThing
this.size: number
static totalSize: number
" Clear the total size and return the value it had before.
static def ClearTotalSize(): number
var prev = totalSize
totalSize = 0
return prev
enddef
endclass
An abstract class is defined the same way as a normal class, except that it
does not have any new() method. *E1359*
==============================================================================
4. Using an interface *Vim9-using-interface*
5. Using an interface *Vim9-using-interface*
The example above with Shape, Square and Triangle can be made more useful if
we add a method to compute the surface of the object. For that we create the
@@ -348,7 +377,7 @@ The interface name can be used as a type: >
==============================================================================
5. More class details *Vim9-class* *Class* *class*
6. More class details *Vim9-class* *Class* *class*
Defining a class ~
*:class* *:endclass* *:abstract*
@@ -386,12 +415,52 @@ once. They can appear in any order, although this order is recommended: >
extends ClassName
implements InterfaceName, OtherInterface
specifies SomeInterface
< *extends*
< *E1355*
Each member and function name can be used only once. It is not possible to
define a function with the same name and different type of arguments.
Extending a class ~
*extends*
A class can extend one other class. *E1352* *E1353* *E1354*
The basic idea is to build on top of an existing class, add properties to it.
The extended class is called the "base class" or "super class". The new class
is called the "child class".
Object members from the base class are all taken over by the child class. It
is not possible to override them (unlike some other languages).
*E1356* *E1357* *E1358*
Object methods of the base class can be overruled. The signature (arguments,
argument types and return type) must be exactly the same. The method of the
base class can be called by prefixing "super.".
Other object methods of the base class are taken over by the child class.
Class functions, including functions starting with "new", can be overruled,
like with object methods. The function on the base class can be called by
prefixing the name of the class (for class functions) or "super.".
Unlike other languages, the constructor of the base class does not need to be
invoked. In fact, it cannot be invoked. If some initialization from the base
class also needs to be done in a child class, put it in an object method and
call that method from every constructor().
If the base class did not specify a new() function then one was automatically
created. This function will not be taken over by the child class. The child
class can define its own new() function, or, if there isn't one, a new()
function will be added automatically.
A class implementing an interface ~
*implements* *E1346* *E1347*
A class can implement one or more interfaces. The "implements" keyword can
only appear once *E1350* . Multiple interfaces can be specified, separated by
commas. Each interface name can appear only once. *E1351*
A class defining an interface ~
*specifies*
A class can declare its interface, the object members and methods, with a
named interface. This avoids the need for separately specifying the
@@ -400,16 +469,16 @@ interface, which is often done in many languages, especially Java.
Items in a class ~
*E1318* *E1325* *E1326*
Inside a class, in betweeen `:class` and `:endclass`, these items can appear:
Inside a class, in between `:class` and `:endclass`, these items can appear:
- An object member declaration: >
this._memberName: memberType
this.memberName: memberType
this._memberName: memberType
this.memberName: memberType
public this.memberName: memberType
- A constructor method: >
def new(arguments)
def newName(arguments)
def new(arguments)
def newName(arguments)
- An object method: >
def SomeMethod(arguments)
def SomeMethod(arguments)
< *E1329*
For the object member the type must be specified. The best way is to do this
explicitly with ": {type}". For simple types you can also use an initializer,
@@ -451,6 +520,15 @@ name, with a hint about what it provides.
An interface can only be defined in a |Vim9| script file. *E1342*
null object ~
When a variable is declared to have the type of an object, but it is not
initialized, the value is null. When trying to use this null object Vim often
does not know what class was supposed to be used. Vim then cannot check if
a member name is correct and you will get an "Using a null object" error,
even when the member name is invalid. *E1360* *E1362*
Default constructor ~
In case you define a class without a new() method, one will be automatically
@@ -528,7 +606,7 @@ constructor methods.
==============================================================================
6. Type definition *Vim9-type* *:type*
7. Type definition *Vim9-type* *:type*
A type definition is giving a name to a type specification. For Example: >
@@ -539,7 +617,7 @@ TODO: more explanation
==============================================================================
7. Enum *Vim9-enum* *:enum* *:endenum*
8. Enum *Vim9-enum* *:enum* *:endenum*
An enum is a type that can have one of a list of values. Example: >
@@ -639,7 +717,7 @@ Some languages support multiple inheritance. Although that can be useful in
some cases, it makes the rules of how a class works quite complicated.
Instead, using interfaces to declare what is supported is much simpler. The
very popular Java language does it this way, and it should be good enough for
Vim. The "keep it simple" rule applies here.
Vim. The "keep it simple" rule applies here.
Explicitly declaring that a class supports an interface makes it easy to see
what a class is intended for. It also makes it possible to do proper type

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2022 Dec 19
" Last Change: 2023 Feb 25
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -205,6 +205,9 @@ au BufNewFile,BufRead *.mch,*.ref,*.imp setf b
au BufNewFile,BufRead *.bas call dist#ft#FTbas()
au BufNewFile,BufRead *.bi,*.bm call dist#ft#FTbas()
" Bass
au BufNewFile,BufRead *.bass setf bass
" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb
@@ -274,6 +277,9 @@ endif
au BufNewFile,BufRead *.c call dist#ft#FTlpc()
au BufNewFile,BufRead *.lpc,*.ulpc setf lpc
" Cairo
au BufNewFile,BufRead *.cairo setf cairo
" Calendar
au BufNewFile,BufRead calendar setf calendar
@@ -310,6 +316,9 @@ au BufNewFile,BufRead *.cdl setf cdl
" Conary Recipe
au BufNewFile,BufRead *.recipe setf conaryrecipe
" ChainPack Object Notation (CPON)
au BufNewFile,BufRead *.cpon setf cpon
" Controllable Regex Mutilator
au BufNewFile,BufRead *.crm setf crm
@@ -329,6 +338,10 @@ if has("fname_case")
au BufNewFile,BufRead *.C,*.H setf cpp
endif
" C++ 20 modules (clang)
" https://clang.llvm.org/docs/StandardCPlusPlusModules.html#file-name-requirement
au BufNewFile,BufRead *.cppm,*.ccm,*.cxxm,*.c++m setf cpp
" .h files can be C, Ch C++, ObjC or ObjC++.
" Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is
" detected automatically.
@@ -371,6 +384,9 @@ au BufNewFile,BufRead *.ch call dist#ft#FTchange()
" ChordPro
au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro setf chordpro
" Clangd
au BufNewFile,BufRead .clangd setf yaml
" Clang-format
au BufNewFile,BufRead .clang-format setf yaml
@@ -427,12 +443,18 @@ au BufNewFile,BufRead *.cook setf cook
" needs to be inspected.
au BufNewFile,BufRead *.cql setf cqlang
" Crystal
au BufNewFile,BufRead *.cr setf crystal
" CSV Files
au BufNewFile,BufRead *.csv setf csv
" CUDA Compute Unified Device Architecture
au BufNewFile,BufRead *.cu,*.cuh setf cuda
" Cue
au BufNewFile,BufRead *.cue setf cue
" Dockerfile; Podman uses the same syntax with name Containerfile
" Also see Dockerfile.* below.
au BufNewFile,BufRead Containerfile,Dockerfile,dockerfile,*.[dD]ockerfile setf dockerfile
@@ -516,6 +538,9 @@ au BufNewFile,BufRead */etc/apt/sources.list.d/*.list setf debsources
" Deny hosts
au BufNewFile,BufRead denyhosts.conf setf denyhosts
" Dhall
au BufNewFile,BufRead *.dhall setf dhall
" dnsmasq(8) configuration files
au BufNewFile,BufRead */etc/dnsmasq.conf setf dnsmasq
@@ -629,6 +654,12 @@ au BufNewFile,BufRead *.elm setf elm
" Elm Filter Rules file
au BufNewFile,BufRead filter-rules setf elmfilt
" Elsa - https://github.com/ucsd-progsys/elsa
au BufNewFile,BufRead *.lc setf elsa
" EdgeDB Schema Definition Language
au BufNewFile,BufRead *.esdl setf esdl
" ESMTP rc file
au BufNewFile,BufRead *esmtprc setf esmtprc
@@ -665,6 +696,9 @@ autocmd BufRead,BufNewFile *.fnl setf fennel
" Fetchmail RC file
au BufNewFile,BufRead .fetchmailrc setf fetchmail
" FIRRTL - Flexible Internal Representation for RTL
au BufNewFile,BufRead *.fir setf firrtl
" Fish shell
au BufNewFile,BufRead *.fish setf fish
@@ -697,6 +731,9 @@ au BufNewFile,BufRead *.fsl setf framescript
" FStab
au BufNewFile,BufRead fstab,mtab setf fstab
" Func
au BufNewFile,BufRead *.fc setf func
" Fusion
au BufRead,BufNewFile *.fusion setf fusion
@@ -853,7 +890,7 @@ au BufNewFile,BufRead *.htpp setf hastepreproc
au BufRead,BufNewFile *.hcl setf hcl
" Go checksum file (must be before *.sum Hercules)
au BufNewFile,BufRead go.sum setf gosum
au BufNewFile,BufRead go.sum,go.work.sum setf gosum
" Hercules
au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum setf hercules
@@ -1014,11 +1051,11 @@ au BufNewFile,BufRead *.json-patch setf json
au BufNewFile,BufRead *.ipynb setf json
" Other files that look like json
au BufNewFile,BufRead .prettierrc,.firebaserc setf json
au BufNewFile,BufRead .prettierrc,.firebaserc,.stylelintrc setf json
" JSONC (JSON with comments)
au BufNewFile,BufRead *.jsonc,.babelrc,.eslintrc,.jsfmtrc setf jsonc
au BufNewFile,BufRead .jshintc,.hintrc,.swrc,[jt]sconfig*.json setf jsonc
au BufNewFile,BufRead *.jsonc,.babelrc,.eslintrc,.jsfmtrc setf jsonc
au BufNewFile,BufRead .jshintrc,.hintrc,.swrc,[jt]sconfig*.json setf jsonc
" JSON
au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest setf json
@@ -1029,6 +1066,9 @@ au BufNewFile,BufRead *.jsonnet,*.libsonnet setf jsonnet
" Julia
au BufNewFile,BufRead *.jl setf julia
" KDL
au BufNewFile,BufRead *.kdl setf kdl
" Kixtart
au BufNewFile,BufRead *.kix setf kix
@@ -1076,6 +1116,9 @@ au BufNewFile,BufRead *.ldif setf ldif
" Ld loader
au BufNewFile,BufRead *.ld setf ld
" Lean
au BufNewFile,BufRead *.lean setf lean
" Ledger
au BufRead,BufNewFile *.ldg,*.ledger,*.journal setf ledger
@@ -1123,6 +1166,9 @@ au BufNewFile,BufRead *.lite,*.lt setf lite
" LiteStep RC files
au BufNewFile,BufRead */LiteStep/*/*.rc setf litestep
" Livebook
au BufNewFile,BufRead *.livemd setf livebook
" Login access
au BufNewFile,BufRead */etc/login.access setf loginaccess
@@ -1252,6 +1298,9 @@ au BufNewFile,BufRead *.[mi][3g] setf modula3
" Larch/Modula-3
au BufNewFile,BufRead *.lm3 setf modula3
" Modconf
au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
" Monk
au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk
@@ -1261,8 +1310,8 @@ au BufNewFile,BufRead *.moo setf moo
" Moonscript
au BufNewFile,BufRead *.moon setf moonscript
" Modconf
au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
" Move language
au BufNewFile,BufRead *.move setf move
" MPD is based on XML
au BufNewFile,BufRead *.mpd setf xml
@@ -1357,6 +1406,9 @@ au BufNewFile,BufRead *.nse setf lua
" NSIS
au BufNewFile,BufRead *.nsi,*.nsh setf nsis
" Nu
au BufNewFile,BufRead {env,config}.nu setf nu
" Oblivion Language and Oblivion Script Extender
au BufNewFile,BufRead *.obl,*.obse,*.oblivion,*.obscript setf obse
@@ -1369,6 +1421,9 @@ au BufNewFile,BufRead *.occ setf occam
" Octave
au BufNewFile,BufRead octave.conf,.octaverc,octaverc setf octave
" Odin
au BufNewFile,BufRead *.odin setf odin
" Omnimark
au BufNewFile,BufRead *.xom,*.xin setf omnimark
@@ -1399,6 +1454,7 @@ au BufNewFile,BufRead pf.conf setf pf
" ini style config files, using # comments
au BufNewFile,BufRead */etc/pacman.conf,mpv.conf setf confini
au BufNewFile,BufRead */.aws/config,*/.aws/credentials setf confini
au BufNewFile,BufRead *.nmconnection setf confini
" Pacman hooks
au BufNewFile,BufRead *.hook
@@ -1502,6 +1558,9 @@ au BufNewFile,BufRead *.plp setf plp
" PO and PO template (GNU gettext)
au BufNewFile,BufRead *.po,*.pot setf po
" Pony
au BufNewFile,BufRead *.pony setf pony
" Postfix main config
au BufNewFile,BufRead main.cf,main.cf.proto setf pfmain
@@ -1612,8 +1671,14 @@ au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python
" QL
au BufRead,BufNewFile *.ql,*.qll setf ql
" QMLdir
au BufRead,BufNewFile qmldir setf qmldir
" Quarto
au BufRead,BufNewFile *.qmd setf quarto
au BufRead,BufNewFile *.qmd setf quarto
" Racket (formerly detected as "scheme")
au BufNewFile,BufRead *.rkt,*.rktd,*.rktl setf racket
" Radiance
au BufNewFile,BufRead *.rad,*.mat setf radiance
@@ -1695,6 +1760,9 @@ au BufNewFile,BufRead *.rnc setf rnc
" Relax NG XML
au BufNewFile,BufRead *.rng setf rng
" ILE RPG
au BufNewFile,BufRead *.rpgle,*.rpgleinc setf rpgle
" RPL/2
au BufNewFile,BufRead *.rpl setf rpl
@@ -1704,12 +1772,15 @@ au BufNewFile,BufRead *.robot,*.resource setf robot
" Robots.txt
au BufNewFile,BufRead robots.txt setf robots
" Rpcgen
au BufNewFile,BufRead *.x setf rpcgen
" RON (Rusty Object Notation)
au BufNewFile,BufRead *.ron setf ron
" MikroTik RouterOS script
au BufRead,BufNewFile *.rsc setf routeros
" Rpcgen
au BufNewFile,BufRead *.x setf rpcgen
" reStructuredText Documentation Format
au BufNewFile,BufRead *.rst setf rst
@@ -1747,6 +1818,9 @@ au BufNewFile,BufRead Cargo.lock,*/.cargo/config,*/.cargo/credentials setf toml
" S-lang (or shader language, or SmallLisp)
au BufNewFile,BufRead *.sl setf slang
" Sage
au BufNewFile,BufRead *.sage setf sage
" Samba config
au BufNewFile,BufRead smb.conf setf samba
@@ -1876,8 +1950,8 @@ au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks setf zsh
au BufNewFile,BufRead .zshrc,.zshenv,.zlogin,.zlogout,.zcompdump setf zsh
au BufNewFile,BufRead *.zsh setf zsh
" Scheme
au BufNewFile,BufRead *.scm,*.ss,*.sld,*.rkt,*.rktd,*.rktl setf scheme
" Scheme ("racket" patterns are now separate, see above)
au BufNewFile,BufRead *.scm,*.ss,*.sld setf scheme
" Screen RC
au BufNewFile,BufRead .screenrc,screenrc setf screen
@@ -1898,6 +1972,9 @@ au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu
" SKILL
au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill
" Cadence
au BufNewFile,BufRead *.cdc setf cdc
" SLRN
au BufNewFile,BufRead .slrnrc setf slrnrc
au BufNewFile,BufRead *.score setf slrnsc
@@ -1983,6 +2060,9 @@ au BufNewFile,BufRead *.sql call dist#ft#SQL()
" SQLJ
au BufNewFile,BufRead *.sqlj setf sqlj
" PRQL
au BufNewFile,BufRead *.prql setf prql
" SQR
au BufNewFile,BufRead *.sqr,*.sqi setf sqr
@@ -1997,6 +2077,9 @@ au BufNewFile,BufRead */etc/ssh/ssh_config.d/*.conf setf sshconfig
au BufNewFile,BufRead sshd_config setf sshdconfig
au BufNewFile,BufRead */etc/ssh/sshd_config.d/*.conf setf sshdconfig
" Starlark
au BufNewFile,BufRead *.ipd,*.star,*.starlark setf starlark
" OpenVPN configuration
au BufNewFile,BufRead *.ovpn setf openvpn
au BufNewFile,BufRead */openvpn/*/*.conf setf openvpn
@@ -2053,6 +2136,9 @@ au BufNewFile,BufRead *.svg setf svg
" Surface
au BufRead,BufNewFile *.sface setf surface
" LLVM TableGen
au BufNewFile,BufRead *.td setf tablegen
" Tads (or Nroff or Perl test file)
au BufNewFile,BufRead *.t
\ if !dist#ft#FTnroff() && !dist#ft#FTperl() | setf tads | endif
@@ -2063,6 +2149,9 @@ au BufNewFile,BufRead tags setf tags
" TAK
au BufNewFile,BufRead *.tak setf tak
" Unx Tal
au BufNewFile,BufRead *.tal setf tal
" Task
au BufRead,BufNewFile {pending,completed,undo}.data setf taskdata
au BufRead,BufNewFile *.task setf taskedit
@@ -2177,6 +2266,9 @@ au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
" Udev symlinks config
au BufNewFile,BufRead */etc/udev/cdsymlinks.conf setf sh
" Ungrammar, AKA Un-grammar
au BufNewFile,BufRead *.ungram setf ungrammar
" UnrealScript
au BufNewFile,BufRead *.uc setf uc
@@ -2258,7 +2350,11 @@ au BufNewFile,BufRead *.vroom setf vroom
au BufNewFile,BufRead *.vue setf vue
" WebAssembly
au BufNewFile,BufRead *.wast,*.wat setf wast
au BufNewFile,BufRead *.wat setf wat
au BufNewFile,BufRead *.wast setf wast
" WebAssembly Interface Type (WIT)
au BufNewFile,BufRead *.wit setf wit
" Webmacro
au BufNewFile,BufRead *.wm setf webmacro
@@ -2413,6 +2509,9 @@ au BufNewFile,BufRead */etc/yum.conf setf dosini
" YANG
au BufRead,BufNewFile *.yang setf yang
" Yuck
au BufNewFile,BufRead *.yuck setf yuck
" Zimbu
au BufNewFile,BufRead *.zu setf zimbu
" Zimbu Templates

View File

@@ -3,9 +3,9 @@
" Maintainer: Debian Vim Maintainers <team+vim@tracker.debian.org>
" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de>
" Stefano Zacchiroli <zack@debian.org>
" Last Change: 2022 Jul 25
" Last Change: 2023 Jan 16
" License: Vim License
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debchangelog.vim
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/debchangelog.vim
" Bug completion requires apt-listbugs installed for Debian packages or
" python-launchpadlib installed for Ubuntu packages
@@ -35,14 +35,14 @@ if exists('g:did_changelog_ftplugin')
finish
endif
" Don't load another plugin (this is global)
let g:did_changelog_ftplugin = 1
" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
" <CR> would not be recognized. See ":help 'cpoptions'".
let s:cpo_save = &cpo
set cpo&vim
" Don't load another plugin (this is global)
let g:did_changelog_ftplugin = 1
" {{{1 GUI menu
" Helper functions returning various data.

View File

@@ -2,8 +2,8 @@
" Language: Debian control files
" Maintainer: Debian Vim Maintainers
" Former Maintainer: Pierre Habouzit <madcoder@debian.org>
" Last Change: 2018-01-28
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debcontrol.vim
" Last Change: 2023 Jan 16
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/debcontrol.vim
" Do these settings once per buffer
if exists('b:did_ftplugin')

View File

@@ -1,7 +1,10 @@
" Vim filetype plugin file
" Language: MS-DOS .bat files
" Maintainer: Mike Williams <mrw@eandem.co.uk>
" Last Change: 7th May 2020
" Language: MS-DOS/Windows .bat files
" Maintainer: Mike Williams <mrmrdubya@gmail.com>
" Last Change: 12th February 2023
"
" Options Flags:
" dosbatch_colons_comment - any value to treat :: as comment line
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -15,8 +18,13 @@ let s:cpo_save = &cpo
set cpo&vim
" BAT comment formatting
setlocal comments=b:rem,b:@rem,b:REM,b:@REM,:::
setlocal commentstring=::\ %s
setlocal comments=b:rem,b:@rem,b:REM,b:@REM
if exists("dosbatch_colons_comment")
setlocal comments+=:::
setlocal commentstring=::\ %s
else
setlocal commentstring=REM\ %s
endif
setlocal formatoptions-=t formatoptions+=rol
" Lookup DOS keywords using Windows command help.

15
runtime/ftplugin/fish.vim Normal file
View File

@@ -0,0 +1,15 @@
" Vim filetype plugin file
" Language: fish
" Maintainer: Nicholas Boyle (github.com/nickeb96)
" Repository: https://github.com/nickeb96/fish.vim
" Last Change: February 1, 2023
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
setlocal iskeyword=@,48-57,_,192-255,-,.
setlocal comments=:#
setlocal commentstring=#%s
setlocal formatoptions+=crjq

View File

@@ -1,9 +1,9 @@
" Vim filetype plugin file
" Language: Logcheck
" Maintainer: Debian Vim Maintainers
" Last Change: 2018 Dec 27
" Last Change: 2023 Jan 16
" License: Vim License
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/logcheck.vim
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/logcheck.vim
if exists('b:did_ftplugin')
finish

View File

@@ -0,0 +1 @@
runtime ftplugin/rmd.vim

View File

@@ -2,7 +2,7 @@
" Language: R
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Aug 15, 2020 11:37AM
" Last Change: Sun Apr 24, 2022 09:14AM
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
@@ -22,7 +22,7 @@ setlocal comments=:#',:###,:##,:#
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R)\t*.R\n" .
\ "Files that include R (*.Rnw *.Rd *.Rmd *.Rrst)\t*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
\ "Files that include R (*.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\n" .
\ "All Files (*.*)\t*.*\n"
endif

View File

@@ -2,7 +2,7 @@
" Language: R help file
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Aug 15, 2020 12:01PM
" Last Change: Sun Apr 24, 2022 09:12AM
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
@@ -18,7 +18,7 @@ set cpo&vim
setlocal iskeyword=@,48-57,_,.
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\n" .
\ "All Files (*.*)\t*.*\n"
endif

View File

@@ -2,7 +2,7 @@
" Language: R Markdown file
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Aug 15, 2020 12:03PM
" Last Change: Sun Apr 24, 2022 09:12AM
" Original work by Alex Zvoleff (adjusted from R help for rmd by Michel Kuhlmann)
" Only do this when not yet done for this buffer
@@ -32,13 +32,24 @@ function! FormatRmd()
return 1
endfunction
" If you do not want 'comments' dynamically defined, put in your vimrc:
" let g:rmd_dynamic_comments = 0
function! SetRmdCommentStr()
if (search("^[ \t]*```[ ]*{r", "bncW") > search("^[ \t]*```$", "bncW")) || ((search('^---$', 'Wn') || search('^\.\.\.$', 'Wn')) && search('^---$', 'bnW'))
set commentstring=#\ %s
else
set commentstring=<!--\ %s\ -->
endif
endfunction
" If you do not want both 'comments' and 'commentstring' dynamically defined,
" put in your vimrc: let g:rmd_dynamic_comments = 0
if !exists("g:rmd_dynamic_comments") || (exists("g:rmd_dynamic_comments") && g:rmd_dynamic_comments == 1)
setlocal formatexpr=FormatRmd()
augroup RmdCStr
autocmd!
autocmd CursorMoved <buffer> call SetRmdCommentStr()
augroup END
endif
" Enables pandoc if it is installed
unlet! b:did_ftplugin
runtime ftplugin/pandoc.vim
@@ -47,7 +58,7 @@ runtime ftplugin/pandoc.vim
let b:did_ftplugin = 1
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\n" .
\ "All Files (*.*)\t*.*\n"
endif

View File

@@ -2,7 +2,7 @@
" Language: Rnoweb
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Aug 15, 2020 12:02PM
" Last Change: Sun Apr 24, 2022 09:13AM
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
@@ -25,10 +25,27 @@ setlocal suffixesadd=.bib,.tex
setlocal comments=b:%,b:#,b:##,b:###,b:#'
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\n" .
\ "All Files (*.*)\t*.*\n"
endif
function! SetRnwCommentStr()
if (search("^\s*<<.*>>=", "bncW") > search("^@", "bncW"))
set commentstring=#\ %s
else
set commentstring=%\ %s
endif
endfunction
" If you do not want both 'comments' and 'commentstring' dynamically defined,
" put in your vimrc: let g:rnw_dynamic_comments = 0
if !exists("g:rnw_dynamic_comments") || (exists("g:rnw_dynamic_comments") && g:rnw_dynamic_comments == 1)
augroup RnwCStr
autocmd!
autocmd CursorMoved <buffer> call SetRnwCommentStr()
augroup END
endif
if exists('b:undo_ftplugin')
let b:undo_ftplugin .= " | setl isk< sua< com< | unlet! b:browsefilter"
else

View File

@@ -2,7 +2,7 @@
" Language: reStructuredText documentation format with R code
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Aug 15, 2020 12:02PM
" Last Change: Sun Apr 24, 2022 09:13AM
" Original work by Alex Zvoleff
" Only do this when not yet done for this buffer
@@ -38,7 +38,7 @@ if !exists("g:rrst_dynamic_comments") || (exists("g:rrst_dynamic_comments") && g
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst *.qmd)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst;*.qmd\n" .
\ "All Files (*.*)\t*.*\n"
endif

View File

@@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2022 Nov 27
" Last Change: 2023 Feb 07
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -99,18 +99,23 @@ if exists("loaded_matchit")
" func name
" require a parenthesis following, then there can be an "endfunc".
let b:match_words =
\ '\<\%(fu\%[nction]\|def\)!\=\s\+\S\+\s*(:\%(\%(^\||\)\s*\)\@<=\<retu\%[rn]\>:\%(\%(^\||\)\s*\)\@<=\<\%(endf\%[unction]\|enddef\)\>,' .
\ '\<\(wh\%[ile]\|for\)\>:\%(\%(^\||\)\s*\)\@<=\<brea\%[k]\>:\%(\%(^\||\)\s*\)\@<=\<con\%[tinue]\>:\%(\%(^\||\)\s*\)\@<=\<end\(w\%[hile]\|fo\%[r]\)\>,' .
\ '\<if\>:\%(\%(^\||\)\s*\)\@<=\<el\%[seif]\>:\%(\%(^\||\)\s*\)\@<=\<en\%[dif]\>,' .
\ '{:},' .
\ '\<try\>:\%(\%(^\||\)\s*\)\@<=\<cat\%[ch]\>:\%(\%(^\||\)\s*\)\@<=\<fina\%[lly]\>:\%(\%(^\||\)\s*\)\@<=\<endt\%[ry]\>,' .
\ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,'
\ '\<\%(fu\%[nction]\|def\)!\=\s\+\S\+\s*(:\%(\%(^\||\)\s*\)\@<=\<retu\%[rn]\>:\%(\%(^\||\)\s*\)\@<=\<\%(endf\%[unction]\|enddef\)\>,' ..
\ '\<\%(wh\%[ile]\|for\)\>:\%(\%(^\||\)\s*\)\@<=\<brea\%[k]\>:\%(\%(^\||\)\s*\)\@<=\<con\%[tinue]\>:\%(\%(^\||\)\s*\)\@<=\<end\%(w\%[hile]\|fo\%[r]\)\>,' ..
\ '\<if\>:\%(\%(^\||\)\s*\)\@<=\<el\%[seif]\>:\%(\%(^\||\)\s*\)\@<=\<en\%[dif]\>,' ..
\ '{:},' ..
\ '\<try\>:\%(\%(^\||\)\s*\)\@<=\<cat\%[ch]\>:\%(\%(^\||\)\s*\)\@<=\<fina\%[lly]\>:\%(\%(^\||\)\s*\)\@<=\<endt\%[ry]\>,' ..
\ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' ..
\ '\<class\>:\<endclass\>,' ..
\ '\<inte\%[rface]\>:\<endinterface\>,' ..
\ '\<enu\%[m]\>:\<endenum\>,'
" Ignore syntax region commands and settings, any 'en*' would clobber
" if-endif.
" - set spl=de,en
" - au! FileType javascript syntax region foldBraces start=/{/ end=/}/ …
let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name")
\ =~? "comment\\|string\\|vimLetHereDoc\\|vimSynReg\\|vimSet"'
" Also ignore here-doc and dictionary keys (vimVar).
let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
\ =~? "comment\\|string\\|vimSynReg\\|vimSet\\|vimLetHereDoc\\|vimVar"'
endif
let &cpo = s:cpo_save

119
runtime/import/dist/vimhighlight.vim vendored Normal file
View File

@@ -0,0 +1,119 @@
vim9script
# Maintainer: github user lacygoill
# Last Change: 2023 Mar 08
# Init {{{1
const LINK: string = '->'
# Interface {{{1
export def HighlightTest() # {{{2
# Open a new window if the current one isn't empty
if line('$') != 1 || getline(1) != ''
new
endif
edit Highlight\ test
# `:help scratch-buffer`
&l:bufhidden = 'hide'
&l:buftype = 'nofile'
&l:swapfile = false
var report: list<string> =<< trim END
Highlighting groups for various occasions
-----------------------------------------
END
var various_groups: list<string> = GetVariousGroups()
->filter((_, group: string): bool => group->hlexists() && !group->IsCleared())
->sort()
->uniq()
report->extend(various_groups->FollowChains())
var language_section: list<string> =<< trim END
Highlighting groups for language syntaxes
-----------------------------------------
END
report->extend(language_section)
var syntax_groups: list<string> = getcompletion('', 'highlight')
->filter((_, group: string): bool =>
various_groups->index(group) == -1
&& !group->IsCleared()
&& group !~ '^HighlightTest')
# put the report
report
->extend(syntax_groups->FollowChains())
->setline(1)
# highlight the group names
execute $'silent! global /^\w\+\%(\%(\s*{LINK}\s*\)\w\+\)*$/ Highlight({bufnr('%')})'
cursor(1, 1)
enddef
# }}}1
# Core {{{1
def Highlight(buf: number) # {{{2
var lnum: number = line('.')
for group: string in getline('.')->split($'\s*{LINK}\s*')
silent! prop_type_add($'highlight-test-{group}', {
bufnr: buf,
highlight: group,
combine: false,
})
prop_add(lnum, col('.'), {
length: group->strlen(),
type: $'highlight-test-{group}'
})
search('\<\w\+\>', '', lnum)
endfor
enddef
# }}}1
# Util {{{1
def IsCleared(name: string): bool # {{{2
return name
->hlget()
->get(0, {})
->get('cleared')
enddef
def FollowChains(groups: list<string>): list<string> # {{{2
# A group might be linked to another, which itself might be linked...
# We want the whole chain, for every group.
var chains: list<string>
for group: string in groups
var target: string = group->LinksTo()
var chain: string = group
while !target->empty()
chain ..= $' {LINK} {target}'
target = target->LinksTo()
endwhile
var a_link_is_cleared: bool = chain
->split($'\s*{LINK}\s*')
->indexof((_, g: string): bool => g->IsCleared()) >= 0
if a_link_is_cleared
continue
endif
chains->add(chain)
endfor
return chains
enddef
def LinksTo(group: string): string # {{{2
return group
->hlget()
->get(0, {})
->get('linksto', '')
enddef
def GetVariousGroups(): list<string> # {{{2
return getcompletion('hl-', 'help')
->filter((_, helptag: string): bool => helptag =~ '^hl-\w\+$')
->map((_, helptag: string) => helptag->substitute('^hl-', '', ''))
->extend(range(1, 9)->map((_, n: number) => $'User{n}'))
enddef

82
runtime/indent/fish.vim Normal file
View File

@@ -0,0 +1,82 @@
" Vim indent file
" Language: fish
" Maintainer: Nicholas Boyle (github.com/nickeb96)
" Repository: https://github.com/nickeb96/fish.vim
" Last Change: February 4, 2023
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetFishIndent(v:lnum)
setlocal indentkeys+==end,=else,=case
function s:PrevCmdStart(linenum)
let l:linenum = a:linenum
" look for the first line that isn't a line continuation
while l:linenum > 1 && getline(l:linenum - 1) =~# '\\$'
let l:linenum = l:linenum - 1
endwhile
return l:linenum
endfunction
function GetFishIndent(lnum)
let l:shiftwidth = shiftwidth()
let l:prevlnum = prevnonblank(a:lnum - 1)
if l:prevlnum ==# 0
return 0
endif
" if the previous line ended with a line continuation
if getline(a:lnum - 1) =~# '\\$'
if a:lnum ==# 0 || getline(a:lnum - 2) !~# '\\$'
" this is the first line continuation in a chain, so indent it
return indent(a:lnum - 1) + l:shiftwidth
else
" use the same indentation as the previous continued line
return indent(a:lnum - 1)
endif
endif
let l:prevlnum = s:PrevCmdStart(l:prevlnum)
let l:prevline = getline(l:prevlnum)
if l:prevline =~# '^\s*\(begin\|if\|else\|while\|for\|function\|case\|switch\)\>'
let l:indent = l:shiftwidth
else
let l:indent = 0
endif
let l:line = getline(a:lnum)
if l:line =~# '^\s*end\>'
" find end's matching start
let l:depth = 1
let l:currentlnum = a:lnum
while l:depth > 0 && l:currentlnum > 0
let l:currentlnum = s:PrevCmdStart(prevnonblank(l:currentlnum - 1))
let l:currentline = getline(l:currentlnum)
if l:currentline =~# '^\s*end\>'
let l:depth = l:depth + 1
elseif l:currentline =~# '^\s*\(begin\|if\|while\|for\|function\|switch\)\>'
let l:depth = l:depth - 1
endif
endwhile
if l:currentline =~# '^\s*switch\>'
return indent(l:currentlnum)
else
return indent(l:prevlnum) + l:indent - l:shiftwidth
endif
elseif l:line =~# '^\s*else\>'
return indent(l:prevlnum) + l:indent - l:shiftwidth
elseif l:line =~# '^\s*case\>'
if getline(l:prevlnum) =~# '^\s*switch\>'
return indent(l:prevlnum) + l:indent
else
return indent(l:prevlnum) + l:indent - l:shiftwidth
endif
else
return indent(l:prevlnum) + l:indent
endif
endfunction

View File

@@ -0,0 +1 @@
runtime indent/rmd.vim

View File

@@ -2,7 +2,7 @@
" Language: R
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sun Aug 19, 2018 09:13PM
" Last Change: Wed Oct 26, 2022 12:04PM
" Only load this indent file when no other was loaded.
@@ -14,6 +14,8 @@ let b:did_indent = 1
setlocal indentkeys=0{,0},:,!^F,o,O,e
setlocal indentexpr=GetRIndent()
let b:undo_indent = "setl inde< indk<"
" Only define the function once.
if exists("*GetRIndent")
finish
@@ -28,7 +30,7 @@ let g:r_indent_ess_comments = get(g:, 'r_indent_ess_comments', 0)
let g:r_indent_comment_column = get(g:, 'r_indent_comment_column', 40)
let g:r_indent_ess_compatible = get(g:, 'r_indent_ess_compatible', 0)
let g:r_indent_op_pattern = get(g:, 'r_indent_op_pattern',
\ '\(&\||\|+\|-\|\*\|/\|=\|\~\|%\|->\)\s*$')
\ '\(&\||\|+\|-\|\*\|/\|=\|\~\|%\|->\||>\)\s*$')
function s:RDelete_quotes(line)
let i = 0
@@ -359,17 +361,19 @@ function GetRIndent()
let olnum = s:Get_prev_line(lnum)
let oline = getline(olnum)
if olnum > 0
if line =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
if substitute(line, '#.*', '', '') =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
if substitute(oline, '#.*', '', '') =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
return indent(lnum)
else
return indent(lnum) + shiftwidth()
endif
else
if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
if substitute(oline, '#.*', '', '') =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
return indent(lnum) - shiftwidth()
endif
endif
elseif substitute(line, '#.*', '', '') =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
return indent(lnum) + shiftwidth()
endif
let post_fun = 0

View File

@@ -2,7 +2,7 @@
" Language: R Documentation (Help), *.Rd
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Last Change: Feb 25, 2023
" Only load this indent file when no other was loaded.
@@ -20,6 +20,8 @@ setlocal nolisp
setlocal indentkeys=0{,0},:,!^F,o,O,e
setlocal indentexpr=GetCorrectRHelpIndent()
let b:undo_indent = "setl ai< cin< inde< indk< <lisp <si"
" Only define the functions once.
if exists("*GetRHelpIndent")
finish

View File

@@ -2,7 +2,7 @@
" Language: Rmd
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sun Mar 28, 2021 08:05PM
" Last Change: Wed Nov 09, 2022 09:44PM
" Only load this indent file when no other was loaded.
@@ -16,6 +16,8 @@ let b:did_indent = 1
setlocal indentkeys=0{,0},<:>,!^F,o,O,e
setlocal indentexpr=GetRmdIndent()
let b:undo_indent = "setl inde< indk<"
if exists("*GetRmdIndent")
finish
endif
@@ -47,6 +49,8 @@ function s:GetMdIndent()
return indent(v:lnum - 1) + 2
elseif pline =~ '^\s*\d\+\.\s\+'
return indent(v:lnum - 1) + 3
elseif pline =~ '^\[\^\S\+\]: '
return indent(v:lnum - 1) + shiftwidth()
endif
return indent(prevnonblank(v:lnum - 1))
endfunction

View File

@@ -2,7 +2,7 @@
" Language: Rnoweb
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Fri Apr 15, 2016 10:58PM
" Last Change: Feb 25, 2023
" Only load this indent file when no other was loaded.
@@ -29,6 +29,8 @@ let b:did_indent = 1
setlocal indentkeys=0{,0},!^F,o,O,e,},=\bibitem,=\item
setlocal indentexpr=GetRnowebIndent()
let b:undo_indent = "setl inde< indk<"
if exists("*GetRnowebIndent")
finish
endif

View File

@@ -2,7 +2,7 @@
" Language: Rrst
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Last Change: Feb 25, 2023
" Only load this indent file when no other was loaded.
@@ -16,6 +16,8 @@ let b:did_indent = 1
setlocal indentkeys=0{,0},:,!^F,o,O,e
setlocal indentexpr=GetRrstIndent()
let b:undo_indent = "setl inde< indk<"
if exists("*GetRrstIndent")
finish
endif

View File

@@ -887,3 +887,55 @@ if true
elseif
endif
" END_INDENT
" START_INDENT
if (
true)
&& true
echo
endif
" END_INDENT
" START_INDENT
abstract class Shape
this.color = Color.Black
this.thickness = 10
endclass
" END_INDENT
" START_INDENT
class OtherThing
this.size: number
static totalSize: number
static def ClearTotalSize(): number
var prev = totalSize
totalSize = 0
return prev
enddef
endclass
" END_INDENT
" START_INDENT
interface HasSurface
this.size: number
def Surface(): number
endinterface
" END_INDENT
" START_INDENT
interface EnterExit
def Enter(): void
def Exit(): void
endinterface
" END_INDENT
" START_INDENT
enum Color
White
Red
Green
Blue
Black
endenum
" END_INDENT

View File

@@ -887,3 +887,55 @@ if true
elseif
endif
" END_INDENT
" START_INDENT
if (
true)
&& true
echo
endif
" END_INDENT
" START_INDENT
abstract class Shape
this.color = Color.Black
this.thickness = 10
endclass
" END_INDENT
" START_INDENT
class OtherThing
this.size: number
static totalSize: number
static def ClearTotalSize(): number
var prev = totalSize
totalSize = 0
return prev
enddef
endclass
" END_INDENT
" START_INDENT
interface HasSurface
this.size: number
def Surface(): number
endinterface
" END_INDENT
" START_INDENT
interface EnterExit
def Enter(): void
def Exit(): void
endinterface
" END_INDENT
" START_INDENT
enum Color
White
Red
Green
Blue
Black
endenum
" END_INDENT

View File

@@ -3,7 +3,7 @@ vim9script
# Vim indent file
# Language: Vim script
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last Change: 2022 Oct 5
# Last Change: 2023 Feb 02
# Only load this indent file when no other was loaded.
if exists('b:did_indent')
@@ -16,7 +16,7 @@ b:undo_indent = 'setlocal indentkeys< indentexpr<'
import autoload '../autoload/dist/vimindent.vim'
setlocal indentexpr=vimindent.Expr()
setlocal indentkeys+==endif,=enddef,=endfu,=endfor,=endwh,=endtry,=},=else,=cat,=finall,=END,0\\
setlocal indentkeys+==endif,=enddef,=endfu,=endfor,=endwh,=endtry,=endclass,=endinterface,=endenum,=},=else,=cat,=finall,=END,0\\
execute('setlocal indentkeys+=0=\"\\\ ,0=#\\\ ')
setlocal indentkeys-=0#
setlocal indentkeys-=:

View File

@@ -25,24 +25,25 @@ all: \
menu_hu_hu.iso_8859-2.vim \
menu_sk_sk.iso_8859-2.vim \
SED = LANG=C sed
# Convert menu_zh_cn.utf-8.vim to create menu_chinese_gb.936.vim.
menu_chinese_gb.936.vim: menu_zh_cn.utf-8.vim
rm -f menu_chinese_gb.936.vim
iconv -f utf-8 -t cp936 menu_zh_cn.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp936/' -e 's/" Original translations/" Generated from menu_zh_cn.utf-8.vim, DO NOT EDIT/' > menu_chinese_gb.936.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp936/' -e 's/" Original translations/" Generated from menu_zh_cn.utf-8.vim, DO NOT EDIT/' > menu_chinese_gb.936.vim
# Convert menu_zh_tw.utf-8.vim to create menu_chinese_taiwan.950.vim.
menu_chinese_taiwan.950.vim: menu_zh_tw.utf-8.vim
rm -f menu_chinese_taiwan.950.vim
iconv -f utf-8 -t cp950 menu_zh_tw.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp950/' -e 's/" Original translations/" Generated from menu_zh_tw.utf-8.vim, DO NOT EDIT/' > menu_chinese_taiwan.950.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp950/' -e 's/" Original translations/" Generated from menu_zh_tw.utf-8.vim, DO NOT EDIT/' > menu_chinese_taiwan.950.vim
# Convert menu_cs_cz.utf-8.vim to create menu_cs_cz.iso_8859-2.vim.
menu_cs_cz.iso_8859-2.vim: menu_cs_cz.utf-8.vim
rm -f menu_cs_cz.iso_8859-2.vim
iconv -f utf-8 -t iso8859-2 menu_cs_cz.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
-e 's/" Original translations/" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(ISO8859-2)/' \
> menu_cs_cz.iso_8859-2.vim
@@ -51,7 +52,7 @@ menu_cs_cz.iso_8859-2.vim: menu_cs_cz.utf-8.vim
menu_czech_czech_republic.1250.vim: menu_cs_cz.utf-8.vim
rm -f menu_czech_czech_republic.1250.vim
iconv -f utf-8 -t cp1250 menu_cs_cz.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
-e 's/" Original translations/" Generated from menu_cs_cz.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(CP1250)/' \
> menu_czech_czech_republic.1250.vim
@@ -59,7 +60,7 @@ menu_czech_czech_republic.1250.vim: menu_cs_cz.utf-8.vim
# Convert menu_cs_cz.utf-8.vim to create menu_czech_czech_republic.ascii.vim.
menu_czech_czech_republic.ascii.vim: menu_cs_cz.utf-8.vim
rm -f menu_czech_czech_republic.ascii.vim
sed -e 's/Á/A/g' -e 's/á/a/g' -e 's/Č/C/g' -e 's/č/c/g' -e 's/Ď/D/g' \
$(SED) -e 's/Á/A/g' -e 's/á/a/g' -e 's/Č/C/g' -e 's/č/c/g' -e 's/Ď/D/g' \
-e 's/ď/d/g' -e 's/É/E/g' -e 's/é/e/g' -e 's/Ě/E/g' -e 's/ě/e/g' \
-e 's/Í/I/g' -e 's/í/i/g' -e 's/Ň/N/g' -e 's/ň/n/g' -e 's/Ó/O/g' \
-e 's/ó/o/g' -e 's/Ř/R/g' -e 's/ř/r/g' -e 's/Š/S/g' -e 's/š/s/g' \
@@ -74,7 +75,7 @@ menu_czech_czech_republic.ascii.vim: menu_cs_cz.utf-8.vim
menu_ja_jp.euc-jp.vim: menu_ja_jp.utf-8.vim
rm -f menu_ja_jp.euc-jp.vim
iconv -f utf-8 -t euc-jp menu_ja_jp.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding euc-jp/' \
$(SED) -e 's/scriptencoding utf-8/scriptencoding euc-jp/' \
-e 's/" Original translations/" Generated from menu_ja_jp.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(EUC-JP)/' \
> menu_ja_jp.euc-jp.vim
@@ -83,7 +84,7 @@ menu_ja_jp.euc-jp.vim: menu_ja_jp.utf-8.vim
menu_japanese_japan.932.vim: menu_ja_jp.utf-8.vim
rm -f menu_japanese_japan.932.vim
iconv -f utf-8 -t cp932 menu_ja_jp.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp932/' \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp932/' \
-e 's/" Original translations/" Generated from menu_ja_jp.utf-8.vim, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(CP932)/' \
> menu_japanese_japan.932.vim
@@ -92,67 +93,67 @@ menu_japanese_japan.932.vim: menu_ja_jp.utf-8.vim
menu_ko_kr.euckr.vim: menu_ko_kr.utf-8.vim
rm -f menu_ko_kr.euckr.vim
iconv -f utf-8 -t euc-kr menu_ko_kr.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding euc-kr/' -e 's/" Original translations/" Generated from menu_ko_kr.utf-8.vim, DO NOT EDIT/' > menu_ko_kr.euckr.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding euc-kr/' -e 's/" Original translations/" Generated from menu_ko_kr.utf-8.vim, DO NOT EDIT/' > menu_ko_kr.euckr.vim
# Convert menu_pl_pl.utf-8.vim to create menu_pl_pl.iso_8859-2.vim.
menu_pl_pl.iso_8859-2.vim: menu_pl_pl.utf-8.vim
rm -f menu_pl_pl.iso_8859-2.vim
iconv -f utf-8 -t iso8859-2 menu_pl_pl.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' -e 's/" Original translations/" Generated from menu_pl_pl.utf-8.vim, DO NOT EDIT/' > menu_pl_pl.iso_8859-2.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' -e 's/" Original translations/" Generated from menu_pl_pl.utf-8.vim, DO NOT EDIT/' > menu_pl_pl.iso_8859-2.vim
# Convert menu_pl_pl.utf-8.vim to create menu_polish_poland.1250.vim.
menu_polish_poland.1250.vim: menu_pl_pl.utf-8.vim
rm -f menu_polish_poland.1250.vim
iconv -f utf-8 -t cp1250 menu_pl_pl.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' -e 's/" Original translations/" Generated from menu_pl_pl.utf-8.vim, DO NOT EDIT/' > menu_polish_poland.1250.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' -e 's/" Original translations/" Generated from menu_pl_pl.utf-8.vim, DO NOT EDIT/' > menu_polish_poland.1250.vim
# Convert menu_ru_ru.utf-8.vim to create menu_ru_ru.koi8-r.vim.
menu_ru_ru.koi8-r.vim: menu_ru_ru.utf-8.vim
rm -f menu_ru_ru.koi8-r.vim
iconv -f utf-8 -t koi8-r menu_ru_ru.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding koi8-r/' -e 's/" Original translations/" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT/' > menu_ru_ru.koi8-r.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding koi8-r/' -e 's/" Original translations/" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT/' > menu_ru_ru.koi8-r.vim
# Convert menu_sl_si.utf-8.vim to create menu_sl_si.cp1250.vim.
menu_sl_si.cp1250.vim: menu_sl_si.utf-8.vim
rm -f menu_sl_si.cp1250.vim
iconv -f utf-8 -t cp1250 menu_sl_si.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
-e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_sl_si.cp1250.vim
# Convert menu_uk_ua.utf-8.vim to create menu_sl_si.latin2.vim.
menu_sl_si.latin2.vim: menu_sl_si.utf-8.vim
rm -f menu_sl_si.latin2.vim
iconv -f utf-8 -t latin2 menu_sl_si.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding latin2/' -e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_sl_si.latin2.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding latin2/' -e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_sl_si.latin2.vim
# Convert menu_uk_ua.utf-8.vim to create menu_slovak_slovak_republic.1250.vim.
menu_slovak_slovak_republic.1250.vim: menu_sl_si.utf-8.vim
rm -f menu_slovak_slovak_republic.1250.vim
iconv -f utf-8 -t cp1250 menu_sl_si.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1250/' -e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_slovak_slovak_republic.1250.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' -e 's/" Original translations/" Generated from menu_sl_si.utf-8.vim, DO NOT EDIT/' > menu_slovak_slovak_republic.1250.vim
# Convert menu_tr_tr.utf-8.vim to create menu_tr_tr.cp1254.vim.
menu_tr_tr.cp1254.vim: menu_tr_tr.utf-8.vim
rm -f menu_tr_tr.cp1254.vim
iconv -f utf-8 -t cp1254 menu_tr_tr.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1254/' -e 's/" Original translations/" Generated from menu_tr_tr.utf-8.vim, DO NOT EDIT/' > menu_tr_tr.cp1254.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1254/' -e 's/" Original translations/" Generated from menu_tr_tr.utf-8.vim, DO NOT EDIT/' > menu_tr_tr.cp1254.vim
# Convert menu_tr_tr.utf-8.vim to create menu_tr_tr.iso_8859-9.vim.
menu_tr_tr.iso_8859-9.vim: menu_tr_tr.utf-8.vim
rm -f menu_tr_tr.iso_8859-9.vim
iconv -f utf-8 -t iso8859-9 menu_tr_tr.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso8859-9/' -e 's/" Original translations/" Generated from menu_tr_tr.utf-8.vim, DO NOT EDIT/' > menu_tr_tr.iso_8859-9.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso8859-9/' -e 's/" Original translations/" Generated from menu_tr_tr.utf-8.vim, DO NOT EDIT/' > menu_tr_tr.iso_8859-9.vim
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.iso_8859-5.vim.
menu_sr_rs.iso_8859-5.vim: menu_sr_rs.utf-8.vim
rm -f menu_sr_rs.iso_8859-5.vim
iconv -f utf-8 -t iso8859-5 menu_sr_rs.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso8859-5/' -e 's/" Original translations/" Generated from menu_sr_rs.utf-8.vim, DO NOT EDIT/' > menu_sr_rs.iso_8859-5.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso8859-5/' -e 's/" Original translations/" Generated from menu_sr_rs.utf-8.vim, DO NOT EDIT/' > menu_sr_rs.iso_8859-5.vim
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.iso_8859-2.vim.
menu_sr_rs.iso_8859-2.vim: menu_sr_rs.utf-8.vim
rm -f menu_sr_rs.iso_8859-2.vim
sed -e 's/а/a/g' -e 's/б/b/g' -e 's/в/v/g' -e 's/г/g/g' -e 's/д/d/g' \
$(SED) -e 's/а/a/g' -e 's/б/b/g' -e 's/в/v/g' -e 's/г/g/g' -e 's/д/d/g' \
-e 's/ђ/đ/g' -e 's/е/e/g' -e 's/ж/ž/g' -e 's/з/z/g' -e 's/и/i/g' \
-e 's/ј/j/g' -e 's/к/k/g' -e 's/л/l/g' -e 's/љ/lj/g' -e 's/м/m/g' \
-e 's/н/n/g' -e 's/њ/nj/g' -e 's/о/o/g' -e 's/п/p/g' -e 's/р/r/g' \
@@ -171,7 +172,7 @@ menu_sr_rs.iso_8859-2.vim: menu_sr_rs.utf-8.vim
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.ascii.vim.
menu_sr_rs.ascii.vim: menu_sr_rs.utf-8.vim
rm -f menu_sr_rs.ascii.vim
sed -e 's/а/a/g' -e 's/б/b/g' -e 's/в/v/g' -e 's/г/g/g' -e 's/д/d/g' \
$(SED) -e 's/а/a/g' -e 's/б/b/g' -e 's/в/v/g' -e 's/г/g/g' -e 's/д/d/g' \
-e 's/ђ/dj/g' -e 's/е/e/g' -e 's/ж/z/g' -e 's/з/z/g' -e 's/и/i/g' \
-e 's/ј/j/g' -e 's/к/k/g' -e 's/л/l/g' -e 's/љ/lj/g' -e 's/м/m/g' \
-e 's/н/n/g' -e 's/њ/nj/g' -e 's/о/o/g' -e 's/п/p/g' -e 's/р/r/g' \
@@ -190,22 +191,22 @@ menu_sr_rs.ascii.vim: menu_sr_rs.utf-8.vim
menu_uk_ua.cp1251.vim: menu_uk_ua.utf-8.vim
rm -f menu_uk_ua.cp1251.vim
iconv -f utf-8 -t cp1251 menu_uk_ua.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding cp1251/' -e 's/" Original translations/" Generated from menu_uk_ua.utf-8.vim, DO NOT EDIT/' > menu_uk_ua.cp1251.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1251/' -e 's/" Original translations/" Generated from menu_uk_ua.utf-8.vim, DO NOT EDIT/' > menu_uk_ua.cp1251.vim
# Convert menu_uk_ua.utf-8.vim to create menu_uk_ua.koi8-u.vim.
menu_uk_ua.koi8-u.vim: menu_uk_ua.utf-8.vim
rm -f menu_uk_ua.koi8-u.vim
iconv -f utf-8 -t koi8-u menu_uk_ua.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding koi8-u/' -e 's/" Original translations/" Generated from menu_uk_ua.utf-8.vim, DO NOT EDIT/' > menu_uk_ua.koi8-u.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding koi8-u/' -e 's/" Original translations/" Generated from menu_uk_ua.utf-8.vim, DO NOT EDIT/' > menu_uk_ua.koi8-u.vim
# Convert menu_hu_hu.utf-8.vim to create menu_hu_hu.iso_8859-2.vim.
menu_hu_hu.iso_8859-2.vim: menu_hu_hu.utf-8.vim
rm -f menu_hu_hu.iso_8859-2.vim
iconv -f utf-8 -t iso8859-2 menu_hu_hu.utf-8.vim | \
sed -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' -e 's/" Original translations/" Generated from menu_hu_hu.utf-8.vim, DO NOT EDIT/' > menu_hu_hu.iso_8859-2.vim
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' -e 's/" Original translations/" Generated from menu_hu_hu.utf-8.vim, DO NOT EDIT/' > menu_hu_hu.iso_8859-2.vim
# Convert menu_slovak_slovak_republic.1250.vim to create menu_sk_sk.iso_8859-2.vim.
menu_sk_sk.iso_8859-2.vim: menu_slovak_slovak_republic.1250.vim
rm -f menu_sk_sk.iso_8859-2.vim
iconv -f cp1250 -t iso8859-2 menu_slovak_slovak_republic.1250.vim | \
sed -e 's/scriptencoding cp1250/scriptencoding iso-8859-2/' -e 's/" Original translations/" Generated from menu_slovak_slovak_republic.1250.vim, DO NOT EDIT/' > menu_sk_sk.iso_8859-2.vim
$(SED) -e 's/scriptencoding cp1250/scriptencoding iso-8859-2/' -e 's/" Original translations/" Generated from menu_slovak_slovak_republic.1250.vim, DO NOT EDIT/' > menu_sk_sk.iso_8859-2.vim

View File

@@ -108,8 +108,9 @@ func s:Highlight_Matching_Pair()
" searchpairpos()'s skip argument.
" We match "escape" for special items, such as lispEscapeSpecial, and
" match "symbol" for lispBarSymbol.
let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' .
\ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|symbol\\|comment"''))'
let s_skip = 'synstack(".", col("."))'
\ . '->indexof({_, id -> synIDattr(id, "name") =~? '
\ . '"string\\|character\\|singlequote\\|escape\\|symbol\\|comment"}) >= 0'
" If executing the expression determines that the cursor is currently in
" one of the syntax types, then we want searchpairpos() to find the pair
" within those syntax types (i.e., not skip). Otherwise, the cursor is

View File

@@ -1,6 +1,6 @@
" Vim plugin for converting a syntax highlighted file to HTML.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
" Last Change: 2019 Nov 13
" Last Change: 2023 Jan 01
"
" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
" $VIMRUNTIME/syntax/2html.vim
@@ -8,11 +8,23 @@
if exists('g:loaded_2html_plugin')
finish
endif
let g:loaded_2html_plugin = 'vim8.1_v2'
let g:loaded_2html_plugin = 'vim9.0_v1'
"
" Changelog: {{{
" 8.1_v2 (this version): - Fix Bitbucket issue #19: fix calculation of tab
" 9.0_v1 (this version): - Implement g:html_no_doc and g:html_no_modeline
" for diff mode. Add tests.
" (Vim 9.0.1122): NOTE: no version string update for this version!
" - Bugfix for variable name in g:html_no_doc
" (Vim 9.0.0819): NOTE: no version string update for this version!
" - Add options g:html_no_doc, g:html_no_lines,
" and g:html_no_modeline (partially included in Vim
" runtime prior to version string update).
" - Updates for new Vim9 string append style (i.e. use
" ".." instead of ".")
"
" 8.1 updates: {{{
" 8.1_v2 (Vim 8.1.2312): - Fix SourceForge issue #19: fix calculation of tab
" stop position to use in expanding a tab, when that
" tab occurs after a syntax match which in turn
" comes after previously expanded tabs.
@@ -20,17 +32,17 @@ let g:loaded_2html_plugin = 'vim8.1_v2'
" destination file to ignore FileType events;
" speeds up processing when the destination file
" already exists and HTML highlight takes too long.
" - Fix Bitbucket issue #20: progress bar could not be
" - Fix SourceForge issue #20: progress bar could not be
" seen when DiffDelete background color matched
" StatusLine background color. Added TOhtmlProgress
" highlight group for manual user override, but
" calculate it to be visible compared to StatusLine
" by default.
" - Fix Bitbucket issue #1: Remove workaround for old
" - Fix SourceForge issue #1: Remove workaround for old
" browsers which don't support 'ch' CSS unit, since
" all modern browsers, including IE>=9, support it.
" - Fix Bitbucket issue #10: support termguicolors
" - Fix Bitbucket issue #21: default to using
" - Fix SourceForge issue #10: support termguicolors
" - Fix SourceForge issue #21: default to using
" generated content instead of <input> tags for
" uncopyable text, so that text is correctly
" prevented from being copied in chrome. Use
@@ -41,13 +53,14 @@ let g:loaded_2html_plugin = 'vim8.1_v2'
" - Fix fallback sizing of <input> tags for browsers
" without "ch" support.
" - Fix cursor on unselectable diff filler text.
" 8.1_v1 (Vim 8.1.0528): - Fix Bitbucket issue #6: Don't generate empty
" 8.1_v1 (Vim 8.1.0528): - Fix SourceForge issue #6: Don't generate empty
" script tag.
" - Fix Bitbucket issue #5: javascript should
" - Fix SourceForge issue #5: javascript should
" declare variables with "var".
" - Fix Bitbucket issue #13: errors thrown sourcing
" - Fix SourceForge issue #13: errors thrown sourcing
" 2html.vim directly when plugins not loaded.
" - Fix Bitbucket issue #16: support 'vartabstop'.
" - Fix SourceForge issue #16: support 'vartabstop'.
"}}}
"
" 7.4 updates: {{{
" 7.4_v2 (Vim 7.4.0899): Fix error raised when converting a diff containing
@@ -152,7 +165,7 @@ let g:loaded_2html_plugin = 'vim8.1_v2'
" TODO: {{{
" * Check the issue tracker:
" https://bitbucket.org/fritzophrenic/vim-tohtml/issues?status=new&status=open
" https://sourceforge.net/p/vim-tohtml/issues/search/?q=%21status%3Aclosed
" * Options for generating the CSS in external style sheets. New :TOcss
" command to convert the current color scheme into a (mostly) generic CSS
" stylesheet which can be re-used. Alternate stylesheet support? Good start

View File

@@ -1,6 +1,6 @@
" Vim syntax support file
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
" Last Change: 2022 Dec 26
" Last Change: 2023 Jan 01
"
" Additional contributors:
"

View File

@@ -2,8 +2,8 @@
" Language: automake Makefile.am
" Maintainer: Debian Vim Maintainers
" Former Maintainer: John Williams <jrw@pobox.com>
" Last Change: 2018 Dec 27
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/automake.vim
" Last Change: 2023 Jan 16
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/automake.vim
"
" XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
" it only because patches have been submitted for it by Debian users and the

View File

@@ -3,8 +3,8 @@
" Maintainer: Debian Vim Maintainers
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
" Last Change: 2022 Oct 29
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debchangelog.vim
" Last Change: 2023 Jan 16
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debchangelog.vim
" Standard syntax initialization
if exists('b:current_syntax')

View File

@@ -3,8 +3,8 @@
" Maintainer: Debian Vim Maintainers
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
" Last Change: 2022 May 11
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim
" Last Change: 2023 Jan 16
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim
" Standard syntax initialization
if exists('b:current_syntax')

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Debian copyright file
" Maintainer: Debian Vim Maintainers
" Last Change: 2019 Sep 07
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcopyright.vim
" Last Change: 2023 Jan 16
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcopyright.vim
" Standard syntax initialization
if exists('b:current_syntax')

View File

@@ -2,8 +2,8 @@
" Language: Debian sources.list
" Maintainer: Debian Vim Maintainers
" Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
" Last Change: 2022 Oct 29
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debsources.vim
" Last Change: 2023 Feb 06
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debsources.vim
" Standard syntax initialization
if exists('b:current_syntax')
@@ -14,7 +14,9 @@ endif
syn case match
" A bunch of useful keywords
syn match debsourcesKeyword /\(deb-src\|deb\|main\|contrib\|non-free\|restricted\|universe\|multiverse\)/
syn match debsourcesType /\(deb-src\|deb\)/
syn match debsourcesFreeComponent /\(main\|universe\)/
syn match debsourcesNonFreeComponent /\(contrib\|non-free-firmware\|non-free\|restricted\|multiverse\)/
" Match comments
syn match debsourcesComment /#.*/ contains=@Spell
@@ -48,7 +50,9 @@ exe 'syn match debsourcesUnsupportedDistrKeyword +\([[:alnum:]_./]*\)\<\('. join
" Associate our matches and regions with pretty colours
hi def link debsourcesLine Error
hi def link debsourcesKeyword Statement
hi def link debsourcesType Statement
hi def link debsourcesFreeComponent Statement
hi def link debsourcesNonFreeComponent Statement
hi def link debsourcesDistrKeyword Type
hi def link debsourcesUnsupportedDistrKeyword WarningMsg
hi def link debsourcesComment Comment

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Debian DEP3 Patch headers
" Maintainer: Gabriel Filion <gabster@lelutin.ca>
" Last Change: 2022 Apr 06
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/dep3patch.vim
" Last Change: 2023 Jan 16
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/dep3patch.vim
"
" Specification of the DEP3 patch header format is available at:
" https://dep-team.pages.debian.net/deps/dep3/

View File

@@ -1,12 +1,12 @@
" Vim syntax file
" Language: MS-DOS batch file (with NT command extensions)
" Maintainer: Mike Williams <mrw@eandem.co.uk>
" Language: MS-DOS/Windows batch file (with NT command extensions)
" Maintainer: Mike Williams <mrmrdubya@gmail.com>
" Filenames: *.bat
" Last Change: 6th September 2009
" Web Page: http://www.eandem.co.uk/mrw/vim
" Last Change: 12th February 2023
"
" Options Flags:
" dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default]
" dosbatch_colons_comment - any value to treat :: as comment line
"
" quit when a syntax file was already loaded
@@ -92,7 +92,11 @@ syn match dosbatchComment "^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,dosbatchS
syn match dosbatchComment "^@rem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
syn match dosbatchComment "\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
syn match dosbatchComment "\s@rem\($\|\s.*$\)"lc=5 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
syn match dosbatchComment "\s*:\s*:.*$" contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
if exists("dosbatch_colons_comment")
syn match dosbatchComment "\s*:\s*:.*$" contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
else
syn match dosbatchError "\s*:\s*:.*$"
endif
" Comments in ()'s - still to handle spaces before rem
syn match dosbatchComment "(rem\([^)]\|\^\@<=)\)*"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
@@ -110,34 +114,35 @@ syn keyword dosbatchImplicit vol xcopy
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link dosbatchTodo Todo
hi def link dosbatchTodo Todo
hi def link dosbatchError Error
hi def link dosbatchStatement Statement
hi def link dosbatchCommands dosbatchStatement
hi def link dosbatchLabel Label
hi def link dosbatchLabel Label
hi def link dosbatchConditional Conditional
hi def link dosbatchRepeat Repeat
hi def link dosbatchRepeat Repeat
hi def link dosbatchOperator Operator
hi def link dosbatchEchoOperator dosbatchOperator
hi def link dosbatchIfOperator dosbatchOperator
hi def link dosbatchOperator Operator
hi def link dosbatchEchoOperator dosbatchOperator
hi def link dosbatchIfOperator dosbatchOperator
hi def link dosbatchArgument Identifier
hi def link dosbatchIdentifier Identifier
hi def link dosbatchIdentifier Identifier
hi def link dosbatchVariable dosbatchIdentifier
hi def link dosbatchSpecialChar SpecialChar
hi def link dosbatchString String
hi def link dosbatchNumber Number
hi def link dosbatchString String
hi def link dosbatchNumber Number
hi def link dosbatchInteger dosbatchNumber
hi def link dosbatchHex dosbatchNumber
hi def link dosbatchBinary dosbatchNumber
hi def link dosbatchOctal dosbatchNumber
hi def link dosbatchBinary dosbatchNumber
hi def link dosbatchOctal dosbatchNumber
hi def link dosbatchComment Comment
hi def link dosbatchImplicit Function
hi def link dosbatchSwitch Special
hi def link dosbatchSwitch Special
hi def link dosbatchCmd PreProc

225
runtime/syntax/fish.vim Normal file
View File

@@ -0,0 +1,225 @@
" Vim syntax file
" Language: fish
" Maintainer: Nicholas Boyle (github.com/nickeb96)
" Repository: https://github.com/nickeb96/fish.vim
" Last Change: February 1, 2023
if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" Statements
syn cluster fishStatement contains=fishKeywordAndOr,fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand,fishVariable
syn keyword fishKeywordAndOr and or nextgroup=fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
hi def link fishKeywordAndOr fishOperator
syn keyword fishNot not skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
syn match fishNot /!/ skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
hi def link fishNot fishOperator
syn keyword fishSelectStatement command builtin skipwhite nextgroup=fishKeyword,fishKeywordIf,fishCommand,fishOption
hi def link fishSelectStatement fishKeyword
syn keyword fishKeyword end skipwhite nextgroup=@fishTerminator
syn keyword fishKeywordIf if skipwhite nextgroup=@fishStatement
syn keyword fishKeyword else skipwhite nextgroup=fishKeywordIf,fishSemicolon
hi def link fishKeywordIf fishKeyword
syn keyword fishKeyword switch skipwhite nextgroup=@fishArgument
syn keyword fishKeyword case skipwhite nextgroup=@fishArgument
syn keyword fishKeyword while skipwhite nextgroup=@fishStatement
syn keyword fishKeyword for skipwhite nextgroup=fishForVariable
syn match fishForVariable /[[:alnum:]_]\+/ contained skipwhite nextgroup=fishKeywordIn
syn keyword fishKeywordIn in contained skipwhite nextgroup=@fishArgument
hi def link fishForVariable fishParameter
hi def link fishKeywordIn fishKeyword
syn keyword fishKeyword _ abbr argparse begin bg bind block break breakpoint cd commandline
\ complete continue count disown echo emit eval exec exit false fg function functions
\ history jobs math printf pwd random read realpath return set set_color source status
\ string test time true type ulimit wait
\ skipwhite nextgroup=@fishNext
syn match fishKeyword /\<contains\>/ skipwhite nextgroup=@fishNext
syn match fishCommand /[[:alnum:]_\/[][[:alnum:]+._-]*/ skipwhite nextgroup=@fishNext
" Internally Nested Arguments
syn cluster fishSubscriptArgs contains=fishInnerVariable,fishIndexNum,fishIndexRange,fishInnerCommandSub
syn match fishInnerVariable /\$\+[[:alnum:]_]\+/ contained
syn match fishInnerVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 contained nextgroup=fishInnerSubscript
hi def link fishInnerVariable fishVariable
syn region fishInnerSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained
\ keepend contains=@fishSubscriptArgs
hi def link fishInnerSubscript fishSubscript
syn match fishIndexNum /[+-]?[[:digit:]]\+/ contained
hi def link fishIndexNum fishParameter
syn match fishIndexRange /\.\./ contained
hi def link fishIndexRange fishParameter
syn region fishInnerCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained
\ contains=@fishStatement
hi def link fishInnerCommandSub fishCommandSub
syn region fishQuotedCommandSub matchgroup=fishOperator start=/\$(/ end=/)/ contained
\ contains=@fishStatement
hi def link fishQuotedCommandSub fishCommandSub
syn match fishBraceExpansionComma /,/ contained
hi def link fishBraceExpansionComma fishOperator
syn match fishBracedParameter '[[:alnum:]\u5b\u5d@:=+.%/!_-]\+' contained contains=fishInnerPathGlob
hi def link fishBracedParameter fishParameter
syn region fishBracedQuote start=/'/ skip=/\\'/ end=/'/ contained
\ contains=fishEscapedEscape,fishEscapedSQuote
syn region fishBracedQuote start=/"/ skip=/\\"/ end=/"/ contained
\ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishInnerCommandSub
hi def link fishBracedQuote fishQuote
" Arguments
syn cluster fishArgument contains=fishParameter,fishOption,fishVariable,fishPathGlob,fishBraceExpansion,fishQuote,fishCharacter,fishCommandSub,fishRedirection,fishSelfPid
syn match fishParameter '[[:alnum:]\u5b\u5d@:=+.,%/!_-]\+' contained skipwhite nextgroup=@fishNext
syn match fishOption /-[[:alnum:]=_-]*/ contained skipwhite nextgroup=@fishNext
syn match fishPathGlob /\(\~\|*\|?\)/ contained skipwhite nextgroup=@fishNext
syn region fishBraceExpansion matchgroup=fishOperator start=/{/ end=/}/ contained
\ contains=fishBraceExpansionComma,fishInnerVariable,fishInnerCommandSub,fishBracedParameter,fishBracedQuote
\ skipwhite nextgroup=@fishNext
syn match fishVariable /\$\+[[:alnum:]_]\+/ skipwhite nextgroup=@fishNext
syn match fishVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 nextgroup=fishSubscript
syn region fishSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained
\ keepend contains=@fishSubscriptArgs
\ skipwhite nextgroup=@fishNext
syn region fishCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained
\ contains=@fishStatement
\ skipwhite nextgroup=@fishNext
syn region fishQuote start=/'/ skip=/\\'/ end=/'/ contained
\ contains=fishEscapedEscape,fishEscapedSQuote
\ skipwhite nextgroup=@fishNext
syn region fishQuote start=/"/ skip=/\\"/ end=/"/ contained
\ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishQuotedCommandSub
\ skipwhite nextgroup=@fishNext
syn match fishEscapedEscape /\\\\/ contained
syn match fishEscapedSQuote /\\'/ contained
syn match fishEscapedDQuote /\\"/ contained
syn match fishEscapedDollar /\\\$/ contained
hi def link fishEscapedEscape fishCharacter
hi def link fishEscapedSQuote fishCharacter
hi def link fishEscapedDQuote fishCharacter
hi def link fishEscapedDollar fishCharacter
syn match fishCharacter /\\[0-7]\{1,3}/ contained skipwhite nextgroup=@fishNext
syn match fishCharacter /\\u[0-9a-fA-F]\{4}/ contained skipwhite nextgroup=@fishNext
syn match fishCharacter /\\U[0-9a-fA-F]\{8}/ contained skipwhite nextgroup=@fishNext
syn match fishCharacter /\\x[0-7][0-9a-fA-F]\|\\x[0-9a-fA-F]/ contained skipwhite nextgroup=@fishNext
syn match fishCharacter /\\X[0-9a-fA-F]\{1,2}/ contained skipwhite nextgroup=@fishNext
syn match fishCharacter /\\[abcefnrtv[\](){}<>\\*?~%#$|&;'" ]/ contained skipwhite nextgroup=@fishNext
syn match fishRedirection /</ contained skipwhite nextgroup=fishRedirectionTarget
syn match fishRedirection /[0-9&]\?>[>?]\?/ contained skipwhite nextgroup=fishRedirectionTarget
syn match fishRedirection /[0-9&]\?>&[0-9-]/ contained skipwhite nextgroup=@fishNext
syn match fishRedirectionTarget /[[:alnum:]$~*?{,}"'\/._-]\+/ contained contains=fishInnerVariable skipwhite nextgroup=@fishNext
hi def link fishRedirectionTarget fishRedirection
syn match fishSelfPid /%self\>/ contained nextgroup=@fishNext
hi def link fishSelfPid fishOperator
" Terminators
syn cluster fishTerminator contains=fishPipe,fishBackgroundJob,fishSemicolon,fishSymbolicAndOr
syn match fishPipe /\(1>\|2>\|&\)\?|/ contained skipwhite nextgroup=@fishStatement
hi def link fishPipe fishEnd
syn match fishBackgroundJob /&$/ contained skipwhite nextgroup=@fishStatement
syn match fishBackgroundJob /&[^<>&|]/me=s+1,he=s+1 contained skipwhite nextgroup=@fishStatement
hi def link fishBackgroundJob fishEnd
syn match fishSemicolon /;/ skipwhite nextgroup=@fishStatement
hi def link fishSemicolon fishEnd
syn match fishSymbolicAndOr /\(&&\|||\)/ contained skipwhite skipempty nextgroup=@fishStatement
hi def link fishSymbolicAndOr fishOperator
" Other
syn cluster fishNext contains=fishEscapedNl,@fishArgument,@fishTerminator
syn match fishEscapedNl /\\$/ skipnl skipwhite contained nextgroup=@fishNext
syn match fishComment /#.*/ contains=fishTodo,@Spell
syn keyword fishTodo TODO contained
syn sync minlines=200
syn sync maxlines=300
" Intermediate highlight groups matching $fish_color_* variables
hi def link fishCommand fish_color_command
hi def link fishComment fish_color_comment
hi def link fishEnd fish_color_end
hi def link fishCharacter fish_color_escape
hi def link fishKeyword fish_color_keyword
hi def link fishEscapedNl fish_color_normal
hi def link fishOperator fish_color_operator
hi def link fishVariable fish_color_operator
hi def link fishInnerVariable fish_color_operator
hi def link fishPathGlob fish_color_operator
hi def link fishOption fish_color_option
hi def link fishParameter fish_color_param
hi def link fishQuote fish_color_quote
hi def link fishRedirection fish_color_redirection
" Default highlight groups
hi def link fish_color_param Normal
hi def link fish_color_normal Normal
hi def link fish_color_option Normal
hi def link fish_color_command Function
hi def link fish_color_keyword Keyword
hi def link fish_color_end Delimiter
hi def link fish_color_operator Operator
hi def link fish_color_redirection Type
hi def link fish_color_quote String
hi def link fish_color_escape Character
hi def link fish_color_comment Comment
hi def link fishTodo Todo
let b:current_syntax = 'fish'
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: FORTH
" Current Maintainer: Johan Kotlinski <kotlinski@gmail.com>
" Previous Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de>
" Last Change: 2018-03-29
" Previous Maintainer: Christian V. J. Br<EFBFBD>ssow <cvjb@cvjb.de>
" Last Change: 2023-01-12
" Filenames: *.fs,*.ft
" URL: https://github.com/jkotlinski/forth.vim
@@ -23,7 +23,6 @@ syn case ignore
" Some special, non-FORTH keywords
syn keyword forthTodo contained TODO FIXME XXX
syn match forthTodo contained 'Copyright\(\s([Cc])\)\=\(\s[0-9]\{2,4}\)\='
" Characters allowed in keywords
" I don't know if 128-255 are allowed in ANS-FORTH
@@ -98,13 +97,16 @@ syn keyword forthEndOfColonDef ; ;M ;m
syn keyword forthEndOfClassDef ;class
syn keyword forthEndOfObjectDef ;object
syn keyword forthDefine CONSTANT 2CONSTANT FCONSTANT VARIABLE 2VARIABLE
syn keyword forthDefine FVARIABLE CREATE USER VALUE TO DEFER IS DOES> IMMEDIATE
syn keyword forthDefine FVARIABLE CREATE USER VALUE TO DEFER IS <BUILDS DOES> IMMEDIATE
syn keyword forthDefine COMPILE-ONLY COMPILE RESTRICT INTERPRET POSTPONE EXECUTE
syn keyword forthDefine LITERAL CREATE-INTERPRET/COMPILE INTERPRETATION>
syn keyword forthDefine <INTERPRETATION COMPILATION> <COMPILATION ] LASTXT
syn keyword forthDefine COMP' POSTPONE, FIND-NAME NAME>INT NAME?INT NAME>COMP
syn keyword forthDefine NAME>STRING STATE C; CVARIABLE BUFFER: MARKER
syn keyword forthDefine , 2, F, C, COMPILE,
syn match forthDefine "\[DEFINED]"
syn match forthDefine "\[UNDEFINED]"
syn match forthDefine "\[IF]"
syn match forthDefine "\[IFDEF]"
syn match forthDefine "\[IFUNDEF]"
syn match forthDefine "\[THEN]"
@@ -180,6 +182,7 @@ syn keyword forthBlocks BLOCK-INCLUDED BLK
syn keyword forthMath DECIMAL HEX BASE
syn match forthInteger '\<-\=[0-9]\+.\=\>'
syn match forthInteger '\<&-\=[0-9]\+.\=\>'
syn match forthInteger '\<#-\=[0-9]\+.\=\>'
" recognize hex and binary numbers, the '$' and '%' notation is for gforth
syn match forthInteger '\<\$\x*\x\+\>' " *1* --- don't mess
syn match forthInteger '\<\x*\d\x*\>' " *2* --- this order!
@@ -192,18 +195,18 @@ syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe][-+]\d\+\>'
syn region forthComment start='0 \[if\]' end='\[endif\]' end='\[then\]' contains=forthTodo
" Strings
syn region forthString start=+\.*\"+ end=+"+ end=+$+
syn region forthString start=+\.*\"+ end=+"+ end=+$+ contains=@Spell
" XXX
syn region forthString start=+s\"+ end=+"+ end=+$+
syn region forthString start=+s\\\"+ end=+"+ end=+$+
syn region forthString start=+c\"+ end=+"+ end=+$+
syn region forthString start=+s\"+ end=+"+ end=+$+ contains=@Spell
syn region forthString start=+s\\\"+ end=+"+ end=+$+ contains=@Spell
syn region forthString start=+c\"+ end=+"+ end=+$+ contains=@Spell
" Comments
syn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError
syn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError
syn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError
syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError
syn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError
syn match forthComment '\\\%(\s.*\)\=$' contains=@Spell,forthTodo,forthSpaceError
syn region forthComment start='\\S\s' end='.*' contains=@Spell,forthTodo,forthSpaceError
syn match forthComment '\.(\s[^)]*)' contains=@Spell,forthTodo,forthSpaceError
syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=@Spell,forthTodo,forthSpaceError
syn region forthComment start='/\*' end='\*/' contains=@Spell,forthTodo,forthSpaceError
" Include files
syn match forthInclude '^INCLUDE\s\+\k\+'
@@ -260,3 +263,4 @@ let b:current_syntax = "forth"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:ts=8:sw=4:nocindent:smartindent:

View File

@@ -2,8 +2,8 @@
" Language: fstab file
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim
" Last Change: 2022 Dec 11
" Version: 1.6.2
" Last Change: 2023 Feb 19
" Version: 1.6.3
"
" Credits:
" David Necas (Yeti) <yeti@physics.muni.cz>
@@ -389,7 +389,7 @@ syn match fsFreqPassNumber /\d\+\s\+[012]\s*/ contained
syn match fsDevice /^\s*\zs.\{-1,}\s/me=e-1 nextgroup=fsMountPoint contains=@fsDeviceCluster,@fsGeneralCluster
syn match fsMountPoint /\s\+.\{-}\s/me=e-1 nextgroup=fsType contains=@fsMountPointCluster,@fsGeneralCluster contained
syn match fsType /\s\+.\{-}\s/me=e-1 nextgroup=fsOptions contains=@fsTypeCluster,@fsGeneralCluster contained
syn match fsOptions /\s\+.\{-}\s/me=e-1 nextgroup=fsFreqPass contains=@fsOptionsCluster,@fsGeneralCluster contained
syn match fsOptions /\s\+.\{-}\%(\s\|$\)/ nextgroup=fsFreqPass contains=@fsOptionsCluster,@fsGeneralCluster contained
syn match fsFreqPass /\s\+.\{-}$/ contains=@fsFreqPassCluster,@fsGeneralCluster contained
" Whole line comments
@@ -491,4 +491,4 @@ let b:current_syntax = "fstab"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: ts=8 ft=vim
" vim: ts=8 noet ft=vim

View File

@@ -5,7 +5,7 @@
" go.vim: Vim syntax file for Go.
" Language: Go
" Maintainer: Billie Cleek <bhcleek@gmail.com>
" Latest Revision: 2022-11-17
" Latest Revision: 2023-02-19
" License: BSD-style. See LICENSE file in source repository.
" Repository: https://github.com/fatih/vim-go
@@ -136,8 +136,11 @@ syn keyword goBoolean true false
syn keyword goPredefinedIdentifiers nil iota
hi def link goBuiltins Identifier
hi def link goPredefinedIdentifiers Constant
" Boolean links to Constant by default by vim: goBoolean and goPredefinedIdentifiers
" will be highlighted the same, but having the separate groups allows users to
" have separate highlighting for them if they desire.
hi def link goBoolean Boolean
hi def link goPredefinedIdentifiers goBoolean
" Comments; their contents
syn keyword goTodo contained TODO FIXME XXX BUG

View File

@@ -1,7 +1,8 @@
" Vim syntax file
" Language: gpg(1) configuration file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2010-10-14
" Language: gpg(1) configuration file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2010-10-14
" Updated: 2023-01-23 @ObserverOfTime: added a couple of keywords
if exists("b:current_syntax")
finish
@@ -12,91 +13,92 @@ set cpo&vim
setlocal iskeyword+=-
syn keyword gpgTodo contained FIXME TODO XXX NOTE
syn keyword gpgTodo contained FIXME TODO XXX NOTE
syn region gpgComment contained display oneline start='#' end='$'
\ contains=gpgTodo,gpgID,@Spell
syn region gpgComment contained display oneline start='#' end='$'
\ contains=gpgTodo,gpgID,@Spell
syn match gpgID contained display '\<\(0x\)\=\x\{8,}\>'
syn match gpgID contained display '\<\(0x\)\=\x\{8,}\>'
syn match gpgBegin display '^' skipwhite nextgroup=gpgComment,gpgOption,gpgCommand
syn match gpgBegin display '^' skipwhite nextgroup=gpgComment,gpgOption,gpgCommand
syn keyword gpgCommand contained skipwhite nextgroup=gpgArg
\ check-sigs decrypt decrypt-files delete-key
\ delete-secret-and-public-key delete-secret-key
\ edit-key encrypt-files export export-all
\ export-ownertrust export-secret-keys
\ export-secret-subkeys fast-import fingerprint
\ gen-prime gen-random import import-ownertrust
\ list-keys list-public-keys list-secret-keys
\ list-sigs lsign-key nrsign-key print-md print-mds
\ recv-keys search-keys send-keys sign-key verify
\ verify-files
syn keyword gpgCommand contained skipwhite nextgroup=gpgArgError
\ check-trustdb clearsign desig-revoke detach-sign
\ encrypt gen-key gen-revoke help list-packets
\ rebuild-keydb-caches sign store symmetric
\ update-trustdb version warranty
syn keyword gpgCommand contained skipwhite nextgroup=gpgArg
\ check-sigs decrypt decrypt-files delete-key
\ delete-secret-and-public-key delete-secret-key
\ edit-key encrypt-files export export-all
\ export-ownertrust export-secret-keys
\ export-secret-subkeys fast-import fingerprint
\ gen-prime gen-random import import-ownertrust
\ list-keys list-public-keys list-secret-keys
\ list-sigs lsign-key nrsign-key print-md print-mds
\ recv-keys search-keys send-keys sign-key verify
\ verify-files
syn keyword gpgCommand contained skipwhite nextgroup=gpgArgError
\ check-trustdb clearsign desig-revoke detach-sign
\ encrypt gen-key gen-revoke help list-packets
\ rebuild-keydb-caches sign store symmetric
\ update-trustdb version warranty
syn keyword gpgOption contained skipwhite nextgroup=gpgArg
\ attribute-fd cert-digest-algo charset cipher-algo
\ command-fd comment completes-needed compress
\ compress-algo debug default-cert-check-level
\ default-key default-preference-list
\ default-recipient digest-algo disable-cipher-algo
\ disable-pubkey-algo encrypt-to exec-path
\ export-options group homedir import-options
\ keyring keyserver keyserver-options load-extension
\ local-user logger-fd marginals-needed max-cert-depth
\ notation-data options output override-session-key
\ passphrase-fd personal-cipher-preferences
\ personal-compress-preferences
\ personal-digest-preferences photo-viewer
\ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
\ secret-keyring set-filename set-policy-url status-fd
\ trusted-key verify-options keyid-format list-options
syn keyword gpgOption contained skipwhite nextgroup=gpgArgError
\ allow-freeform-uid allow-non-selfsigned-uid
\ allow-secret-key-import always-trust
\ armor ask-cert-expire ask-sig-expire
\ auto-check-trustdb batch debug-all default-comment
\ default-recipient-self dry-run emit-version
\ emulate-md-encode-bug enable-special-filenames
\ escape-from-lines expert fast-list-mode
\ fixed-list-mode for-your-eyes-only
\ force-mdc force-v3-sigs force-v4-certs
\ gpg-agent-info ignore-crc-error ignore-mdc-error
\ ignore-time-conflict ignore-valid-from interactive
\ list-only lock-multiple lock-never lock-once
\ merge-only no no-allow-non-selfsigned-uid
\ no-armor no-ask-cert-expire no-ask-sig-expire
\ no-auto-check-trustdb no-batch no-comment
\ no-default-keyring no-default-recipient
\ no-encrypt-to no-expensive-trust-checks
\ no-expert no-for-your-eyes-only no-force-v3-sigs
\ no-force-v4-certs no-greeting no-literal
\ no-mdc-warning no-options no-permission-warning
\ no-pgp2 no-pgp6 no-pgp7 no-random-seed-file
\ no-secmem-warning no-show-notation no-show-photos
\ no-show-policy-url no-sig-cache no-sig-create-check
\ no-sk-comments no-tty no-utf8-strings no-verbose
\ no-version not-dash-escaped openpgp pgp2
\ pgp6 pgp7 preserve-permissions quiet rfc1991
\ set-filesize show-keyring show-notation show-photos
\ show-policy-url show-session-key simple-sk-checksum
\ sk-comments skip-verify textmode throw-keyid
\ try-all-secrets use-agent use-embedded-filename
\ utf8-strings verbose with-colons with-fingerprint
\ with-key-data yes
syn keyword gpgOption contained skipwhite nextgroup=gpgArg
\ attribute-fd cert-digest-algo charset cipher-algo
\ command-fd comment completes-needed compress
\ compress-algo debug default-cert-check-level
\ default-key default-preference-list
\ default-recipient digest-algo disable-cipher-algo
\ disable-pubkey-algo encrypt-to exec-path
\ export-options group homedir import-options
\ keyring keyserver keyserver-options load-extension
\ local-user logger-fd marginals-needed max-cert-depth
\ notation-data options output override-session-key
\ passphrase-fd personal-cipher-preferences
\ personal-compress-preferences
\ personal-digest-preferences photo-viewer
\ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
\ secret-keyring set-filename set-policy-url status-fd
\ trusted-key verify-options keyid-format list-options
\ default-new-key-algo weak-digest
syn keyword gpgOption contained skipwhite nextgroup=gpgArgError
\ allow-freeform-uid allow-non-selfsigned-uid
\ allow-secret-key-import always-trust
\ armor ask-cert-expire ask-sig-expire
\ auto-check-trustdb batch debug-all default-comment
\ default-recipient-self dry-run emit-version
\ emulate-md-encode-bug enable-special-filenames
\ escape-from-lines expert fast-list-mode
\ fixed-list-mode for-your-eyes-only
\ force-mdc force-v3-sigs force-v4-certs
\ gpg-agent-info ignore-crc-error ignore-mdc-error
\ ignore-time-conflict ignore-valid-from interactive
\ list-only lock-multiple lock-never lock-once
\ merge-only no no-allow-non-selfsigned-uid
\ no-armor no-ask-cert-expire no-ask-sig-expire
\ no-auto-check-trustdb no-batch no-comment
\ no-default-keyring no-default-recipient
\ no-encrypt-to no-expensive-trust-checks
\ no-expert no-for-your-eyes-only no-force-v3-sigs
\ no-force-v4-certs no-greeting no-literal
\ no-mdc-warning no-options no-permission-warning
\ no-pgp2 no-pgp6 no-pgp7 no-random-seed-file
\ no-secmem-warning no-show-notation no-show-photos
\ no-show-policy-url no-sig-cache no-sig-create-check
\ no-sk-comments no-tty no-utf8-strings no-verbose
\ no-version not-dash-escaped openpgp pgp2
\ pgp6 pgp7 preserve-permissions quiet rfc1991
\ set-filesize show-keyring show-notation show-photos
\ show-policy-url show-session-key simple-sk-checksum
\ sk-comments skip-verify textmode throw-keyid
\ try-all-secrets use-agent use-embedded-filename
\ utf8-strings verbose with-colons with-fingerprint
\ with-key-data yes
syn match gpgArg contained display '\S\+\(\s\+\S\+\)*' contains=gpgID
syn match gpgArg contained display '\S\+\(\s\+\S\+\)*' contains=gpgID
syn match gpgArgError contained display '\S\+\(\s\+\S\+\)*'
hi def link gpgComment Comment
hi def link gpgTodo Todo
hi def link gpgID Number
hi def link gpgOption Keyword
hi def link gpgCommand Error
hi def link gpgComment Comment
hi def link gpgTodo Todo
hi def link gpgID Number
hi def link gpgOption Keyword
hi def link gpgCommand Error
hi def link gpgArgError Error
let b:current_syntax = "gpg"

View File

@@ -1,149 +1,10 @@
" Vim syntax file
" Language: none; used to see highlighting
" Maintainer: Ronald Schild <rs@scutum.de>
" Last Change: 2019 Jun 06
" Version: 5.4n.1
" Additional Changes By: Lifepillar, Bram
" Maintainer: github user lacygoill
" Last Change: 2023 Mar 08
" To see your current highlight settings, do
" :so $VIMRUNTIME/syntax/hitest.vim
" save global options and registers
let s:hidden = &hidden
let s:lazyredraw = &lazyredraw
let s:more = &more
let s:report = &report
let s:whichwrap = &whichwrap
let s:shortmess = &shortmess
let s:wrapscan = &wrapscan
let s:register_a = @a
let s:register_se = @/
" set global options
set hidden lazyredraw nomore report=99999 shortmess=aoOstTW wrapscan
set whichwrap&
" print current highlight settings into register a
redir @a
silent highlight
redir END
" Open a new window if the current one isn't empty
if line("$") != 1 || getline(1) != ""
new
endif
" edit temporary file
edit Highlight\ test
" set local options
setlocal autoindent noexpandtab formatoptions=t shiftwidth=18 noswapfile tabstop=18
let &textwidth=&columns
" insert highlight settings
% delete
put a
" remove cleared groups
silent! g/ cleared$/d
" remove the colored xxx items
g/xxx /s///e
" remove color settings (not needed here)
global! /links to/ substitute /\s.*$//e
" Move split 'links to' lines to the same line
% substitute /^\(\w\+\)\n\s*\(links to.*\)/\1\t\2/e
" move linked groups to the end of file
global /links to/ move $
" move linked group names to the matching preferred groups
" TODO: this fails if the group linked to isn't defined
% substitute /^\(\w\+\)\s*\(links to\)\s*\(\w\+\)$/\3\t\2 \1/e
silent! global /links to/ normal mz3ElD0#$p'zdd
" delete empty lines
global /^ *$/ delete
" precede syntax command
% substitute /^[^ ]*/syn keyword &\t&/
" execute syntax commands
syntax clear
% yank a
@a
" remove syntax commands again
% substitute /^syn keyword //
" pretty formatting
global /^/ exe "normal Wi\<CR>\t\eAA\ex"
global /^\S/ join
" find out first syntax highlighting
let b:various = &highlight.',:Normal,:Cursor,:,'
let b:i = 1
while b:various =~ ':'.substitute(getline(b:i), '\s.*$', ',', '')
let b:i = b:i + 1
if b:i > line("$") | break | endif
endwhile
" insert headlines
call append(0, "Highlighting groups for various occasions")
call append(1, "-----------------------------------------")
if b:i < line("$")-1
let b:synhead = "Syntax highlighting groups"
if exists("hitest_filetypes")
redir @a
let
redir END
let @a = substitute(@a, 'did_\(\w\+\)_syn\w*_inits\s*#1', ', \1', 'g')
let @a = substitute(@a, "\n\\w[^\n]*", '', 'g')
let @a = substitute(@a, "\n", '', 'g')
let @a = substitute(@a, '^,', '', 'g')
if @a != ""
let b:synhead = b:synhead." - filetype"
if @a =~ ','
let b:synhead = b:synhead."s"
endif
let b:synhead = b:synhead.":".@a
endif
endif
call append(b:i+1, "")
call append(b:i+2, b:synhead)
call append(b:i+3, substitute(b:synhead, '.', '-', 'g'))
endif
" remove 'hls' highlighting
nohlsearch
normal 0
" we don't want to save this temporary file
set nomodified
" the following trick avoids the "Press RETURN ..." prompt
0 append
.
" restore global options and registers
let &hidden = s:hidden
let &lazyredraw = s:lazyredraw
let &more = s:more
let &report = s:report
let &shortmess = s:shortmess
let &whichwrap = s:whichwrap
let &wrapscan = s:wrapscan
let @a = s:register_a
" restore last search pattern
call histdel("search", -1)
let @/ = s:register_se
" remove variables
unlet s:hidden s:lazyredraw s:more s:report s:shortmess
unlet s:whichwrap s:wrapscan s:register_a s:register_se
" vim: ts=8
import 'dist/vimhighlight.vim'
call vimhighlight.HighlightTest()

View File

@@ -3,7 +3,7 @@
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainers: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
" Claudio Fleiner <claudio@fleiner.com>
" Last Change: 2022 Nov 18
" Last Change: 2023 Feb 20
" Please check :help html.vim for some comments and a description of the options
@@ -221,7 +221,7 @@ if main_syntax != 'java' || exists("java_javascript")
" JAVA SCRIPT
syn include @htmlJavaScript syntax/javascript.vim
unlet b:current_syntax
syn region javaScript start=+<script\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
syn region javaScript start=+<script\>\_[^>]*>+ keepend end=+</script\_[^>]*>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
syn region htmlScriptTag contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
hi def link htmlScriptTag htmlTag

31
runtime/syntax/lc.vim Normal file
View File

@@ -0,0 +1,31 @@
" Vim syntax file
" Language: Elsa
" Maintainer: Miles Glapa-Grossklag <miles@glapa-grossklag.com>
" Last Change: 2023-01-29
if exists('b:current_syntax')
finish
endif
" Keywords
syntax keyword elsaKeyword let eval
syntax match elsaKeyword "\v:"
highlight link elsaKeyword Keyword
" Comments
setlocal commentstring=--%s
syntax match elsaComment "\v--.*$"
highlight link elsaComment Comment
" Operators
syntax match elsaOperator "\v\="
syntax match elsaOperator "\v\=[abd*~]\>"
syntax match elsaOperator "\v-\>"
syntax match elsaOperator "\v\\"
highlight link elsaOperator Operator
" Definitions
syntax match elsaConstant "\v[A-Z]+[A-Z_0-9]*"
highlight link elsaConstant Constant
let b:current_syntax = 'elsa'

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: nginx.conf
" Maintainer: Chris Aumann <me@chr4.org>
" Last Change: Apr 15, 2017
" Last Change: Jan 25, 2023
if exists("b:current_syntax")
finish
@@ -84,6 +84,8 @@ syn keyword ngxListenOptions default_server contained
syn keyword ngxListenOptions ssl contained
syn keyword ngxListenOptions http2 contained
syn keyword ngxListenOptions spdy contained
syn keyword ngxListenOptions http3 contained
syn keyword ngxListenOptions quic contained
syn keyword ngxListenOptions proxy_protocol contained
syn keyword ngxListenOptions setfib contained
syn keyword ngxListenOptions fastopen contained
@@ -265,8 +267,16 @@ syn keyword ngxDirective http2_max_concurrent_streams
syn keyword ngxDirective http2_max_field_size
syn keyword ngxDirective http2_max_header_size
syn keyword ngxDirective http2_max_requests
syn keyword ngxDirective http2_push
syn keyword ngxDirective http2_push_preload
syn keyword ngxDirective http2_recv_buffer_size
syn keyword ngxDirective http2_recv_timeout
syn keyword ngxDirective http3_hq
syn keyword ngxDirective http3_max_concurrent_pushes
syn keyword ngxDirective http3_max_concurrent_streams
syn keyword ngxDirective http3_push
syn keyword ngxDirective http3_push_preload
syn keyword ngxDirective http3_stream_buffer_size
syn keyword ngxDirective if_modified_since
syn keyword ngxDirective ignore_invalid_headers
syn keyword ngxDirective image_filter
@@ -444,6 +454,10 @@ syn keyword ngxDirective proxy_temp_path
syn keyword ngxDirective proxy_timeout
syn keyword ngxDirective proxy_upload_rate
syn keyword ngxDirective queue
syn keyword ngxDirective quic_gso
syn keyword ngxDirective quic_host_key
syn keyword ngxDirective quic_mtu
syn keyword ngxDirective quic_retry
syn keyword ngxDirective random_index
syn keyword ngxDirective read_ahead
syn keyword ngxDirective real_ip_header
@@ -545,8 +559,10 @@ syn keyword ngxDirective ssl_certificate
syn keyword ngxDirective ssl_certificate_key
syn keyword ngxDirective ssl_ciphers
syn keyword ngxDirective ssl_client_certificate
syn keyword ngxDirective ssl_conf_command
syn keyword ngxDirective ssl_crl
syn keyword ngxDirective ssl_dhparam
syn keyword ngxDirective ssl_early_data
syn keyword ngxDirective ssl_ecdh_curve
syn keyword ngxDirective ssl_engine
syn keyword ngxDirective ssl_handshake_timeout
@@ -556,6 +572,7 @@ syn keyword ngxSSLPreferServerCiphersOn on contained
syn keyword ngxSSLPreferServerCiphersOff off contained
syn keyword ngxDirective ssl_preread
syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
syn keyword ngxDirective ssl_reject_handshake
syn match ngxSSLProtocol 'TLSv1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
syn match ngxSSLProtocol 'TLSv1\.1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
syn match ngxSSLProtocol 'TLSv1\.2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
@@ -622,6 +639,7 @@ syn keyword ngxDirective uwsgi_buffering
syn keyword ngxDirective uwsgi_buffers
syn keyword ngxDirective uwsgi_busy_buffers_size
syn keyword ngxDirective uwsgi_cache
syn keyword ngxDirective uwsgi_cache_background_update
syn keyword ngxDirective uwsgi_cache_bypass
syn keyword ngxDirective uwsgi_cache_key
syn keyword ngxDirective uwsgi_cache_lock
@@ -2225,6 +2243,19 @@ syn keyword ngxDirectiveThirdParty xss_override_status
syn keyword ngxDirectiveThirdParty xss_check_status
syn keyword ngxDirectiveThirdParty xss_input_types
" CT Module <https://github.com/grahamedgecombe/nginx-ct>
" Certificate Transparency module for nginx
syn keyword ngxDirectiveThirdParty ssl_ct
syn keyword ngxDirectiveThirdParty ssl_ct_static_scts
" Dynamic TLS records patch <https://github.com/cloudflare/sslconfig/blob/master/patches/nginx__dynamic_tls_records.patch>
" TLS Dynamic Record Resizing
syn keyword ngxDirectiveThirdParty ssl_dyn_rec_enable
syn keyword ngxDirectiveThirdParty ssl_dyn_rec_size_hi
syn keyword ngxDirectiveThirdParty ssl_dyn_rec_size_lo
syn keyword ngxDirectiveThirdParty ssl_dyn_rec_threshold
syn keyword ngxDirectiveThirdParty ssl_dyn_rec_timeout
" ZIP Module <https://www.nginx.com/resources/wiki/modules/zip/>
" ZIP archiver for nginx

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