Compare commits

...

193 Commits

Author SHA1 Message Date
Bram Moolenaar
cb6cbf29e9 patch 8.2.2333: Vim9: warning for uninitialized variable
Problem:    Vim9: warning for uninitialized variable. (Tony Mechelynck)
Solution:   Initialize "res".
2021-01-12 17:17:01 +01:00
Bram Moolenaar
9567efa1b4 patch 8.2.2332: Vim9: missing :endif not reported when using :windo
Problem:    Vim9: missing :endif not reported when using :windo.
Solution:   Pass a getline function to do_cmdline(). (closes #7650)
2021-01-11 22:16:30 +01:00
Bram Moolenaar
082517570d patch 8.2.2331: Vim9: wrong error when modifying dict declared with :final
Problem:    Vim9: wrong error when modifying dict declared with :final.
Solution:   Do not check for writable variable when an index follows.
            (closes #7657)
2021-01-11 21:20:18 +01:00
Bram Moolenaar
9e1d9e3473 patch 8.2.2330: Vim9: crash when using :trow in a not executed block
Problem:    Vim9: crash when using :trow in a not executed block.
Solution:   Don't generate the instruction when skipping. (closes #7659)
2021-01-11 20:17:34 +01:00
Bram Moolenaar
df4c9af7e7 patch 8.2.2329: not all ways Vim can be started are tested
Problem:    Not all ways Vim can be started are tested.
Solution:   Add a test for different program names. (Dominique Pellé,
            closes #7651)
2021-01-11 19:54:42 +01:00
Bram Moolenaar
82be4849ee Update runtime files. 2021-01-11 19:40:15 +01:00
Bram Moolenaar
48e11c1054 patch 8.2.2328: some test files may not be deleted
Problem:    Some test files may not be deleted.
Solution:   Add a delete() call, correct name. (Dominique Pellé, closes #7654)
2021-01-11 18:47:00 +01:00
Bram Moolenaar
16a6f91ccb patch 8.2.2327: debugging code included
Problem:    Debugging code included.
Solution:   Remove the debugging code.
2021-01-10 23:58:28 +01:00
Bram Moolenaar
086ae06862 patch 8.2.2326: build error with +eval feature but without +spell
Problem:    Build error with +eval feature but without +spell.
Solution:   Adjust #ifdef. (John Marriott)
2021-01-10 22:56:36 +01:00
Bram Moolenaar
75ab91ff34 patch 8.2.2325: Vim9: crash if map() changes the item type
Problem:    Vim9: crash if map() changes the item type.
Solution:   Check that the item type is still OK. (closes #7652)
            Fix problem with mapnew() on range list.
2021-01-10 22:42:50 +01:00
Bram Moolenaar
6f02b00bb0 patch 8.2.2324: not easy to get mark en cursor posotion by character count
Problem:    Not easy to get mark en cursor posotion by character count.
Solution:   Add functions that use character index. (Yegappan Lakshmanan,
            closes #7648)
2021-01-10 20:22:54 +01:00
Bram Moolenaar
31a11b942a patch 8.2.2323: Vim9: error when inferring type from empty dict/list
Problem:    Vim9: error when inferring type from empty dict/list.
Solution:   When the member is t_unknown use t_any. (closes #7009)
2021-01-10 19:23:27 +01:00
Bram Moolenaar
0186e58639 patch 8.2.2322: Vim9: closure nested limiting to one level
Problem:    Vim9: closure nested limiting to one level.
Solution:   Add outer_T.  Also make STOREOUTER work.
2021-01-10 18:33:11 +01:00
Bram Moolenaar
ab360526ef patch 8.2.2321: Vim9: cannot nest closures
Problem:    Vim9: cannot nest closures.
Solution:   Add the nesting level to ISN_LOADOUTER and ISN_STOREOUTER.
            (closes #7150, closes #7635)
2021-01-10 14:02:28 +01:00
Bram Moolenaar
cff40ff986 patch 8.2.2320: Vim9: no error for comparing bool with string
Problem:    Vim9: no error for comparing bool with string.
Solution:   Check for wrong types when comparing. (closes #7639)
2021-01-09 16:21:37 +01:00
Bram Moolenaar
657137ca48 patch 8.2.2319: "exptype_T" can be read as "expected type"
Problem:    "exptype_T" can be read as "expected type".
Solution:   Rename to "exprtype_T", expression type.
2021-01-09 15:45:23 +01:00
Bram Moolenaar
e7525c5520 patch 8.2.2318: Vim9: string and list index work differently
Problem:    Vim9: string and list index work differently.
Solution:   Make string index work like list index. (closes #7643)
2021-01-09 13:20:37 +01:00
Bram Moolenaar
9e0f883f89 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Problem:    Vim9: command modifier before list unpack doesn't work.
Solution:   Only recognize "[" directly after the name. (closes #7641)
2021-01-09 12:09:22 +01:00
Bram Moolenaar
b657198cb3 patch 8.2.2316: Vim9: cannot list a lambda function
Problem:    Vim9: cannot list a lambda function.
Solution:   Support the <lambda>9 notation, like :disassemble. (closes #7634)
2021-01-08 22:24:19 +01:00
Bram Moolenaar
832ea89ca9 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Problem:    Vim9: "enddef" as dict key misintepreted as function end.
Solution:   Check for following colon. (closes #7640)
2021-01-08 21:55:26 +01:00
Bram Moolenaar
299f3036ec patch 8.2.2314: Vim9: returning zero takes two instructions
Problem:    Vim9: returning zero takes two instructions.
Solution:   Add ISN_RETURN_ZERO.
2021-01-08 20:53:09 +01:00
Bram Moolenaar
ece0b87c0f patch 8.2.2313: Vim9: using uninitialized field when parsing range
Problem:    Vim9: using uninitialized field when parsing range. ":silent!" not
            respected when parsing range fails.
Solution:   Initialize ea.skip.  On pattern failure handle it like an error.
            (closes #7636)
2021-01-08 20:40:45 +01:00
Bram Moolenaar
467b59c2eb patch 8.2.2312: build failure with Ruby 3.0 and 32 bits
Problem:    Build failure with Ruby 3.0 and 32 bits.
Solution:   Add #ifdef. (closes #7638)
2021-01-08 19:31:39 +01:00
Bram Moolenaar
17126b1396 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Problem:    Vim9: cannot assign to a variable that shadows a command modifier.
Solution:   Check for assignment after possible command modifier.
            (closes #7632)
2021-01-07 22:03:02 +01:00
Bram Moolenaar
43b69b39ac patch 8.2.2310: Vim9: winsaveview() return type is too generic
Problem:    Vim9: winsaveview() return type is too generic.
Solution:   use dict<number> instead of dict<any>. (closes #7626)
2021-01-07 20:23:33 +01:00
Bram Moolenaar
c37b655443 patch 8.2.2309: 0o777 not recognized as octal
Problem:    0o777 not recognized as octal.
Solution:   Use vim_isodigit(). (Ken Takata, closes #7633, closes #7631)
2021-01-07 19:36:30 +01:00
Bram Moolenaar
328eac2b5d patch 8.2.2308: Vim9: no error when assigning lambda to funcref
Problem:    Vim9: no error when assigning lambda to funcref without return
            value.
Solution:   Default return value to "any". (closes #7629)
2021-01-07 19:23:08 +01:00
Bram Moolenaar
ebbf11c119 patch 8.2.2307: a shell command in the vimrc causes terminal output
Problem:    A shell command in the vimrc causes terminal output.
Solution:   Do not call starttermcap() after a shell command if the termcap
            wasn't active before.
2021-01-07 14:45:03 +01:00
Bram Moolenaar
32b3f82010 patch 8.2.2306: Vim9: when using function reference type is not checked
Problem:    Vim9: when using function reference type is not checked.
Solution:   When using a function reference lookup the type and check the
            argument types. (issue #7629)
2021-01-06 21:59:39 +01:00
Bram Moolenaar
b23279d7a2 patch 8.2.2305: Vim9: "++var" and "--var" are silently accepted
Problem:    Vim9: "++var" and "--var" are silently accepted.
Solution:   Give an error message.
2021-01-05 22:08:20 +01:00
Bram Moolenaar
0acbf5ae66 patch 8.2.2304: Vim9: no test for unletting an imported variable
Problem:    Vim9: no test for unletting an imported variable.
Solution:   Add a test.  Fix line number in error.
2021-01-05 20:58:25 +01:00
Bram Moolenaar
ecac591cce patch 8.2.2303: Vim9: backtick expansion doesn't work for :foldopen
Problem:    Vim9: backtick expansion doesn't work for :foldopen.
Solution:   Do recognize backtick expansion. (closes #7621)
2021-01-05 19:23:28 +01:00
Bram Moolenaar
a79925a0a8 patch 8.2.2302: Vim9: using an option value may use uninitialized memory
Problem:    Vim9: using an option value may use uninitialized memory.
Solution:   Clear v_lock. (closes #7620)
2021-01-05 17:50:28 +01:00
Bram Moolenaar
752fc692ac patch 8.2.2301: Vim9: cannot unlet a dict or list item
Problem:    Vim9: cannot unlet a dict or list item.
Solution:   Add ISN_UNLETINDEX.  Refactor assignment code to use for unlet.
2021-01-04 21:57:11 +01:00
Bram Moolenaar
d62d87d8f3 patch 8.2.2300: Vim9: wrong order on type stack when using dict
Problem:    Vim9: wrong order on type stack when using dict.
Solution:   Generate constants before a dict. (closes #7619)
2021-01-04 17:40:12 +01:00
Bram Moolenaar
d1510ee946 patch 8.2.2299: Vim9: invalid memory access making error message flaky
Problem:    Vim9: invalid memory access making error message flaky.
Solution:   Do not check cmd_argt for CMD_USER. (issue #7467)
2021-01-04 16:15:58 +01:00
Bram Moolenaar
cef1270dec patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Problem:    Vim9: comment right after "(" of function not recognized.
Solution:   Do not skip over white space before calling get_function_args().
            (closes #7613)
2021-01-04 14:09:43 +01:00
Bram Moolenaar
0ea0440865 patch 8.2.2297: Vim9: cannot set 'number' to a boolean value
Problem:    Vim9: cannot set 'number' to a boolean value.
Solution:   Use tv_get_bool(). (closes #7615)
2021-01-04 13:37:54 +01:00
Bram Moolenaar
014f698cb6 patch 8.2.2296: cannot use CTRL-N and CTRL-P in a popup menu
Problem:    Cannot use CTRL-N and CTRL-P in a popup menu.
Solution:   Use CTRL-N like <Down> and CTRL-P like <Up>. (closes #7614)
2021-01-04 13:18:30 +01:00
Bram Moolenaar
d93a7fc1a9 patch 8.2.2295: incsearch does not detect empty pattern properly
Problem:    Incsearch does not detect empty pattern properly.
Solution:   Return magic state when skipping over a pattern. (Christian
            Brabandt, closes #7612, closes #6420)
2021-01-04 12:42:13 +01:00
Bram Moolenaar
82c38fe508 patch 8.2.2294: VMS: a few remaining problems
Problem:    VMS: a few remaining problems.
Solution:   Add VMS specific changes. Add Lua support. (Zoltan Arpadffy)
2021-01-04 10:47:26 +01:00
Bram Moolenaar
bb0956fc65 patch 8.2.2293: build failure with Motif
Problem:    Build failure with Motif. (Tony Mechelynck)
Solution:   Use empty_option instead of empty_options.
2021-01-03 22:12:15 +01:00
Bram Moolenaar
5f63938447 patch 8.2.2292: Vim: expr test fails
Problem:    Vim: expr test fails.
Solution:   Add missing part of "null" support.
2021-01-03 22:05:19 +01:00
Bram Moolenaar
6797782127 patch 8.2.2291: Vim9: cannot use "null" for v:null
Problem:    Vim9: cannot use "null" for v:null.
Solution:   Support "null" like "true" and "false". (closes #7495)
2021-01-03 21:53:53 +01:00
Bram Moolenaar
2ef951dd31 patch 8.2.2290: Vim9: unlet of global variable cannot be compiled
Problem:    Vim9: unlet of global variable cannot be compiled.
Solution:   Skip over variables that might be defined later. Give an error if
            a subscript is found. (closes #7585)
2021-01-03 20:55:26 +01:00
Bram Moolenaar
e5a2dc87fd patch 8.2.2289: Vim9: 'cpo' can become empty
Problem:    Vim9: 'cpo' can become empty.
Solution:   Use empty_option instead of an empty string.  Update quickfix
            buffer after restoring 'cpo'.  (closes #7608)
2021-01-03 19:52:05 +01:00
Bram Moolenaar
5afd081cd3 patch 8.2.2288: Vim9: line break and comment not always skipped
Problem:    Vim9: line break and comment not always skipped.
Solution:   Skip over white space and then line break more consistently.
            (closes #7610)
2021-01-03 18:33:13 +01:00
Bram Moolenaar
cec77d4530 patch 8.2.2287: sort test fails when locale is French Canadian
Problem:    Sort test fails when locale is French Canadian.
Solution:   Expect a different sort order. (Dominique Pellé, closes #7609)
2021-01-03 17:39:28 +01:00
Bram Moolenaar
fefa6c347e patch 8.2.2286: sort test fails when locale is Canadian English
Problem:    Sort test fails when locale is Canadian English. (Neil H Watson)
Solution:   Expect a different sort order. (closes #7609)
2021-01-03 16:18:04 +01:00
Bram Moolenaar
b0d8182fa3 patch 8.2.2285: Vim9: cannot set an option to a false
Problem:    Vim9: cannot set an option to a false.
Solution:   For VAR_BOOL use string "0". (closes #7603)
2021-01-03 15:55:10 +01:00
Bram Moolenaar
31a201a04a patch 8.2.2284: Vim9: cannot set an option to a boolean value
Problem:    Vim9: cannot set an option to a boolean value.
Solution:   Check for VAR_BOOL. (closes #7603)
2021-01-03 14:47:25 +01:00
Bram Moolenaar
e68b02a1c4 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Problem:    Vim9: crash when lambda has fewer arguments than expected.
Solution:   Don't check arguments when already failed. (closes #7606)
2021-01-03 13:09:51 +01:00
Bram Moolenaar
339c1bdbdf patch 8.2.2282: length check mismatch with argument of strncmp()
Problem:    Length check mismatch with argument of strncmp(). (Christian
            Brabandt)
Solution:   Adjust length check.
2021-01-02 20:14:23 +01:00
Bram Moolenaar
a11919fa44 patch 8.2.2281: Vim9: compiled "wincmd" cannot be followed by bar
Problem:    Vim9: compiled "wincmd" cannot be followed by bar.
Solution:   Check for bar after "wincmd". (closes #7599)
2021-01-02 19:44:56 +01:00
Bram Moolenaar
9d19e4f4ba patch 8.2.2280: fuzzy matching doesn't give access to the scores
Problem:    Fuzzy matching doesn't give access to the scores.
Solution:   Return the scores with a third list. (Yegappan Lakshmanan,
            closes #7596)
2021-01-02 18:31:32 +01:00
Bram Moolenaar
508b5618ec patch 8.2.2279: Vim9: memory leak with catch in skipped block
Problem:    Vim9: memory leak with catch in skipped block.
Solution:   Free the pattern if not used.
2021-01-02 18:17:26 +01:00
Bram Moolenaar
66c50c5653 patch 8.2.2278: falling back to old regexp engine can some patterns
Problem:    Falling back to old regexp engine can some patterns.
Solution:   Do not fall back once [[:lower:]] or [[:upper:]] is used.
            (Christian Brabandt, closes #7572)
2021-01-02 17:43:49 +01:00
Bram Moolenaar
9281c6cae4 patch 8.2.2277: missing backslash
Problem:    Missing backslash.
Solution:   Add backslash.
2021-01-02 17:06:16 +01:00
Bram Moolenaar
a72514945b patch 8.2.2276: list of distributed files is outdated
Problem:    List of distributed files is outdated.
Solution:   Update the file list.  Minor comment updates.
2021-01-02 16:53:13 +01:00
Bram Moolenaar
7e6a515ed1 Update runtime files. 2021-01-02 16:39:53 +01:00
Bram Moolenaar
02faa944c6 patch 8.2.2275: CTRL-C not recognized in Mintty
Problem:    CTRL-C not recognized in Mintty.
Solution:   Recognize the modifyOtherKeys code ending in "u". (Christian
            Brabandt, closes #7575)
2021-01-02 16:17:18 +01:00
Bram Moolenaar
2f91e2f8da patch 8.2.2274: badge for Travis is outdated
Problem:    badge for Travis is outdated.
Solution:   Update badge for move from travis-ci.org to travis-ci.com.
2021-01-02 16:06:44 +01:00
Bram Moolenaar
628c102d12 patch 8.2.2273: build failure
Problem:    Build failure.
Solution:   Add missing changes to header file.
2021-01-02 15:49:28 +01:00
Bram Moolenaar
aa210a3aec patch 8.2.2272: Vim9: extend() can violate the type of a variable
Problem:    Vim9: extend() can violate the type of a variable.
Solution:   Add the type to the dictionary or list and check items against it.
            (closes #7593)
2021-01-02 15:41:03 +01:00
Bram Moolenaar
3e0107ea16 patch 8.2.2271: ml_get error when changing hidden buffer in Python
Problem:    ml_get error when changing hidden buffer in Python.
Solution:   Block updating folds. (closes #7598)
2021-01-02 13:53:59 +01:00
Bram Moolenaar
38a434f7ba patch 8.2.2270: warning for size_t to int conversion
Problem:    Warning for size_t to int conversion. (Randall W. Morris)
Solution:   Add a type cast.
2021-01-02 12:45:45 +01:00
Bram Moolenaar
edc10b541b patch 8.2.2269: not all :hardcopy code covered by tests
Problem:    Not all :hardcopy code covered by tests.
Solution:   Test more combinations. (Dominique Pellé, closes #7595)
2021-01-01 21:34:37 +01:00
Bram Moolenaar
3862ea3f62 patch 8.2.2268: Vim9: list unpack seen as declaration
Problem:    Vim9: list unpack seen as declaration.
Solution:   Check for "var". (closes #7594)
2021-01-01 21:05:55 +01:00
Bram Moolenaar
c368957b19 patch 8.2.2267: Vim9: cannot use unlet for a dict member
Problem:    Vim9: cannot use unlet for a dict member.
Solution:   Pass GLV_NO_DECL to get_lval(). (closes #7585)
2021-01-01 19:40:02 +01:00
Bram Moolenaar
e7a73e0762 patch 8.2.2266: Vim9: it can be hard to see where white space is missing
Problem:    Vim9: it can be hard to see where white space is missing.
Solution:   Mention the text where the error was seen. (closes #7580)
2021-01-01 19:17:55 +01:00
Bram Moolenaar
b8ba9b9197 patch 8.2.2265: error message for missing endfunc/enddef is last line
Problem:    Error message for missing endfunc/enddef is last line.
Solution:   Report the line where the function starts. (closes #7582)
2021-01-01 18:54:34 +01:00
Bram Moolenaar
5178b1b02f patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Problem:    Vim9: no error for mismatched :endfunc or :enddef.
Solution:   Check for the mismatch. (issue #7582)
2021-01-01 18:43:51 +01:00
Bram Moolenaar
69f7050ceb patch 8.2.2263: Vim9: compilation error with try-catch in skipped block
Problem:    Vim9: compilation error with try-catch in skipped block.
Solution:   Do not bail out when generate_instr() returns NULL. (closes #7584)
2021-01-01 16:10:46 +01:00
Bram Moolenaar
a8b8af19e4 patch 8.2.2262: Vim9: converting bool to string prefixes v:
Problem:    Vim9: converting bool to string prefixes v:.
Solution:   Do not use the v: prefix.
2021-01-01 15:11:04 +01:00
Bram Moolenaar
d5ea8f08f7 patch 8.2.2261: Vim9: boolean option gets string type
Problem:    Vim9: boolean option gets string type.
Solution:   Check for VAR_BOOL. (closes #7588)
2021-01-01 14:49:15 +01:00
Bram Moolenaar
5efe0e5d16 patch 8.2.2260: window resize test fails in very wide terminal
Problem:    Window resize test fails in very wide terminal.
Solution:   Resize using the 'columns' option.  (Vladimir Lomov, closes #7592)
2021-01-01 14:31:34 +01:00
Bram Moolenaar
a387083b2f patch 8.2.2259: Test_Executable() fails when using chroot
Problem:    Test_Executable() fails when using chroot.
Solution:   Ignore the difference between "sbin" and "bin".
2021-01-01 14:20:44 +01:00
Bram Moolenaar
beef4eeda5 patch 8.2.2258: not all OCaml related files are detected
Problem:    Not all OCaml related files are detected.
Solution:   Update OCaml file type detection.  (Markus Mottl, closes #7590)
2021-01-01 13:54:00 +01:00
Bram Moolenaar
2949cfdbe4 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Problem:    Vim9: using -> for lambda is ambiguous.
Solution:   Stop supporting ->, must use =>.
2020-12-31 21:28:47 +01:00
Bram Moolenaar
adc8e44645 patch 8.2.2256: Vim9: cannot use function( after line break in :def function
Problem:    Vim9: cannot use function( after line break in :def function.
Solution:   Check for "(" after "function". (closes #7581)
2020-12-31 18:28:18 +01:00
Bram Moolenaar
1779ff4842 patch 8.2.2255: Tcl test fails
Problem:    Tcl test fails.
Solution:   Change option handling.
2020-12-31 18:11:16 +01:00
Bram Moolenaar
dd1f426bd6 patch 8.2.2254: Vim9: bool option type is number
Problem:    Vim9: bool option type is number.
Solution:   Have get_option_value() return a different value for bool and
            number options. (closes #7583)
2020-12-31 17:41:01 +01:00
Bram Moolenaar
ca2f7e7af3 patch 8.2.2253: Vim9: expr test fails
Problem:    Vim9: expr test fails.
Solution:   Add missing assignment.
2020-12-31 13:39:54 +01:00
Bram Moolenaar
6b55377303 patch 8.2.2252: Vim9: crash when using lambda without return type in dict
Problem:    Vim9: crash when using lambda without return type in dict.
Solution:   Without a return type use t_unknown. (closes #7587)
2020-12-31 13:31:23 +01:00
Bram Moolenaar
a04d447d3a patch 8.2.2251: test failures in legacy script
Problem:    Test failures in legacy script.
Solution:   Check for Vim9 script.
2020-12-30 21:16:37 +01:00
Bram Moolenaar
de4f95b041 patch 8.2.2250: Vim9: sublist is ambiguous
Problem:    Vim9: sublist is ambiguous.
Solution:   Require white space around the colon. (closes #7409)
2020-12-30 20:39:21 +01:00
Bram Moolenaar
2a5c61a019 patch 8.2.2249: termcodes test is flaky when used over ssh
Problem:    Termcodes test is flaky when used over ssh with X forwarding.
Solution:   Set 'mousetime' to a larger value. (Dominique Pellé, closes #7576,
            closes #7563)
2020-12-30 14:59:23 +01:00
Bram Moolenaar
2808da39f9 patch 8.2.2248: ASAN error on exit with GUI
Problem:    ASAN error on exit with GUI.
Solution:   Check the window still has lines. (Christian Brabandt,
            closes #7573)
2020-12-30 14:08:35 +01:00
Bram Moolenaar
467676d468 patch 8.2.2247: VMS: various smaller problems
Problem:    VMS: various smaller problems.
Solution:   Fix VMS building and other problems. (Zoltan Arpadffy)
2020-12-30 13:14:45 +01:00
Bram Moolenaar
4d8c96d466 patch 8.2.2246: cursor keys not recognized at the hit-Enter prompt
Problem:    Cursor keys not recognized at the hit-Enter prompt after executing
            an external command.
Solution:   Change the codes for the extra cursor keys. (closes #7562)
            Tune the delays to avoid test flakyness.
2020-12-29 20:53:33 +01:00
Bram Moolenaar
285b15fce1 patch 8.2.2245: Vim9: return value of winrestcmd() cannot be executed
Problem:    Vim9: return value of winrestcmd() cannot be executed.
Solution:   Put colons before each range. (closes #7571)
2020-12-29 20:25:19 +01:00
Bram Moolenaar
89015a6759 patch 8.2.2244: crash when making the window width negative
Problem:    Crash when making the window width of the not-current window
            negative.
Solution:   Make sure the window width is not negative. (closes #7568)
2020-12-29 12:46:51 +01:00
Bram Moolenaar
4012d26207 patch 8.2.2243: crash when popup mask contains zeroes
Problem:    Crash when popup mask contains zeroes.
Solution:   Check boundaries properly. (closes #7569)
2020-12-29 11:57:46 +01:00
Bram Moolenaar
8242ebbdba patch 8.2.2242: Vim9: bar line continuation does not work at script level
Problem:    Vim9: line continuation with bar does not work at script level.
Solution:   Check for Vim9 script.
2020-12-29 11:15:01 +01:00
Bram Moolenaar
864a28b6a6 patch 8.2.2241: Build with Ruby and clang may fail
Problem:    Build with Ruby and clang may fail.
Solution:   Adjust congigure and sed script. (Ozaki Kiichi, closes #7566)
2020-12-28 21:36:56 +01:00
Bram Moolenaar
41a834d1e3 patch 8.2.2240: clientserver test fails if full path is used
Problem:    Clientserver test fails if full path is used.
Solution:   Ignore the path preceding the file name.
2020-12-28 21:15:16 +01:00
Bram Moolenaar
dcc58e031d patch 8.2.2239: Vim9: concatenating lines with backslash is inconvenient
Problem:    Vim9: concatenating lines with backslash is inconvenient.
Solution:   Support concatenating lines starting with '|', useful for
            :autocmd, :command, etc. (closes #6702)
2020-12-28 20:53:21 +01:00
Bram Moolenaar
9b8d62267f patch 8.2.2238: Vim9: cannot load a Vim9 script without the +eval feature
Problem:    Vim9: cannot load a Vim9 script without the +eval feature.
Solution:   Support Vim9 script syntax without the +eval feature.
2020-12-28 18:26:00 +01:00
Bram Moolenaar
ed1e4c9a70 patch 8.2.2237: CI on Mac fails in sed command
Problem:    CI on Mac fails in sed command.
Solution:   Set LC_ALL to "C". (Ozaki Kiichi, closes #7565)
2020-12-28 15:46:47 +01:00
Bram Moolenaar
746670604a patch 8.2.2236: 'scroll' option can change when setting the statusline
Problem:    'scroll' option can change when setting the statusline or tabline
            but the option context is not updated.
Solution:   Update the script context when the scroll option is changed as a
            side effect. (Christian Brabandt, closes #7533)
2020-12-28 15:41:41 +01:00
Bram Moolenaar
dace9f785f patch 8.2.2235: build failure with some Ruby versions
Problem:    Build failure with some Ruby versions.
Solution:   Adjust the code for Ruby 3.0. (Ozaki Kiichi, closes #7564)
2020-12-28 15:07:45 +01:00
Bram Moolenaar
3e112acc22 patch 8.2.2234: command line wildmenu test often fails with Unix GUI
Problem:    Command line wildmenu test often fails with Unix GUI.
Solution:   Skip the test where it is expected to fail.
2020-12-28 13:41:53 +01:00
Bram Moolenaar
17793ef23a patch 8.2.2233: cannot convert a byte index into a character index
Problem:    Cannot convert a byte index into a character index.
Solution:   Add charidx(). (Yegappan Lakshmanan, closes #7561)
2020-12-28 12:56:58 +01:00
Bram Moolenaar
9618a25b9c patch 8.2.2232: compiler error for falling through into next case
Problem:    Compiler error for falling through into next case.
Solution:   Move FALLTHROUGH below the #endif
2020-12-27 19:18:03 +01:00
Bram Moolenaar
e4862a0fe6 patch 8.2.2231: when "--remote file" is used "file" is not reloaded
Problem:    When "--remote file" is used "file" is not reloaded.
Solution:   When a :drop command is used for a file that is already displayed
            in a window and it has not been changed, check if it needs to be
            reloaded. (closes #7560)
2020-12-27 19:00:24 +01:00
Bram Moolenaar
179eb567b1 patch 8.2.2230: Vim9: insert completion runs into error
Problem:    Vim9: insert completion runs into error.
Solution:   Insert colon before range. (closes #7556)
2020-12-27 18:03:22 +01:00
Bram Moolenaar
39cb2dab18 patch 8.2.2229: build failure without the +eval feature
Problem:    build failure without the +eval feature.
Solution:   Add #ifdef.
2020-12-27 17:35:18 +01:00
Bram Moolenaar
4389f9cd00 patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Problem:    Vim9: cannot use ":e #" because # starts a comment.
Solution:   Support using %% instead of #.
2020-12-27 16:55:11 +01:00
Bram Moolenaar
e462f52db3 patch 8.2.2227: Vim9: recognizing lambda is too complicated
Problem:    Vim9: recognizing lambda is too complicated.
Solution:   Call compile_lambda() and check for NOTDONE.
2020-12-27 14:43:30 +01:00
Bram Moolenaar
7e3ee7823f patch 8.2.2226: Vim9: script test fails
Problem:    Vim9: script test fails.
Solution:   Add missing change.
2020-12-27 14:02:27 +01:00
Bram Moolenaar
a629495530 patch 8.2.2225: Vim9: error when using :import in legacy script twice
Problem:    Vim9: error when using :import in legacy script twice.
Solution:   Make it possible to redefine an import when reloading.
2020-12-27 13:39:50 +01:00
Bram Moolenaar
07a65d26e7 patch 8.2.2224: Vim9: crash if script reloaded with different variable type
Problem:    Vim9: crash if script reloaded with different variable type.
Solution:   Check the type when accessing the variable.
2020-12-26 20:09:15 +01:00
Bram Moolenaar
cdc40c43f1 patch 8.2.2223: Vim9: Reloading marks a :def function as deleted
Problem:    Vim9: Reloading marks a :def function as deleted.
Solution:   Clear the function contents but keep the index.
2020-12-26 17:43:08 +01:00
Bram Moolenaar
2b32700dab patch 8.2.2222: Vim9: cannot keep script variables when reloading
Problem:    Vim9: cannot keep script variables when reloading.
Solution:   Add the "noclear" argument to :vim9script.
2020-12-26 15:39:31 +01:00
Bram Moolenaar
b0ac4ea5e1 patch 8.2.2221: if <Down> is mapped on the command line 'wildchar' is inserted
Problem:    If <Down> is mapped on the command line 'wildchar' is inserted.
Solution:   Set KeyTyped when using 'wildchar'. (closes #7552)
2020-12-26 12:06:54 +01:00
Bram Moolenaar
e5730bdcea patch 8.2.2220: Vim9: memory leak when parsing nested parenthesis
Problem:    Vim9: memory leak when parsing nested parenthesis.
Solution:   Clear newargs.
2020-12-25 22:30:16 +01:00
Bram Moolenaar
7e3682068b patch 8.2.2219: Vim9: method call with expression not supported
Problem:    Vim9: method call with expression not supported.
Solution:   Implement expr->(expr)().
2020-12-25 21:56:57 +01:00
Bram Moolenaar
fc0e8f5c3e patch 8.2.2218: Vim9: failure if passing more args to lambda than expected
Problem:    Vim9: failure if passing more arguments to a lambda than expected.
Solution:   Only put expected arguments on the stack. (closes #7548)
2020-12-25 20:24:51 +01:00
Bram Moolenaar
20a762987e patch 8.2.2217: Vim9: command modifiers not restored in catch block
Problem:    Vim9: command modifiers not restored in catch block.
Solution:   Restore command modifiers. (closes #7542)
2020-12-25 19:47:24 +01:00
Bram Moolenaar
6e2c2c50ba patch 8.2.2216: Vim9: range with missing colon can be hard to spot
Problem:    Vim9: range with missing colon can be hard to spot.
Solution:   Include the start of the range in the error. (closes #7543)
2020-12-25 19:25:45 +01:00
Bram Moolenaar
56ce9ea3ea patch 8.2.2215: Vim9: not recognized in global command
Problem:    Vim9:  not recognized in global command.
Solution:   Skip over pattern. (issue #7541)
2020-12-25 18:35:29 +01:00
Bram Moolenaar
f8103f274e patch 8.2.2214: ":e#" does not give a warning for missing white space
Problem:    ":e#" does not give a warning for missing white space.
Solution:   Adjust the check for white space. (closes #7545)
2020-12-25 17:36:27 +01:00
Bram Moolenaar
7cfcd0c99c patch 8.2.2213: checking white space around -> is not backwards compatible
Problem:    Checking white space around -> is not backwards compatible.
Solution:   Only check white space around =>.
2020-12-25 16:11:53 +01:00
Bram Moolenaar
c754b4cc98 patch 8.2.2212: Vim9: lambda with => does not work at the script level
Problem:    Vim9: lambda with => does not work at the script level.
Solution:   Make it work.
2020-12-25 15:24:23 +01:00
Bram Moolenaar
b2f9e0e2c5 patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Problem:    MS-Windows: can't load Python dll if not in the path.
Solution:   Use the InstallPath registry entry. (Kelvin Lee, closes #7540)
2020-12-25 13:52:37 +01:00
Bram Moolenaar
3868f59466 patch 8.2.2210: Vim9: allocating a type to set TTFLAG_BOOL_OK
Problem:    Vim9: allocating a type to set TTFLAG_BOOL_OK.
Solution:   Add t_number_bool.
2020-12-25 13:20:41 +01:00
Bram Moolenaar
9e68c32563 patch 8.2.2209: Vim9: return type of => lambda not parsed
Problem:    Vim9: return type of => lambda not parsed.
Solution:   Parse and use the return type.
2020-12-25 12:38:04 +01:00
Bram Moolenaar
4aab88d919 patch 8.2.2208: Vim9: after reloading a script variable index may be invalid
Problem:    Vim9: after reloading a script variable index may be invalid.
Solution:   When the sequence number doesn't match give an error for using a
            script-local variable from a compiled function. (closes #7547)
2020-12-24 21:56:41 +01:00
Bram Moolenaar
38455a9213 patch 8.2.2207: illegal memory access if popup menu items are changed
Problem:    Illegal memory access if popup menu items are changed while the
            menu is visible. (Tomáš Janoušek)
Solution:   Make a copy of the text. (closes #7537)
2020-12-24 18:39:02 +01:00
Bram Moolenaar
0261a1aeeb Tweak the style a bit. 2020-12-24 17:41:12 +01:00
Bram Moolenaar
c139aa8a2b Remove table, it doesn't work 2020-12-24 17:35:41 +01:00
Bram Moolenaar
b04ddb5b04 Attempt to fix markdown in table cell. 2020-12-24 17:25:06 +01:00
Bram Moolenaar
b54f1202b3 Attempt to align the logo without a markdown table. 2020-12-24 17:20:24 +01:00
Bram Moolenaar
4941b5effd patch 8.2.2206: :exe command line completion only works for first argument
Problem:    :exe command line completion only works for first argument.
Solution:   Skip over text if more is following. (closes #7546)
2020-12-24 17:15:53 +01:00
Bram Moolenaar
6dd41b1d57 patch 8.2.2205: Vim9: memory leak when parsing lambda fails
Problem:    Vim9: memory leak when parsing lambda fails.
Solution:   Clear growarrays.
2020-12-24 16:06:00 +01:00
Bram Moolenaar
65c4415276 patch 8.2.2204: Vim9: using -> both for method and lambda is confusing
Problem:    Vim9: using -> both for method and lambda is confusing.
Solution:   Use => for lambda in :def function.
2020-12-24 15:14:01 +01:00
Bram Moolenaar
b34f337472 patch 8.2.2203: Moodle gift files are not recognized
Problem:    Moodle gift files are not recognized.
Solution:   Add a filetype pattern. (Delim Temizer)
2020-12-24 13:33:46 +01:00
Bram Moolenaar
16204962c7 patch 8.2.2202: write file test still fails on MS-Windows
Problem:    Write file test still fails on MS-Windows.
Solution:   Set fileformat with the :edit command
2020-12-23 22:40:11 +01:00
Bram Moolenaar
bd318559cf patch 8.2.2201: write file test fails on MS-Windows
Problem:    Write file test fails on MS-Windows.
Solution:   Force edit after setting 'fileformat'.
2020-12-23 20:55:15 +01:00
Bram Moolenaar
27bf7af9d0 patch 8.2.2200: Vim9: lambda without white space around -> is confusing
Problem:    Vim9: lambda without white space around -> is confusing.
Solution:   Require white space in a :def funtion. (issue #7503)
2020-12-23 20:27:31 +01:00
Bram Moolenaar
b3c8b1d254 patch 8.2.2199: first write after setting 'eol' does not have NL added
Problem:    First write after setting 'eol' does not have NL added. (Tomáš
            Janoušek)
Solution:   Only use b_no_eol_lnum when doing a binary write. (closes #7535)
2020-12-23 18:54:57 +01:00
Bram Moolenaar
23999d799c patch 8.2.2198: ml_get error when resizing window and using text property
Problem:    ml_get error when resizing window and using text property.
Solution:   Validate botline of the right window. (closes #7528)
2020-12-23 14:36:00 +01:00
Bram Moolenaar
4072ba571b Update runtime files. 2020-12-23 13:56:35 +01:00
Bram Moolenaar
9f63a65f22 patch 8.2.2197: assert arguments order reversed
Problem:    Assert arguments order reversed.
Solution:   Swap the arguments. (Christian Brabandt, closes #7531)
2020-12-23 12:50:20 +01:00
Bram Moolenaar
abcbb0e9ad patch 8.2.2196: :version output has extra spaces in compile and link command
Problem:    :version output has extra spaces in compile and link command.
Solution:   Adjust QUOTESED. (closes #7505)
2020-12-23 12:33:42 +01:00
Bram Moolenaar
1dcf55d4f1 patch 8.2.2195: failing tests for :const
Problem:    Failing tests for :const.
Solution:   Add missing check for ASSIGN_FINAL.
2020-12-22 22:07:30 +01:00
Bram Moolenaar
89b474dd4f patch 8.2.2194: Vim9: cannot use :const or :final at the script level
Problem:    Vim9: cannot use :const or :final at the script level.
Solution:   Support using :const and :final. (closes #7526)
2020-12-22 21:19:39 +01:00
Bram Moolenaar
3bdc90b7df patch 8.2.2193: Vim9: can change constant in :def function
Problem:    Vim9: can change constant in :def function.
Solution:   Check if a variable is locked. (issue #7526)
2020-12-22 20:35:40 +01:00
Bram Moolenaar
e5492609b3 patch 8.2.2192: Codecov on github actions fails
Problem:    Codecov on github actions fails.
Solution:   Revert to codecov script. (Ozaki Kiichi, closes #7529)
2020-12-22 19:05:33 +01:00
Bram Moolenaar
58a52f215a patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Problem:    Vim9: using wrong name with lambda in nested function.
Solution:   Copy the lambda name earlier. (closes #7525)
2020-12-22 18:56:55 +01:00
Bram Moolenaar
077a42318c patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Problem:    Vim9: crash when compiled with EXITFREE.
Solution:   Check that df_ufunc is not NULL.
2020-12-22 18:33:27 +01:00
Bram Moolenaar
032a2d050b patch 8.2.2189: cannot repeat a command that uses the small delete register
Problem:    Cannot repeat a command that uses the small delete register.
Solution:   Store the register name instead of the contents. (Christian
            Brabandt, closes #7527)
2020-12-22 17:59:35 +01:00
Bram Moolenaar
cd45ed03bf patch 8.2.2188: Vim9: crash when calling global function from :def function
Problem:    Vim9: crash when calling global function from :def function.
Solution:   Set the outer context.  Define the partial for the context on the
            original function. Use a refcount to keep track of which ufunc is
            using a dfunc. (closes #7525)
2020-12-22 17:35:54 +01:00
Bram Moolenaar
07761a3b96 patch 8.2.2187: Python 3 test fails sometimes
Problem:    Python 3 test fails sometimes. (Christian Brabandt)
Solution:   Accept two SystemError messages.
2020-12-22 12:50:10 +01:00
Bram Moolenaar
5b3d1bb0f5 patch 8.2.2186: Vim9: error when using 'opfunc'
Problem:    Vim9: error when using 'opfunc'.
Solution:   Do not expect a return value from 'opfunc'. (closes #7510)
2020-12-22 12:20:08 +01:00
Bram Moolenaar
c882e4d169 Add missing change to version.c 2020-12-22 12:18:11 +01:00
Bram Moolenaar
1cfb9bb5c0 patch 8.2.2185: BufUnload is not triggered for the quickfix dummy buffer
Problem:    BufUnload is not triggered for the quickfix dummy buffer.
Solution:   Do trigger BufUnload. (Pontus Leitzler,closes #7518, closes #7517)
            Fix white space around "=".
2020-12-22 11:40:45 +01:00
Bram Moolenaar
9a963377b4 patch 8.2.2184: Vim9: no error when using "2" for a line number
Problem:    Vim9: no error when using "2" for a line number.
Solution:   Give an error message if the line number is invalid. (closes #7492)
2020-12-21 21:58:46 +01:00
Bram Moolenaar
60f63100b9 patch 8.2.2183: Vim9: value of 'edcompatible' and 'gdefault' are used
Problem:    Vim9: value of 'edcompatible' and 'gdefault' are used.
Solution:   Ignore these deprecated options in Vim9 script. (closes #7508)
2020-12-21 20:32:43 +01:00
Bram Moolenaar
f4e2099e39 patch 8.2.2182: Vim9: value of 'magic' is still relevant
Problem:    Vim9: value of 'magic' is still relevant.
Solution:   Always behave like 'magic' is on in Vim9 script (closes #7509)
2020-12-21 19:59:08 +01:00
Bram Moolenaar
a3d10a508c patch 8.2.2181: valgrind warnings for using uninitialized value
Problem:    Valgrind warnings for using uninitialized value.
Solution:   Do not use "start" or "end" unless there is a match.
2020-12-21 18:24:00 +01:00
Bram Moolenaar
6f17a3f023 patch 8.2.2180: Vim9: test for error after error is flaky
Problem:    Vim9: test for error after error is flaky.
Solution:   Wait for job to finish instead of a fixed delay.
2020-12-21 18:11:24 +01:00
Bram Moolenaar
4f5e397756 patch 8.2.2179: Vim9: crash when indexing a dict with a number
Problem:    Vim9: crash when indexing a dict with a number.
Solution:   Add ISN_STOREINDEX. (closes #7513)
2020-12-21 17:30:50 +01:00
Bram Moolenaar
2e2f52a4a0 patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Problem:    Python 3: non-utf8 character cannot be handled.
Solution:   Change the string decode. (Björn Linse, closes #1053)
2020-12-21 16:03:02 +01:00
Bram Moolenaar
ef2dff52de patch 8.2.2177: pattern "^" does not match if first character is combining
Problem:    Pattern "^" does not match if the first character in the line is
            combining. (Rene Kita)
Solution:   Do accept a match at the start of the line. (closes #6963)
2020-12-21 14:54:32 +01:00
Bram Moolenaar
6a78f32844 patch 8.2.2176: crash with a sequence of fold commands
Problem:    Crash with a sequence of fold commands.
Solution:   Bail out when there are no folds at all.  Add a test (Dominique
            Pellé) (closes #7515)
2020-12-21 14:01:41 +01:00
Bram Moolenaar
9aff970204 patch 8.2.2175: github actions: clang-11 handling suboptimal
Problem:    Github actions: clang-11 handling suboptimal.
Solution:   Separate step of installing clang-11. Get ubuntu release name
            dynamically. (Ozaki Kiichi, closes #7514)
2020-12-21 13:37:28 +01:00
Bram Moolenaar
8c9d98a8af patch 8.2.2174: Mac version doesn't specify the CPU architecture
Problem:    Mac version doesn't specify the CPU architecture.
Solution:   Add "arm64" or "x86_64". (Yee Cheng Chin, closes #7519)
2020-12-21 13:05:57 +01:00
Bram Moolenaar
52c124d330 patch 8.2.2173: Vim9: get internal error when assigning to undefined variable
Problem:    Vim9: get internal error when assigning to undefined variable.
Solution:   Add error message. (closes #7475)
2020-12-20 21:43:35 +01:00
Bram Moolenaar
5082471f91 patch 8.2.2172: Vim9: number of arguments is not always checked
Problem:    Vim9: number of arguments is not always checked. (Yegappan
            Lakshmanan)
Solution:   Check number of arguments when calling function by name.
2020-12-20 21:10:17 +01:00
Bram Moolenaar
61e07b2394 patch 8.2.2171: valgrind warning for using uninitialized value
Problem:    Valgrind warning for using uninitialized value.
Solution:   Do not use "startp" or "endp" unless there is a match.
2020-12-20 17:59:53 +01:00
Bram Moolenaar
f112f30a82 patch 8.2.2170: Vim9: a global function defined in a :def function fails
Problem:    Vim9: a global function defined in a :def function fails if it
            uses the context.
Solution:   Create a partial to store the closure context. (see #7410)
2020-12-20 17:47:52 +01:00
Bram Moolenaar
090728ad4d patch 8.2.2169: Vim9: test leaves file behind
Problem:    Vim9: test leaves file behind.
Solution:   Rename script files. (Dominique Pellé, closes #7511)
            Use try/finally.
2020-12-20 15:43:31 +01:00
Bram Moolenaar
d24602f43c patch 8.2.2168: Vim9: error for assigning to dict of dict
Problem:    Vim9: error for assigning to dict of dict.
Solution:   Remember the destination type. (closes #7506)
2020-12-20 15:20:56 +01:00
Bram Moolenaar
d88dc4d4e9 patch 8.2.2167: Vim9: assign test fails
Problem:    Vim9: assign test fails. (Elimar Riesebieter)
Solution:   Adjust the test for dict assignment.
2020-12-20 14:49:42 +01:00
Bram Moolenaar
d0a1dee3f1 patch 8.2.2166: auto format doesn't work when deleting text
Problem:    Auto format doesn't work when deleting text.
Solution:   Make "x" trigger auto format. (closes #7504)
2020-12-20 13:07:48 +01:00
Bram Moolenaar
8f22f5c3aa patch 8.2.2165: Vim9: assignment to dict member does not work
Problem:    Vim9: assignment to dict member does not work.
Solution:   Fix recognizing dict member. (closes #7484)
2020-12-19 22:10:13 +01:00
Bram Moolenaar
17f700ac8b patch 8.2.2164: Vim9: autoload function doesn't work in uppercased script
Problem:    Vim9: autoload function doesn't work in script that starts with
            an upper case letter.
Solution:   Check for the autoload character. (closes #7502)
2020-12-19 21:23:42 +01:00
Bram Moolenaar
13656f02e4 patch 8.2.2163: crash when discarded exception is the current exception
Problem:    Crash when discarded exception is the current exception.
Solution:   Compare the execption with current_exception. (closes #7499)
2020-12-19 17:55:54 +01:00
Bram Moolenaar
03290b8444 patch 8.2.2162: Vim9: Cannot load or store autoload variables
Problem:    Vim9: Cannot load or store autoload variables.
Solution:   Add ISN_LOADAUTO and ISN_STOREAUTO. (closes #7485)
2020-12-19 16:30:44 +01:00
Bram Moolenaar
1f33e0a7c4 patch 8.2.2161: arguments -T and -x not tested yet
Problem:    Arguments -T and -x not tested yet.
Solution:   Add a test. (Dominique Pellé, closes #7490
2020-12-19 13:32:07 +01:00
Bram Moolenaar
8e7d6223f6 patch 8.2.2160: various typos
Problem:    Various typos.
Solution:   Fix spelling mistakes. (closes #7494)
2020-12-18 19:49:56 +01:00
Bram Moolenaar
3beaf9cd8e patch 8.2.2159: Vim9: when declaring a list it is not allocated yet
Problem:    Vim9: when declaring a list it is not allocated yet, causing a
            following extend() to fail.
Solution:   When fetching a variable value for a list or dict that is null
            allocate the list or dict, so it can be used. (closes #7491)
2020-12-18 17:23:14 +01:00
Bram Moolenaar
6e562fcc07 patch 8.2.2158: CI on cirrus times out, coveralls doesn't always run
Problem:    CI on cirrus times out, coveralls doesn't always run.
Solution:   Set timeout to 20 minutes. Adjust condition. (closes #7493)
2020-12-18 16:29:25 +01:00
Bram Moolenaar
9aed729fe9 patch 8.2.2157: Vim9: can delete a Vim9 script variable from a function
Problem:    Vim9: can delete a Vim9 script variable from a function.
Solution:   Check the variable is defined in Vim9 script. (closes #7483)
2020-12-18 15:38:00 +01:00
Bram Moolenaar
b5b77378bc patch 8.2.2156: Github actions run on pusing a tag
Problem:    Github actions run on pusing a tag.
Solution:   Don't run CI on tag push. Omit coveralls on pull-request.
            (Ozaki Kiichi, closes #7489)
2020-12-18 13:31:31 +01:00
Bram Moolenaar
18f69229c5 patch 8.2.2155: warning from Github actions for code analysis
Problem:    Warning from Github actions for code analysis.
Solution:   Remove the "git checkout HEAD^2" block.
2020-12-18 13:15:20 +01:00
Bram Moolenaar
0353f56ddb patch 8.2.2154: popupwin test for terminal buffer fails sometimes
Problem:    Popupwin test for terminal buffer fails sometimes.
Solution:   Wait for the prompt to appear.
2020-12-17 22:27:38 +01:00
Bram Moolenaar
b125b535bb patch 8.2.2153: popupwin test for latin1 still fails sometimes
Problem:    Popupwin test for latin1 still fails sometimes.
Solution:   Wait for the "cat" command to finish.
2020-12-17 21:56:09 +01:00
Bram Moolenaar
8dd46e72cf patch 8.2.2152: screenpos() does not include the WinBar offset
Problem:    screenpos() does not include the WinBar offset.
Solution:   Use W_WINROW() instead of directly using w_window. (closes #7487)
2020-12-17 21:35:29 +01:00
Bram Moolenaar
a79a8944da patch 8.2.2151: $dir not expanded when configure checks for moonjit
Problem:    $dir not expanded when configure checks for moonjit.
Solution:   Use double quotes instead of single quotes. (closes #7478)
2020-12-17 20:50:25 +01:00
Bram Moolenaar
8ea05de6aa patch 8.2.2150: Github actions CI isn't used for all available platforms
Problem:    Github actions CI isn't used for all available platforms.
Solution:   Update the github workflows. (Ozaki Kiichi, closes #7433)
2020-12-17 20:27:26 +01:00
Bram Moolenaar
4c5bdb99ad patch 8.2.2149: popupwin test for latin1 sometimes fails
Problem:    Popupwin test for latin1 sometimes fails.
Solution:   Wait for the script to finish.
2020-12-17 17:45:59 +01:00
228 changed files with 11097 additions and 4197 deletions

View File

@@ -3,6 +3,8 @@ env:
FEATURES: huge
freebsd_12_task:
only_if: $CIRRUS_TAG == ''
timeout_in: 20m
freebsd_instance:
image: freebsd-12-1-release-amd64
install_script:

1
.coveralls.yml Normal file
View File

@@ -0,0 +1 @@
service_name: github-actions

24
.github/CODEOWNERS vendored
View File

@@ -19,8 +19,8 @@ runtime/autoload/netrwSettings.vim @cecamp
runtime/autoload/rubycomplete.vim @segfault @dkearns
runtime/autoload/tar.vim @cecamp
runtime/autoload/vimball.vim @cecamp
runtime/autoload/zip.vim @cecamp
runtime/autoload/xmlformat.vim @chrisbra
runtime/autoload/zip.vim @cecamp
runtime/compiler/checkstyle.vim @dkearns
runtime/compiler/cucumber.vim @tpope
runtime/compiler/dart.vim @dkearns
@@ -77,6 +77,7 @@ runtime/ftplugin/gitcommit.vim @tpope
runtime/ftplugin/gitconfig.vim @tpope
runtime/ftplugin/gitrebase.vim @tpope
runtime/ftplugin/gitsendemail.vim @tpope
runtime/ftplugin/gprof.vim @dpelle
runtime/ftplugin/haml.vim @tpope
runtime/ftplugin/hgcommit.vim @k-takata
runtime/ftplugin/javascript.vim @dkearns
@@ -91,13 +92,13 @@ runtime/ftplugin/pdf.vim @tpope
runtime/ftplugin/ruby.vim @tpope @dkearns
runtime/ftplugin/sass.vim @tpope
runtime/ftplugin/scss.vim @tpope
runtime/ftplugin/spec.vim @ignatenkobrain
runtime/ftplugin/tmux.vim @ericpruitt
runtime/ftplugin/typescript.vim @dkearns
runtime/ftplugin/typescriptreact.vim @dkearns
runtime/ftplugin/xml.vim @chrisbra
runtime/ftplugin/zsh.vim @chrisbra
runtime/indent/bst.vim @tpope
runtime/syntax/cs.vim @nickspoons
runtime/indent/cucumber.vim @tpope
runtime/indent/dosbatch.vim @k-takata
runtime/indent/eruby.vim @tpope @dkearns
@@ -109,9 +110,11 @@ runtime/indent/ruby.vim @AndrewRadev @dkearns
runtime/indent/sass.vim @tpope
runtime/indent/scss.vim @tpope
runtime/indent/sh.vim @chrisbra
runtime/indent/teraterm.vim @k-takata
runtime/indent/xml.vim @chrisbra
runtime/indent/zsh.vim @chrisbra
runtime/indent/teraterm.vim @k-takata
runtime/keymap/tamil_tscii.vim @yegappan
runtime/pack/dist/opt/cfilter/plugin/cfilter.vim @yegappan
runtime/pack/dist/opt/matchit/ @chrisbra
runtime/plugin/getscriptPlugin.vim @cecamp
runtime/plugin/logiPat.vim @cecamp
@@ -119,17 +122,21 @@ runtime/plugin/netrwPlugin.vim @cecamp
runtime/plugin/tarPlugin.vim @cecamp
runtime/plugin/vimballPlugin.vim @cecamp
runtime/plugin/zipPlugin.vim @cecamp
runtime/syntax/aidl.vim @dpelle
runtime/syntax/amiga.vim @cecamp
runtime/syntax/asm.vim @dkearns
runtime/syntax/asmh8300.vim @dkearns
runtime/syntax/awk.vim @dkearns
runtime/syntax/bst.vim @tpope
runtime/syntax/cabal.vim @coot
runtime/syntax/cabalconfig.vim @coot
runtime/syntax/cabalproject.vim @coot
runtime/syntax/cs.vim @nickspoons
runtime/syntax/csh.vim @cecamp
runtime/syntax/cucumber.vim @tpope
runtime/syntax/datascript.vim @dpelle
runtime/syntax/dcl.vim @cecamp
runtime/syntax/doxygen.vim @frogonwheels
runtime/syntax/dtd.vim @chrisbra
runtime/syntax/elmfilt.vim @cecamp
runtime/syntax/eruby.vim @tpope @dkearns
@@ -138,6 +145,7 @@ runtime/syntax/git.vim @tpope
runtime/syntax/gitcommit.vim @tpope
runtime/syntax/gitconfig.vim @tpope
runtime/syntax/gitrebase.vim @tpope
runtime/syntax/gprof.vim @dpelle
runtime/syntax/haml.vim @tpope
runtime/syntax/haskell.vim @coot
runtime/syntax/hgcommit.vim @k-takata
@@ -156,6 +164,7 @@ runtime/syntax/nsis.vim @k-takata
runtime/syntax/pdf.vim @tpope
runtime/syntax/php.vim @TysonAndre
runtime/syntax/privoxy.vim @dkearns
runtime/syntax/prolog.vim @XVilka
runtime/syntax/rc.vim @chrisbra
runtime/syntax/rpcgen.vim @cecamp
runtime/syntax/ruby.vim @dkearns
@@ -163,6 +172,7 @@ runtime/syntax/sass.vim @tpope
runtime/syntax/scss.vim @tpope
runtime/syntax/sh.vim @cecamp
runtime/syntax/sm.vim @cecamp
runtime/syntax/spec.vim @ignatenkobrain
runtime/syntax/sqloracle.vim @chrisbra
runtime/syntax/sshdconfig.vim @Jakuje
runtime/syntax/tags.vim @cecamp
@@ -174,9 +184,15 @@ runtime/syntax/vim.vim @cecamp
runtime/syntax/wget.vim @dkearns
runtime/syntax/xbl.vim @dkearns
runtime/syntax/xmath.vim @cecamp
runtime/syntax/xslt.vim @Boobies
runtime/syntax/xml.vim @chrisbra
runtime/syntax/xslt.vim @Boobies
runtime/syntax/xxd.vim @cecamp
runtime/syntax/yacc.vim @cecamp
runtime/syntax/zsh.vim @chrisbra
runtime/tutor/tutor.eo @dpelle
runtime/tutor/tutor.eo.utf-8 @dpelle
runtime/tutor/tutor.fr @dpelle
runtime/tutor/tutor.fr.utf-8 @dpelle
src/po/de.po @chrisbra
src/po/eo.po @dpelle
src/po/fr.po @dpelle

View File

@@ -1,230 +0,0 @@
name: GitHub CI
on:
push:
branches:
- '**'
pull_request:
env:
VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
# Interfaces
# Lua
LUA_VER: 54
LUA_VER_DOT: '5.4'
LUA_RELEASE: 5.4.0
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
LUA_DIR: D:\Lua
# Python 2
PYTHON_VER: 27
PYTHON_VER_DOT: '2.7'
# Python 3
PYTHON3_VER: 38
PYTHON3_VER_DOT: '3.8'
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
# Escape sequences
COL_RED: "\x1b[31m"
COL_GREEN: "\x1b[32m"
COL_YELLOW: "\x1b[33m"
COL_RESET: "\x1b[m"
jobs:
build:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
toolchain: [msvc, mingw]
arch: [x64, x86]
features: [HUGE, NORMAL]
include:
- arch: x64
vcarch: amd64
warch: x64
bits: 64
msystem: MINGW64
cygreg: registry
pyreg: ""
- arch: x86
vcarch: x86
warch: ia32
bits: 32
msystem: MINGW32
cygreg: registry32
pyreg: "-32"
exclude:
- toolchain: msvc
arch: x64
features: NORMAL
- toolchain: mingw
arch: x86
features: NORMAL
steps:
- name: Initalize
id: init
shell: bash
run: |
git config --global core.autocrlf input
python_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON_VER_DOT}/InstallPath/@")
python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@")
echo "PYTHON_DIR=$python_dir" >> $GITHUB_ENV
echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV
- uses: msys2/setup-msys2@v2
if: matrix.toolchain == 'mingw'
with:
msystem: ${{ matrix.msystem }}
release: false
- uses: actions/checkout@v2
- name: Create a list of download URLs
shell: cmd
run: |
type NUL > urls.txt
echo %LUA_RELEASE%>> urls.txt
echo %WINPTY_URL%>> urls.txt
- name: Cache downloaded files
uses: actions/cache@v2
with:
path: downloads
key: ${{ runner.os }}-${{ matrix.bits }}-${{ hashFiles('urls.txt') }}
- name: Download dependencies
shell: cmd
run: |
path C:\Program Files\7-Zip;%path%
if not exist downloads mkdir downloads
echo %COL_GREEN%Download Lua%COL_RESET%
call :downloadfile %LUA${{ matrix.bits }}_URL% downloads\lua.zip
7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
echo %COL_GREEN%Download winpty%COL_RESET%
call :downloadfile %WINPTY_URL% downloads\winpty.zip
7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty.dll src\winpty${{ matrix.bits }}.dll
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty-agent.exe src\
goto :eof
:downloadfile
:: call :downloadfile <URL> <localfile>
if not exist %2 (
curl -f -L %1 -o %2
)
if ERRORLEVEL 1 (
rem Retry once.
curl -f -L %1 -o %2 || exit 1
)
goto :eof
- name: Copy src directory to src2
shell: cmd
run: |
xcopy src src2\ /E > nul
- name: Build (MSVC)
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
:: Filter out the progress bar from the build log
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
if "${{ matrix.features }}"=="HUGE" (
nmake -nologo -f Make_mvc2.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes ^
DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR%
) else (
nmake -nologo -f Make_mvc2.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes
)
if not exist vim${{ matrix.bits }}.dll (
echo %COL_RED%Build failure.%COL_RESET%
exit 1
)
- name: Build (MinGW)
if: matrix.toolchain == 'mingw'
shell: msys2 {0}
run: |
cd src
if [ "${{ matrix.features }}" = "HUGE" ]; then
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
DYNAMIC_LUA=yes LUA=${LUA_DIR} \
DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
STATIC_STDCPLUS=yes
else
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
STATIC_STDCPLUS=yes
fi
# - name: Prepare Artifact
# shell: cmd
# run: |
# mkdir artifacts
# copy src\*vim.exe artifacts
# copy src\vim*.dll artifacts
#
# - name: Upload Artifact
# uses: actions/upload-artifact@v1
# with:
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
# path: ./artifacts
- name: Test
shell: cmd
timeout-minutes: 20
run: |
PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
echo.
echo %COL_GREEN%vim version:%COL_RESET%
.\vim --version || exit 1
echo %COL_GREEN%Start testing vim in background.%COL_RESET%
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
echo %COL_GREEN%Test gvim:%COL_RESET%
cd testdir
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
cd ..
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET%
cd ..\src2\testdir
:: Wait about 10 minutes.
for /L %%i in (1,1,60) do (
if exist done.txt goto exitloop
timeout 10 > NUL 2>&1
if ERRORLEVEL 1 ping -n 11 localhost > NUL
)
set timeout=1
:exitloop
echo %COL_GREEN%Test results of vim:%COL_RESET%
if exist messages type messages
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1
if "%timeout%"=="1" (
echo %COL_RED%Timed out.%COL_RESET%
exit 1
)

526
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,526 @@
name: GitHub CI
on:
push:
branches: ['**']
pull_request:
jobs:
linux:
runs-on: ubuntu-latest
env:
CC: ${{ matrix.compiler }}
TEST: test
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
LOG_DIR: ${{ github.workspace }}/logs
TERM: xterm
DISPLAY: ':99'
DEBIAN_FRONTEND: noninteractive
strategy:
fail-fast: false
matrix:
features: [tiny, small, normal, huge]
compiler: [clang, gcc]
extra: [none]
include:
- features: tiny
compiler: clang
extra: nogui
- features: tiny
compiler: gcc
extra: nogui
- features: normal
shadow: ./src/shadow
- features: huge
coverage: true
- features: huge
compiler: gcc
coverage: true
extra: testgui
- features: huge
compiler: clang
extra: asan
- features: huge
compiler: gcc
coverage: true
extra: unittests
- features: normal
compiler: gcc
extra: vimtags
steps:
- uses: actions/checkout@v2
- name: Install packages
run: |
sudo apt-get install -y \
autoconf \
lcov \
gettext \
libcanberra-dev \
libperl-dev \
python-dev \
python3-dev \
liblua5.3-dev \
lua5.3 \
ruby-dev \
tcl-dev \
cscope \
libgtk2.0-dev \
desktop-file-utils \
libtool-bin
- name: Install clang-11
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}-11 main"
sudo apt-get install -y clang-11
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-11 100
sudo update-alternatives --set clang /usr/bin/clang-11
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-11 100
- name: Set up environment
run: |
mkdir -p "${LOG_DIR}"
mkdir -p "${HOME}/bin"
echo "${HOME}/bin" >> $GITHUB_PATH
(
echo "LINUX_VERSION=$(uname -r)"
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
echo "SND_DUMMY_DIR=${HOME}/snd-dummy"
echo "TMPDIR=${{ runner.temp }}"
case "${{ matrix.features }}" in
tiny|small)
echo "TEST=testtiny"
if ${{ contains(matrix.extra, 'nogui') }}; then
echo "CONFOPT=--disable-gui"
fi
;;
normal)
;;
huge)
echo "TEST=scripttests test_libvterm"
echo "CONFOPT=--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
;;
esac
if ${{ matrix.coverage == true }}; then
echo "CFLAGS=--coverage -DUSE_GCOV_FLUSH"
echo "LDFLAGS=--coverage"
fi
if ${{ contains(matrix.extra, 'testgui') }}; then
echo "TEST=-C src testgui"
fi
if ${{ contains(matrix.extra, 'unittests') }}; then
echo "TEST=unittests"
fi
if ${{ contains(matrix.extra, 'asan') }}; then
echo "SANITIZER_CFLAGS=-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
echo "ASAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/asan"
echo "UBSAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/ubsan"
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
fi
if ${{ contains(matrix.extra, 'vimtags') }}; then
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
fi
) >> $GITHUB_ENV
- name: Set up system
run: |
if [[ ${CC} = clang ]]; then
# Use llvm-cov instead of gcov when compiler is clang.
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov
fi
# Setup lua5.3 manually since its package doesn't provide alternative.
# https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212
if [[ ${CONFOPT} =~ luainterp ]]; then
sudo update-alternatives --install /usr/bin/lua lua /usr/bin/lua5.3 10
fi
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
sudo usermod -a -G audio "${USER}"
sudo bash ci/setup-xvfb.sh
- name: Cache snd-dummy
uses: actions/cache@v2
with:
path: ${{ env.SND_DUMMY_DIR }}
key: linux-${{ env.LINUX_VERSION }}-snd-dummy
- name: Set up snd-dummy
run: |
if [[ ! -e ${SND_DUMMY_DIR}/snd-dummy.ko ]]; then
bash ci/build-snd-dummy.sh
fi
cd "${SND_DUMMY_DIR}"
sudo insmod soundcore.ko
sudo insmod snd.ko
sudo insmod snd-pcm.ko
sudo insmod snd-dummy.ko
- name: Check autoconf
if: contains(matrix.extra, 'unittests')
run: |
make -C src autoconf
- name: Set up shadow dir
if: matrix.shadow
run: |
make -C src shadow
echo "SRCDIR=${{ matrix.shadow }}" >> $GITHUB_ENV
echo "SHADOWOPT=-C ${{ matrix.shadow }}" >> $GITHUB_ENV
- name: Configure
run: |
./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing
# Append various warning flags to CFLAGS.
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk
- name: Build
if: (!contains(matrix.extra, 'unittests'))
run: |
make ${SHADOWOPT} -j${NPROC}
- name: Check version
if: (!contains(matrix.extra, 'unittests'))
run: |
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
- name: Test
timeout-minutes: 20
run: |
do_test() { sg audio "sg $(id -gn) '$*'"; }
do_test make ${SHADOWOPT} ${TEST}
- name: Coveralls
if: matrix.coverage && success() && github.event_name != 'pull_request'
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
COVERALLS_PARALLEL: true
TRAVIS_JOB_ID: ${{ github.run_id }}
run: |
sudo apt-get install -y python3-setuptools python3-wheel
# needed for https support for coveralls building cffi only works with gcc, not with clang
CC=gcc pip3 install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1
~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8
- name: Codecov
if: matrix.coverage && success()
run: |
cd "${SRCDIR}"
bash <(curl -s https://codecov.io/bash) -F "${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}"
- name: ASan logs
if: contains(matrix.extra, 'asan') && !cancelled()
run: |
for f in $(grep -lR '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "${LOG_DIR}"); do
asan_symbolize-11 -l "$f"
false # in order to fail a job
done
coveralls:
runs-on: ubuntu-latest
needs: linux
if: always() && github.event_name != 'pull_request'
steps:
- name: Parallel finished
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run: |
curl -k "https://coveralls.io/webhook?repo_token=${COVERALLS_REPO_TOKEN}" -d "payload[build_num]=${GITHUB_RUN_ID}&payload[status]=done"
macos:
runs-on: macos-latest
env:
CC: ${{ matrix.compiler }}
TEST: test
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
TERM: xterm
strategy:
fail-fast: false
matrix:
features: [tiny, huge]
compiler: [clang, gcc]
steps:
- uses: actions/checkout@v2
- name: Install packages
env:
HOMEBREW_NO_AUTO_UPDATE: 1
run: |
brew install lua
echo "LUA_PREFIX=/usr/local" >> $GITHUB_ENV
- name: Set up environment
run: |
(
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
case "${{ matrix.features }}" in
tiny)
echo "TEST=testtiny"
echo "CONFOPT=--disable-gui"
;;
huge)
echo "CONFOPT=--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
;;
esac
) >> $GITHUB_ENV
- name: Configure
run: |
./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing
# Append various warning flags to CFLAGS.
# BSD sed needs backup extension specified.
sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
# On macOS, the entity of gcc is clang.
sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk
- name: Build
env:
LC_ALL: C
run: |
make -j${NPROC}
- name: Check version
run: |
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
- name: Test
timeout-minutes: 20
run: |
make ${TEST}
windows:
runs-on: windows-latest
env:
VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
# Interfaces
# Lua
LUA_VER: 54
LUA_VER_DOT: '5.4'
LUA_RELEASE: 5.4.0
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
LUA_DIR: D:\Lua
# Python 2
PYTHON_VER: 27
PYTHON_VER_DOT: '2.7'
# Python 3
PYTHON3_VER: 38
PYTHON3_VER_DOT: '3.8'
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
# Escape sequences
COL_RED: "\x1b[31m"
COL_GREEN: "\x1b[32m"
COL_YELLOW: "\x1b[33m"
COL_RESET: "\x1b[m"
strategy:
fail-fast: false
matrix:
toolchain: [msvc, mingw]
arch: [x64, x86]
features: [HUGE, NORMAL]
include:
- arch: x64
vcarch: amd64
warch: x64
bits: 64
msystem: MINGW64
cygreg: registry
pyreg: ""
- arch: x86
vcarch: x86
warch: ia32
bits: 32
msystem: MINGW32
cygreg: registry32
pyreg: "-32"
exclude:
- toolchain: msvc
arch: x64
features: NORMAL
- toolchain: mingw
arch: x86
features: NORMAL
steps:
- name: Initalize
id: init
shell: bash
run: |
git config --global core.autocrlf input
python_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON_VER_DOT}/InstallPath/@")
python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@")
echo "PYTHON_DIR=$python_dir" >> $GITHUB_ENV
echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV
- uses: msys2/setup-msys2@v2
if: matrix.toolchain == 'mingw'
with:
msystem: ${{ matrix.msystem }}
release: false
- uses: actions/checkout@v2
- name: Create a list of download URLs
shell: cmd
run: |
type NUL > urls.txt
echo %LUA_RELEASE%>> urls.txt
echo %WINPTY_URL%>> urls.txt
- name: Cache downloaded files
uses: actions/cache@v2
with:
path: downloads
key: ${{ runner.os }}-${{ matrix.bits }}-${{ hashFiles('urls.txt') }}
- name: Download dependencies
shell: cmd
run: |
path C:\Program Files\7-Zip;%path%
if not exist downloads mkdir downloads
echo %COL_GREEN%Download Lua%COL_RESET%
call :downloadfile %LUA${{ matrix.bits }}_URL% downloads\lua.zip
7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
echo %COL_GREEN%Download winpty%COL_RESET%
call :downloadfile %WINPTY_URL% downloads\winpty.zip
7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty.dll src\winpty${{ matrix.bits }}.dll
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty-agent.exe src\
goto :eof
:downloadfile
:: call :downloadfile <URL> <localfile>
if not exist %2 (
curl -f -L %1 -o %2
)
if ERRORLEVEL 1 (
rem Retry once.
curl -f -L %1 -o %2 || exit 1
)
goto :eof
- name: Copy src directory to src2
shell: cmd
run: |
xcopy src src2\ /E > nul
- name: Build (MSVC)
if: matrix.toolchain == 'msvc'
shell: cmd
run: |
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
:: Filter out the progress bar from the build log
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
if "${{ matrix.features }}"=="HUGE" (
nmake -nologo -f Make_mvc2.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes ^
DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR%
) else (
nmake -nologo -f Make_mvc2.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes
)
if not exist vim${{ matrix.bits }}.dll (
echo %COL_RED%Build failure.%COL_RESET%
exit 1
)
- name: Build (MinGW)
if: matrix.toolchain == 'mingw'
shell: msys2 {0}
run: |
cd src
if [ "${{ matrix.features }}" = "HUGE" ]; then
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
DYNAMIC_LUA=yes LUA=${LUA_DIR} \
DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
STATIC_STDCPLUS=yes
else
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
STATIC_STDCPLUS=yes
fi
#- name: Prepare Artifact
# shell: cmd
# run: |
# mkdir artifacts
# copy src\*vim.exe artifacts
# copy src\vim*.dll artifacts
#
#- name: Upload Artifact
# uses: actions/upload-artifact@v1
# with:
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
# path: ./artifacts
- name: Test
shell: cmd
timeout-minutes: 20
run: |
PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
echo.
echo %COL_GREEN%vim version:%COL_RESET%
.\vim --version || exit 1
echo %COL_GREEN%Start testing vim in background.%COL_RESET%
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
echo %COL_GREEN%Test gvim:%COL_RESET%
cd testdir
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
cd ..
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET%
cd ..\src2\testdir
:: Wait about 10 minutes.
for /L %%i in (1,1,60) do (
if exist done.txt goto exitloop
timeout 10 > NUL 2>&1
if ERRORLEVEL 1 ping -n 11 localhost > NUL
)
set timeout=1
:exitloop
echo %COL_GREEN%Test results of vim:%COL_RESET%
if exist messages type messages
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1
if "%timeout%"=="1" (
echo %COL_RED%Timed out.%COL_RESET%
exit 1
)

View File

@@ -31,15 +31,6 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View File

@@ -172,56 +172,56 @@ script:
# Linux: 2 compilers on some of the environments + gcc on os390
jobs:
include:
- <<: *osx
name: tiny-nogui/clang
compiler: clang
env: *tiny-nogui
- <<: *osx
name: tiny-nogui/gcc
compiler: gcc
env: *tiny-nogui
- <<: *osx
<<: *osx-homebrew
name: huge/clang
compiler: clang
env: *osx-huge
- <<: *osx
<<: *osx-homebrew
name: huge/gcc
compiler: gcc
env: *osx-huge
- <<: *linux
name: tiny-nogui/clang
compiler: clang
env: *tiny-nogui
- <<: *linux
name: tiny-nogui/gcc
compiler: gcc
env: *tiny-nogui
- <<: *linux
name: tiny/clang
compiler: clang
env: *tiny
- <<: *linux
name: tiny/gcc
compiler: gcc
env: *tiny
- <<: *linux
name: small/gcc
compiler: gcc
env: *small
- <<: *linux
name: normal+shadow/clang
compiler: clang
env:
- *normal
- *shadowopt
- <<: *linux
name: normal+shadow/gcc
compiler: gcc
env:
- *normal
- *shadowopt
#- <<: *osx
# name: tiny-nogui/clang
# compiler: clang
# env: *tiny-nogui
#- <<: *osx
# name: tiny-nogui/gcc
# compiler: gcc
# env: *tiny-nogui
#- <<: *osx
# <<: *osx-homebrew
# name: huge/clang
# compiler: clang
# env: *osx-huge
#- <<: *osx
# <<: *osx-homebrew
# name: huge/gcc
# compiler: gcc
# env: *osx-huge
#- <<: *linux
# name: tiny-nogui/clang
# compiler: clang
# env: *tiny-nogui
#- <<: *linux
# name: tiny-nogui/gcc
# compiler: gcc
# env: *tiny-nogui
#- <<: *linux
# name: tiny/clang
# compiler: clang
# env: *tiny
#- <<: *linux
# name: tiny/gcc
# compiler: gcc
# env: *tiny
#- <<: *linux
# name: small/gcc
# compiler: gcc
# env: *small
#- <<: *linux
# name: normal+shadow/clang
# compiler: clang
# env:
# - *normal
# - *shadowopt
#- <<: *linux
# name: normal+shadow/gcc
# compiler: gcc
# env:
# - *normal
# - *shadowopt
- <<: *linux
arch: s390x
name: huge/gcc-s390x
@@ -234,55 +234,55 @@ jobs:
compiler: gcc
env: *linux-huge
services: []
- <<: *linux
name: huge+coverage/clang
compiler: clang
env:
- *linux-huge
- *coverage
after_success: *eval-coverage
- <<: *linux
name: huge+coverage/gcc
compiler: gcc
env:
- *linux-huge
- *coverage
after_success: *eval-coverage
- <<: *linux # ASAN
name: huge+asan/clang
compiler: clang-11
addons:
apt:
sources:
- sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
packages:
- *apt-packages
- clang-11
env:
- *linux-huge
- *asan
after_failure: *asan_symbolize
- <<: *linux
name: huge-testgui+coverage/gcc
compiler: gcc
env:
- *linux-huge
- *coverage
- TEST="-C src testgui"
after_success: *eval-coverage
- <<: *linux
name: unittests+coverage/gcc
compiler: gcc
env:
- *unittests
- *coverage
after_success: *eval-coverage
- <<: *linux
name: vimtags/gcc
compiler: gcc
env:
- *normal
- TEST="-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
#- <<: *linux
# name: huge+coverage/clang
# compiler: clang
# env:
# - *linux-huge
# - *coverage
# after_success: *eval-coverage
#- <<: *linux
# name: huge+coverage/gcc
# compiler: gcc
# env:
# - *linux-huge
# - *coverage
# after_success: *eval-coverage
#- <<: *linux # ASAN
# name: huge+asan/clang
# compiler: clang-11
# addons:
# apt:
# sources:
# - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main'
# key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
# packages:
# - *apt-packages
# - clang-11
# env:
# - *linux-huge
# - *asan
# after_failure: *asan_symbolize
#- <<: *linux
# name: huge-testgui+coverage/gcc
# compiler: gcc
# env:
# - *linux-huge
# - *coverage
# - TEST="-C src testgui"
# after_success: *eval-coverage
#- <<: *linux
# name: unittests+coverage/gcc
# compiler: gcc
# env:
# - *unittests
# - *coverage
# after_success: *eval-coverage
#- <<: *linux
# name: vimtags/gcc
# compiler: gcc
# env:
# - *normal
# - TEST="-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
# vim:set sts=2 sw=2 tw=0 et:

View File

@@ -3,20 +3,23 @@
# source files for all source archives
SRC_ALL = \
.gitignore \
.cirrus.yml \
.coveralls.yml \
.gitattributes \
.github/CODEOWNERS \
.github/workflows/ci.yml \
.github/workflows/codeql-analysis.yml \
.gitignore \
.hgignore \
.lgtm.yml \
.travis.yml \
.cirrus.yml \
.github/workflows/ci-windows.yaml \
.github/workflows/codeql-analysis.yml \
.github/CODEOWNERS \
appveyor.yml \
ci/appveyor.bat \
ci/build-snd-dummy.sh \
ci/config.mk*.sed \
ci/if_ver*.vim \
ci/load-snd-dummy.sh \
ci/config.mk*.sed \
ci/setup-xvfb.sh \
src/Make_all.mak \
src/README.md \
src/alloc.h \

View File

@@ -1,15 +1,8 @@
![Vim Logo](https://github.com/vim/vim/blob/master/runtime/vimlogo.gif)
[![Vim Logo](https://github.com/vim/vim/raw/master/runtime/vimlogo.gif)](https://www.vim.org)
[![Travis Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
[![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
[![Github Build status](https://github.com/vim/vim/workflows/GitHub%20CI/badge.svg)](https://github.com/vim/vim/actions?query=workflow%3A%22GitHub+CI%22)
[![Cirrus Build Status](https://api.cirrus-ci.com/github/vim/vim.svg)](https://cirrus-ci.com/github/vim/vim)
[![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master)
[![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim)
[![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/vim/vim.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/vim/vim/context:cpp)
[![Debian CI](https://badges.debian.net/badges/debian/testing/vim/version.svg)](https://buildd.debian.org/vim)
[![Packages](https://repology.org/badge/tiny-repos/vim.svg)](https://repology.org/metapackage/vim)
For translations of this README see the end.
[![Github Build status](https://github.com/vim/vim/workflows/GitHub%20CI/badge.svg)](https://github.com/vim/vim/actions?query=workflow%3A%22GitHub+CI%22) [![Travis Build Status](https://travis-ci.com/vim/vim.svg?branch=master)](https://travis-ci.com/github/vim/vim) [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim) [![Cirrus Build Status](https://api.cirrus-ci.com/github/vim/vim.svg)](https://cirrus-ci.com/github/vim/vim) [![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master) [![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim) [![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/vim/vim.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/vim/vim/context:cpp) [![Debian CI](https://badges.debian.net/badges/debian/testing/vim/version.svg)](https://buildd.debian.org/vim) [![Packages](https://repology.org/badge/tiny-repos/vim.svg)](https://repology.org/metapackage/vim) [![Fossies codespell report](https://fossies.org/linux/test/vim-master.tar.gz/codespell.svg)](https://fossies.org/linux/test/vim-master.tar.gz/codespell.html)
<sub>For translations of this README see the end.</sub>
## What is Vim? ##

19
ci/build-snd-dummy.sh Normal file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
set -eu
LINUX_VERSION=$(uname -r | cut -d. -f1-2)
LINUX_ARCHIVE_FILE=v${LINUX_VERSION}.tar.gz
LINUX_SOURCE_DIR=linux-${LINUX_VERSION}
mkdir -p "${TMPDIR}"
cd "${TMPDIR}"
wget -q "https://github.com/torvalds/linux/archive/${LINUX_ARCHIVE_FILE}"
tar -xf "${LINUX_ARCHIVE_FILE}" "${LINUX_SOURCE_DIR}/sound"
cd "${LINUX_SOURCE_DIR}/sound"
CC=gcc make -C "/lib/modules/$(uname -r)/build" M="${PWD}" CONFIG_SOUND=m CONFIG_SND=m CONFIG_SND_PCM=m CONFIG_SND_DUMMY=m modules
mkdir -p "${SND_DUMMY_DIR}"
cp soundcore.ko core/snd.ko core/snd-pcm.ko drivers/snd-dummy.ko "${SND_DUMMY_DIR}"

17
ci/setup-xvfb.sh Normal file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
set -e
apt-get install -y xvfb
cat <<EOT >/etc/systemd/system/xvfb.service
[Unit]
Description=X Virtual Frame Buffer Service
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24
[Install]
WantedBy=multi-user.target
EOT
systemctl enable xvfb.service
systemctl start xvfb.service

View File

@@ -1,11 +1,11 @@
" Vim Compiler File
" Compiler: ocaml
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/rgrinberg/vim-ocaml
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2020 Mar 28 - Improved error format (Thomas Leonard)
" 2017 Nov 26 - Improved error format (Markus Mottl)
" 2013 Aug 27 - Added a new OCaml error format (Markus Mottl)
" 2013 Jun 30 - Initial version (Marc Weber)
"
" Marc Weber's comments:
" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
@@ -21,6 +21,7 @@
"
" So having it here makes people opt-in
if exists("current_compiler")
finish
endif
@@ -30,6 +31,7 @@ let s:cpo_save = &cpo
set cpo&vim
CompilerSet errorformat =
\%EFile\ \"%f\"\\,\ lines\ %*\\d-%l\\,\ characters\ %c-%*\\d:,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.2. Last change: 2020 Dec 10
*autocmd.txt* For Vim version 8.2. Last change: 2020 Dec 19
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -851,6 +851,8 @@ FuncUndefined When a user function is used but it isn't
when it's used. The pattern is matched
against the function name. Both <amatch> and
<afile> are set to the name of the function.
Not triggered when compiling a |Vim9|
function.
NOTE: When writing Vim scripts a better
alternative is to use an autoloaded function.
See |autoload-functions|.

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 8.2. Last change: 2020 Sep 14
*cmdline.txt* For Vim version 8.2. Last change: 2020 Dec 26
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -849,6 +849,16 @@ function |expand()|.
file name n. See |:oldfiles| or |v:oldfiles| to get the
number. *E809*
{only when compiled with the |+eval| and |+viminfo| features}
In |Vim9-script| # is used to start a comment, use %% for the alternate file
name:
% Is replaced with the current file name.
%% Is replaced with the alternate file name. *:_%%* *c_%%*
%%n (where n is a number) is replaced with *:_%%0* *:_%%n*
the file name of buffer n. "%%0" is the same as "%%". *c_%%n*
%%% Is replaced with all names in the argument *:_%%%* *c_%%%#*
list concatenated, separated by spaces.
%%<n (where n is a number > 0) is replaced with old *:_%%<* *c_%%<*
file name n.
Note that these, except "#<n", give the file name as it was typed. If an
absolute path is needed (when using the file name from a different directory),

View File

@@ -1,4 +1,4 @@
*editing.txt* For Vim version 8.2. Last change: 2020 Oct 23
*editing.txt* For Vim version 8.2. Last change: 2021 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1014,7 +1014,7 @@ to write anyway add a '!' to the command.
*write-permissions*
When writing a new file the permissions are read-write. For unix the mask is
0666 with additionally umask applied. When writing a file that was read Vim
0o666 with additionally umask applied. When writing a file that was read Vim
will preserve the permissions, but clear the s-bit.
*write-readonly*
@@ -1033,7 +1033,7 @@ original file fails, there will be an error message telling you that you
lost the original file.
*DOS-format-write*
If the 'fileformat' is "dos", <CR> <NL> is used for <EOL>. This is default
If the 'fileformat' is "dos", <CR><NL> is used for <EOL>. This is default
for Win32. On other systems the message "[dos format]" is shown to remind you
that an unusual <EOL> was used.
*Unix-format-write*
@@ -1419,8 +1419,8 @@ There are a few things to remember when editing binary files:
the file. It is also possible that you get an "out of memory" error when
reading the file.
- Make sure the 'binary' option is set BEFORE loading the
file. Otherwise both <CR> <NL> and <NL> are considered to end a line
and when the file is written the <NL> will be replaced with <CR> <NL>.
file. Otherwise both <CR><NL> and <NL> are considered to end a line
and when the file is written the <NL> will be replaced with <CR><NL>.
- <Nul> characters are shown on the screen as ^@. You can enter them with
"CTRL-V CTRL-@" or "CTRL-V 000"
- To insert a <NL> character in the file split a line. When writing the

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.2. Last change: 2020 Dec 02
*eval.txt* For Vim version 8.2. Last change: 2021 Jan 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -49,7 +49,7 @@ There are ten types of variables:
*Number* *Integer*
Number A 32 or 64 bit signed number. |expr-number|
The number of bits is available in |v:numbersize|.
Examples: -123 0x10 0177 0b1011
Examples: -123 0x10 0177 0o177 0b1011
Float A floating point number. |floating-point-format| *Float*
{only when compiled with the |+float| feature}
@@ -97,9 +97,10 @@ the Number. Examples:
Conversion from a String to a Number only happens in legacy Vim script, not in
Vim9 script. It is done by converting the first digits to a number.
Hexadecimal "0xf9", Octal "017" or "0o17", and Binary "0b10"
numbers are recognized (NOTE: when using |scriptversion-4| octal with a
leading "0" is not recognized). If the String doesn't start with digits, the
result is zero.
numbers are recognized
NOTE: when using |scriptversion-4| octal with a leading "0" is not recognized.
The 0o notation requires patch 8.2.0886.
If the String doesn't start with digits, the result is zero.
Examples:
String "456" --> Number 456 ~
String "6bar" --> Number 6 ~
@@ -1150,7 +1151,7 @@ expr7 *expr7*
For '!' |TRUE| becomes |FALSE|, |FALSE| becomes |TRUE| (one).
For '-' the sign of the number is changed.
For '+' the number is unchanged.
For '+' the number is unchanged. Note: "++" has no effect.
A String will be converted to a Number first.
@@ -1191,6 +1192,7 @@ start with one!
If the length of the String is less than the index, the result is an empty
String. A negative index always results in an empty string (reason: backward
compatibility). Use [-1:] to get the last byte or character.
In Vim9 script a negative index is used like with a list: count from the end.
If expr8 is a |List| then it results the item at index expr1. See |list-index|
for possible index values. If the index is out of range this results in an
@@ -1318,8 +1320,8 @@ When using the lambda form there must be no white space between the } and the
number
------
number number constant *expr-number*
*hex-number* *octal-number* *binary-number*
*0x* *hex-number* *0o* *octal-number* *binary-number*
Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B)
and Octal (starting with 0, 0o or 0O).
@@ -1572,7 +1574,7 @@ Note how execute() is used to execute an Ex command. That's ugly though.
Lambda expressions have internal names like '<lambda>42'. If you get an error
for a lambda expression, you can find what it is with the following command: >
:function {'<lambda>42'}
:function <lambda>42
See also: |numbered-function|
==============================================================================
@@ -2475,10 +2477,13 @@ ch_status({handle} [, {options}])
changenr() Number current change number
char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
charclass({string}) Number character class of {string}
charcol({expr}) Number column number of cursor or mark
charidx({string}, {idx} [, {countcc}])
Number char index of byte {idx} in {string}
chdir({dir}) String change current working directory
cindent({lnum}) Number C indent for line {lnum}
clearmatches([{win}]) none clear all matches
col({expr}) Number column nr of cursor or mark
col({expr}) Number column byte index of cursor or mark
complete({startcol}, {matches}) none set Insert mode completion
complete_add({expr}) Number add completion match
complete_check() Number check for key typed during completion
@@ -2556,6 +2561,7 @@ getbufvar({expr}, {varname} [, {def}])
getchangelist([{expr}]) List list of change list items
getchar([expr]) Number get one character from the user
getcharmod() Number modifiers for the last typed character
getcharpos({expr}) List position of cursor, mark, etc.
getcharsearch() Dict last character search
getcmdline() String return the current command-line
getcmdpos() Number return cursor position in command-line
@@ -2564,6 +2570,7 @@ getcmdwintype() String return current command-line window type
getcompletion({pat}, {type} [, {filtered}])
List list of cmdline completion matches
getcurpos([{winnr}]) List position of the cursor
getcursorcharpos([{winnr}]) List character position of the cursor
getcwd([{winnr} [, {tabnr}]]) String get the current working directory
getenv({name}) String return environment variable
getfontname([{name}]) String name of font being used
@@ -2826,8 +2833,10 @@ setbufline({expr}, {lnum}, {text})
setbufvar({expr}, {varname}, {val})
none set {varname} in buffer {expr} to {val}
setcellwidths({list}) none set character cell width overrides
setcharpos({expr}, {list}) Number set the {expr} position to {list}
setcharsearch({dict}) Dict set character search from {dict}
setcmdpos({pos}) Number set cursor position in command-line
setcursorcharpos({list}) Number move cursor to position in {list}
setenv({name}, {val}) none set environment variable
setfperm({fname}, {mode}) Number set {fname} file permissions to {mode}
setline({lnum}, {line}) Number set line {lnum} to {line}
@@ -3511,8 +3520,8 @@ byteidxcomp({expr}, {nr}) *byteidxcomp()*
< The first and third echo result in 3 ('e' plus composing
character is 3 bytes), the second echo results in 1 ('e' is
one byte).
Only works differently from byteidx() when 'encoding' is set to
a Unicode encoding.
Only works differently from byteidx() when 'encoding' is set
to a Unicode encoding.
Can also be used as a |method|: >
GetName()->byteidxcomp(idx)
@@ -3588,6 +3597,43 @@ charclass({string}) *charclass()*
other specific Unicode class
The class is used in patterns and word motions.
*charcol()*
charcol({expr}) Same as |col()| but returns the character index of the column
position given with {expr} instead of the byte position.
Example:
With the cursor on '세' in line 5 with text "여보세요": >
charcol('.') returns 3
col('.') returns 7
< Can also be used as a |method|: >
GetPos()->col()
<
*charidx()*
charidx({string}, {idx} [, {countcc}])
Return the character index of the byte at {idx} in {string}.
The index of the first character is zero.
If there are no multibyte characters the returned value is
equal to {idx}.
When {countcc} is omitted or zero, then composing characters
are not counted separately, their byte length is added to the
preceding base character.
When {countcc} is set to 1, then composing characters are
counted as separate characters.
Returns -1 if the arguments are invalid or if {idx} is greater
than the index of the last byte in {string}. An error is
given if the first argument is not a string, the second
argument is not a number or when the third argument is present
and is not zero or one.
See |byteidx()| and |byteidxcomp()| for getting the byte index
from the character index.
Examples: >
echo charidx('áb́ć', 3) returns 1
echo charidx('áb́ć', 6, 1) returns 4
echo charidx('áb́ć', 16) returns -1
<
Can also be used as a |method|: >
GetName()->charidx(idx)
chdir({dir}) *chdir()*
Change the current working directory to {dir}. The scope of
@@ -3653,7 +3699,8 @@ col({expr}) The result is a Number, which is the byte index of the column
out of range then col() returns zero.
To get the line number use |line()|. To get both use
|getpos()|.
For the screen column position use |virtcol()|.
For the screen column position use |virtcol()|. For the
character position use |charcol()|.
Note that only marks in the current file can be used.
Examples: >
col(".") column of cursor
@@ -3954,6 +4001,9 @@ cursor({list})
This is like the return value of |getpos()| or |getcurpos()|,
but without the first item.
To position the cursor using the character count, use
|setcursorcharpos()|.
Does not change the jumplist.
If {lnum} is greater than the number of lines in the buffer,
the cursor will be positioned at the last line in the buffer.
@@ -4740,7 +4790,8 @@ fnamemodify({fname}, {mods}) *fnamemodify()*
:echo fnamemodify("main.c", ":p:h")
< results in: >
/home/mool/vim/vim/src
< Note: Environment variables don't work in {fname}, use
< If {mods} is empty then {fname} is returned.
Note: Environment variables don't work in {fname}, use
|expand()| first then.
Can also be used as a |method|: >
@@ -5143,7 +5194,10 @@ getchar([expr]) *getchar()*
|xterm-bracketed-paste|.
There is no prompt, you will somehow have to make clear to the
user that a character has to be typed.
user that a character has to be typed. The screen is not
redrawn, e.g. when resizing the window. When using a popup
window it should work better with a |popup-filter|.
There is no mapping for the character.
Key codes are replaced, thus when the user presses the <Del>
key you get the code for the <Del> key, not the raw character
@@ -5189,6 +5243,20 @@ getcharmod() *getcharmod()*
character itself are obtained. Thus Shift-a results in "A"
without a modifier.
*getcharpos()*
getcharpos({expr})
Get the position for {expr}. Same as |getpos()| but the column
number in the returned List is a character index instead of
a byte index.
Example:
With the cursor on '세' in line 5 with text "여보세요": >
getcharpos('.') returns [0, 5, 3, 0]
getpos('.') returns [0, 5, 7, 0]
<
Can also be used as a |method|: >
GetMark()->getcharpos()
getcharsearch() *getcharsearch()*
Return the current character search information as a {dict}
with the following entries:
@@ -5314,8 +5382,11 @@ getcurpos([{winid}])
includes an extra "curswant" item in the list:
[0, lnum, col, off, curswant] ~
The "curswant" number is the preferred column when moving the
cursor vertically. Also see |getpos()|.
The first "bufnum" item is always zero.
cursor vertically. Also see |getcursorcharpos()| and
|getpos()|.
The first "bufnum" item is always zero. The byte position of
the cursor is returned in 'col'. To get the character
position, use |getcursorcharpos()|.
The optional {winid} argument can specify the window. It can
be the window number or the |window-ID|. The last known
@@ -5329,7 +5400,24 @@ getcurpos([{winid}])
call setpos('.', save_cursor)
< Note that this only works within the window. See
|winrestview()| for restoring more state.
*getcwd()*
Can also be used as a |method|: >
GetWinid()->getcurpos()
< *getcursorcharpos()*
getcursorcharpos([{winid}])
Same as |getcurpos()| but the column number in the returned
List is a character index instead of a byte index.
Example:
With the cursor on '보' in line 3 with text "여보세요": >
getcursorcharpos() returns [0, 3, 2, 0, 3]
getcurpos() returns [0, 3, 4, 0, 3]
< Can also be used as a |method|: >
GetWinid()->getcursorcharpos()
< *getcwd()*
getcwd([{winnr} [, {tabnr}]])
The result is a String, which is the name of the current
working directory.
@@ -5636,16 +5724,18 @@ getpos({expr}) Get the position for {expr}. For possible values of {expr}
Note that for '< and '> Visual mode matters: when it is "V"
(visual line mode) the column of '< is zero and the column of
'> is a large number.
The column number in the returned List is the byte position
within the line. To get the character position in the line,
use |getcharpos()|
This can be used to save and restore the position of a mark: >
let save_a_mark = getpos("'a")
...
call setpos("'a", save_a_mark)
< Also see |getcurpos()| and |setpos()|.
< Also see |getcharpos()|, |getcurpos()| and |setpos()|.
Can also be used as a |method|: >
GetMark()->getpos()
getqflist([{what}]) *getqflist()*
Returns a |List| with all the current quickfix errors. Each
list item is a dictionary with these entries:
@@ -7440,24 +7530,24 @@ matchfuzzy({list}, {str} [, {dict}]) *matchfuzzy()*
matchfuzzypos({list}, {str} [, {dict}]) *matchfuzzypos()*
Same as |matchfuzzy()|, but returns the list of matched
strings and the list of character positions where characters
in {str} matches. You can use |byteidx()|to convert a
character position to a byte position.
strings, the list of character positions where characters
in {str} matches and a list of matching scores. You can
use |byteidx()|to convert a character position to a byte
position.
If {str} matches multiple times in a string, then only the
positions for the best match is returned.
If there are no matching strings or there is an error, then a
list with two empty list items is returned.
list with three empty list items is returned.
Example: >
:echo matchfuzzypos(['testing'], 'tsg')
< results in [['testing'], [[0, 2, 6]]] >
< results in [['testing'], [[0, 2, 6]], [99]] >
:echo matchfuzzypos(['clay', 'lacy'], 'la')
< results in [['lacy', 'clay'], [[0, 1], [1, 2]]] >
< results in [['lacy', 'clay'], [[0, 1], [1, 2]], [153, 133]] >
:echo [{'text': 'hello', 'id' : 10}]->matchfuzzypos('ll', {'key' : 'text'})
< results in [{'id': 10, 'text': 'hello'}] [[2, 3]]
< results in [[{'id': 10, 'text': 'hello'}], [[2, 3]], [127]]
matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
Same as |match()|, but return a |List|. The first item in the
@@ -7511,8 +7601,10 @@ matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
<
*max()*
max({expr}) Return the maximum value of all items in {expr}.
{expr} can be a |List| or a |Dictionary|. For a Dictionary,
max({expr}) Return the maximum value of all items in {expr}. Example: >
echo max([apples, pears, oranges])
< {expr} can be a |List| or a |Dictionary|. For a Dictionary,
it returns the maximum of all values in the Dictionary.
If {expr} is neither a List nor a Dictionary, or one of the
items in {expr} cannot be used as a Number this results in
@@ -7582,8 +7674,10 @@ menu_info({name} [, {mode}]) *menu_info()*
< *min()*
min({expr}) Return the minimum value of all items in {expr}.
{expr} can be a |List| or a |Dictionary|. For a Dictionary,
min({expr}) Return the minimum value of all items in {expr}. Example: >
echo min([apples, pears, oranges])
< {expr} can be a |List| or a |Dictionary|. For a Dictionary,
it returns the minimum of all values in the Dictionary.
If {expr} is neither a List nor a Dictionary, or one of the
items in {expr} cannot be used as a Number this results in
@@ -7600,13 +7694,13 @@ mkdir({name} [, {path} [, {prot}]])
necessary. Otherwise it must be "".
If {prot} is given it is used to set the protection bits of
the new directory. The default is 0755 (rwxr-xr-x: r/w for
the user readable for others). Use 0700 to make it unreadable
for others. This is only used for the last part of {name}.
Thus if you create /tmp/foo/bar then /tmp/foo will be created
with 0755.
the new directory. The default is 0o755 (rwxr-xr-x: r/w for
the user, readable for others). Use 0o700 to make it
unreadable for others. This is only used for the last part of
{name}. Thus if you create /tmp/foo/bar then /tmp/foo will be
created with 0o755.
Example: >
:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
:call mkdir($HOME . "/tmp/foo/bar", "p", 0o700)
< This function is not available in the |sandbox|.
@@ -8929,7 +9023,7 @@ searchcount([{options}]) *searchcount()*
result. if search exceeded
total count, "total" value
becomes `maxcount + 1`
(default: 0)
(default: 99)
pos |List| `[lnum, col, off]` value
when recomputing the result.
this changes "current" result
@@ -9169,6 +9263,19 @@ setcellwidths({list}) *setcellwidths()*
< You can use the script $VIMRUNTIME/tools/emoji_list.vim to see
the effect for known emoji characters.
setcharpos({expr}, {list}) *setcharpos()*
Same as |setpos()| but uses the specified column number as the
character index instead of the byte index in the line.
Example:
With the text "여보세요" in line 8: >
call setcharpos('.', [0, 8, 4, 0])
< positions the cursor on the fourth character '요'. >
call setpos('.', [0, 8, 4, 0])
< positions the cursor on the second character '보'.
Can also be used as a |method|: >
GetPosition()->setcharpos('.')
setcharsearch({dict}) *setcharsearch()*
Set the current character search information to {dict},
@@ -9211,6 +9318,21 @@ setcmdpos({pos}) *setcmdpos()*
Can also be used as a |method|: >
GetPos()->setcmdpos()
setcursorcharpos({lnum}, {col} [, {off}]) *setcursorcharpos()*
setcursorcharpos({list})
Same as |cursor()| but uses the specified column number as the
character index instead of the byte index in the line.
Example:
With the text "여보세요" in line 4: >
call setcursorcharpos(4, 3)
< positions the cursor on the third character '세'. >
call cursor(4, 3)
< positions the cursor on the first character '여'.
Can also be used as a |method|: >
GetCursorPos()->setcursorcharpos()
setenv({name}, {val}) *setenv()*
Set environment variable {name} to {val}.
When {val} is |v:null| the environment variable is deleted.
@@ -9322,7 +9444,8 @@ setpos({expr}, {list})
"lnum" and "col" are the position in the buffer. The first
column is 1. Use a zero "lnum" to delete a mark. If "col" is
smaller than 1 then 1 is used.
smaller than 1 then 1 is used. To use the character count
instead of the byte count, use |setcharpos()|.
The "off" number is only used when 'virtualedit' is set. Then
it is the offset in screen columns from the start of the
@@ -9342,7 +9465,7 @@ setpos({expr}, {list})
Returns 0 when the position could be set, -1 otherwise.
An error message is given if {expr} is invalid.
Also see |getpos()| and |getcurpos()|.
Also see |setcharpos()|, |getpos()| and |getcurpos()|.
This does not restore the preferred column for moving
vertically; if you set the cursor position with this, |j| and
@@ -10842,6 +10965,8 @@ timer_start({time}, {callback} [, {options}])
function or a |Funcref|. It is called with one argument, which
is the timer ID. The callback is only invoked when Vim is
waiting for input.
If you want to show a message look at |popup_notification()|
to avoid interfering with what the user is doing.
{options} is a dictionary. Supported entries:
"repeat" Number of times to repeat calling the
@@ -12919,7 +13044,7 @@ text...
:exe[cute] {expr1} .. Executes the string that results from the evaluation
of {expr1} as an Ex command.
Multiple arguments are concatenated, with a space in
between. To avoid the extra space use the "."
between. To avoid the extra space use the ".."
operator to concatenate strings into one argument.
{expr1} is used as the processed command, command line
editing keys are not recognized.

View File

@@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 8.2. Last change: 2020 Dec 05
*helphelp.txt* For Vim version 8.2. Last change: 2020 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -92,9 +92,9 @@ Help on help files *helphelp*
:help k| only
< Note that a space before the '|' is seen as part of
the ":help" argument.
You can also use <LF> or <CR> to separate the help
You can also use <NL> or <CR> to separate the help
command from a following command. You need to type
CTRL-V first to insert the <LF> or <CR>. Example: >
CTRL-V first to insert the <NL> or <CR>. Example: >
:help so<C-V><CR>only
:h[elp]! [subject] Like ":help", but in non-English help files prefer to
@@ -158,6 +158,9 @@ When no argument is given to |:help| the file given with the 'helpfile' option
will be opened. Otherwise the specified tag is searched for in all "doc/tags"
files in the directories specified in the 'runtimepath' option.
If you would like to open the help in the current window, see this tip:
|help-curwin|.
The initial height of the help window can be set with the 'helpheight' option
(default 20).

View File

@@ -1,4 +1,4 @@
*intro.txt* For Vim version 8.2. Last change: 2020 Aug 15
*intro.txt* For Vim version 8.2. Last change: 2020 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -434,7 +434,7 @@ notation meaning equivalent decimal value(s) ~
<CSI> command sequence intro ALT-Esc 155 *<CSI>*
<xCSI> CSI when typed in the GUI *<xCSI>*
<EOL> end-of-line (can be <CR>, <LF> or <CR><LF>,
<EOL> end-of-line (can be <CR>, <NL> or <CR><NL>,
depends on system and 'fileformat') *<EOL>*
<Up> cursor-up *cursor-up* *cursor_up*
@@ -678,8 +678,8 @@ Normal mode from any other mode. This can be used to make sure Vim is in
Normal mode, without causing a beep like <Esc> would. However, this does not
work in Ex mode. When used after a command that takes an argument, such as
|f| or |m|, the timeout set with 'ttimeoutlen' applies.
When focus is in a terminal window, CTRL-\ CTRL-N goes to Normal mode for only
one command, see |t_CTRL-\_CTRL-N|.
When focus is in a terminal window, CTRL-\ CTRL-N goes to Normal mode until an
edit command is entered, see |t_CTRL-\_CTRL-N|.
*CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G*
The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when

View File

@@ -1,4 +1,4 @@
*message.txt* For Vim version 8.2. Last change: 2020 Sep 07
*message.txt* For Vim version 8.2. Last change: 2020 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -794,6 +794,9 @@ and the screen is about to be redrawn:
-> Press <Enter> or <Space> to redraw the screen and continue, without that
key being used otherwise.
-> Press ':' or any other Normal mode command character to start that command.
Note that after an external command some special keys, such as the cursor
keys, may not work normally, because the terminal is still set to a state
for executing the external command.
-> Press 'k', <Up>, 'u', 'b' or 'g' to scroll back in the messages. This
works the same way as at the |more-prompt|. Only works when 'compatible'
is off and 'more' is on.

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2020 Oct 10
*options.txt* For Vim version 8.2. Last change: 2021 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -438,7 +438,7 @@ the system, mostly it is something like 256 or 1024 characters.
CTRL-? CTRL-H
not CTRL-? CTRL-?
(CTRL-? is 0177 octal, 0x7f hex)
(CTRL-? is 0o177 octal, 0x7f hex)
If your delete key terminal code is wrong, but the
code for backspace is alright, you can put this in
@@ -2801,6 +2801,7 @@ A jump table for the options with a short description can be found at |Q_op|.
toggled each time the flag is given. See |complex-change|. See
also 'gdefault' option.
Switching this option on may break plugins!
This option is not used in |Vim9| script.
*'emoji'* *'emo'* *'noemoji'* *'noemo'*
'emoji' 'emo' boolean (default: on)
@@ -3121,7 +3122,7 @@ A jump table for the options with a short description can be found at |Q_op|.
local to buffer
This gives the <EOL> of the current buffer, which is used for
reading/writing the buffer from/to a file:
dos <CR> <NL>
dos <CR><NL>
unix <NL>
mac <CR>
When "dos" is used, CTRL-Z at the end of a file is ignored.
@@ -3570,6 +3571,7 @@ A jump table for the options with a short description can be found at |Q_op|.
DEPRECATED: Setting this option may break plugins that are not aware
of this option. Also, many users get confused that adding the /g flag
has the opposite effect of that it normally does.
This option is not used in |Vim9| script.
*'grepformat'* *'gfm'*
'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m")
@@ -4943,6 +4945,8 @@ A jump table for the options with a short description can be found at |Q_op|.
Only switch it off when working with old Vi scripts. In any other
situation write patterns that work when 'magic' is on. Include "\M"
when you want to |/\M|.
In |Vim9| script the value of 'magic' is ignored, patterns behave like
it is always set.
*'makeef'* *'mef'*
'makeef' 'mef' string (default: "")
@@ -6317,7 +6321,9 @@ A jump table for the options with a short description can be found at |Q_op|.
local to window
Number of lines to scroll with CTRL-U and CTRL-D commands. Will be
set to half the number of lines in the window when the window size
changes. If you give a count to the CTRL-U or CTRL-D command it will
changes. This may happen when enabling the |status-line| or
'tabline' option after setting the 'scroll' option.
If you give a count to the CTRL-U or CTRL-D command it will
be used as the new value for 'scroll'. Reset to half the window
height with ":set scroll=0".

View File

@@ -1,4 +1,4 @@
*os_vms.txt* For Vim version 8.2. Last change: 2020 Jun 07
*os_vms.txt* For Vim version 8.2. Last change: 2021 Jan 04
VIM REFERENCE MANUAL
@@ -72,7 +72,7 @@ See the file [.SRC]INSTALLVMS.TXT.
4. Problems *vms-problems*
The code has been tested under Open VMS 6.2 - 8.2 on Alpha, VAX and IA64
platforms with the DEC C compiler. It should work without big problems.
platforms with the DEC C compiler. It should work without major problems.
If your system does not have some include libraries you can tune up in
OS_VMS_CONF.H file.
@@ -765,6 +765,15 @@ GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
9. VMS related changes *vms-changes*
Version 8.2
- make all changes needed for clean compile build of v8.2 on VMS on all platforms
- fix the call mkdir bug (vicente_polo@yahoo.es)
- test on VSI OpenVMS Alpha and Itanium platforms
- added LUA support
- added XPM support - Motif GUI with toolbar on all platforms
- XPM v3.4.11 libraries for IA64, AXP and VAX are added
- start integrating the new test scripts
Version 8.1
- make necessary changes to build v8.1 on VMS

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.2. Last change: 2020 Dec 06
*pattern.txt* For Vim version 8.2. Last change: 2021 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -394,15 +394,19 @@ the pattern will not match. This is only useful when debugging Vim.
==============================================================================
3. Magic */magic*
Some characters in the pattern are taken literally. They match with the same
character in the text. When preceded with a backslash however, these
characters get a special meaning.
Some characters in the pattern, such as letters, are taken literally. They
match exactly the same character in the text. When preceded with a backslash
however, these characters may get a special meaning. For example, "a" matches
the letter "a", while "\a" matches any alphabetic character.
Other characters have a special meaning without a backslash. They need to be
preceded with a backslash to match literally.
preceded with a backslash to match literally. For example "." matches any
character while "\." matches a dot.
If a character is taken literally or not depends on the 'magic' option and the
items mentioned next.
items in the pattern mentioned next. The 'magic' option should always be set,
but it can be switched off for Vi compatibility. We mention the effect of
'nomagic' here for completeness, but we recommend against using that.
*/\m* */\M*
Use of "\m" makes the pattern after it be interpreted as if 'magic' is set,
ignoring the actual value of the 'magic' option.
@@ -411,30 +415,28 @@ Use of "\M" makes the pattern after it be interpreted as if 'nomagic' is used.
Use of "\v" means that after it, all ASCII characters except '0'-'9', 'a'-'z',
'A'-'Z' and '_' have special meaning: "very magic"
Use of "\V" means that after it, only a backslash and terminating character
(usually / or ?) have special meaning: "very nomagic"
Use of "\V" means that after it, only a backslash and the terminating
character (usually / or ?) have special meaning: "very nomagic"
Examples:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
a a a a literal 'a'
\a \a \a \a any alphabetic character
. . \. \. any character
\. \. . . literal dot
$ $ $ \$ end-of-line
* * \* \* any number of the previous atom
~ ~ \~ \~ latest substitute string
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
() \(\) \(\) \(\) group as an atom
| \| \| \| nothing: separates alternatives
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
\{ { { { literal curly brace
{only Vim supports \m, \M, \v and \V}
It is recommended to always keep the 'magic' option at the default setting,
which is 'magic'. This avoids portability problems. To make a pattern immune
to the 'magic' option being set or not, put "\m" or "\M" at the start of the
pattern.
If you want to you can make a pattern immune to the 'magic' option being set
or not by putting "\m" or "\M" at the start of the pattern.
==============================================================================
4. Overview of pattern items *pattern-overview*
@@ -1177,7 +1179,7 @@ x A single character, with no special meaning, matches itself
\b <BS>
\n line break, see above |/[\n]|
\d123 decimal number of character
\o40 octal number of character up to 0377
\o40 octal number of character up to 0o377
\x20 hexadecimal number of character up to 0xff
\u20AC hex. number of multibyte character up to 0xffff
\U1234 hex. number of multibyte character up to 0xffffffff
@@ -1215,7 +1217,8 @@ x A single character, with no special meaning, matches itself
\%d123 Matches the character specified with a decimal number. Must be
followed by a non-digit.
\%o40 Matches the character specified with an octal number up to 0377.
Numbers below 040 must be followed by a non-octal digit or a non-digit.
Numbers below 0o40 must be followed by a non-octal digit or a
non-digit.
\%x2a Matches the character specified with up to two hexadecimal characters.
\%u20AC Matches the character specified with up to four hexadecimal
characters.

View File

@@ -309,8 +309,8 @@ popup_dialog({what}, {options}) *popup_dialog()*
popup_filter_menu({id}, {key}) *popup_filter_menu()*
Filter that can be used for a popup. These keys can be used:
j <Down> select item below
k <Up> select item above
j <Down> <C-N> select item below
k <Up> <C-P> select item above
<Space> <Enter> accept current selection
x Esc CTRL-C cancel the menu
Other keys are ignored.

View File

@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 8.2. Last change: 2020 Oct 09
*repeat.txt* For Vim version 8.2. Last change: 2021 Jan 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -354,6 +354,14 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
Vim version, or update Vim to a newer version. See
|vimscript-version| for what changed between versions.
:vim9script [noclear] *:vim9* *:vim9script*
Marks a script file as containing |Vim9-script|
commands. Also see |vim9-namespace|.
Must be the first command in the file.
For [noclear] see |vim9-reload|.
Without the |+eval| feature this changes the syntax
for some commands.
*:scr* *:scriptnames*
:scr[iptnames] List all sourced script names, in the order they were
first sourced. The number is used for the script ID

View File

@@ -1,4 +1,4 @@
*starting.txt* For Vim version 8.2. Last change: 2020 Sep 23
*starting.txt* For Vim version 8.2. Last change: 2020 Dec 19
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -996,7 +996,7 @@ version 5.0) are not recognized.
MS-Windows line separators ~
On MS-Windows, Vim assumes that all the vimrc files have <CR> <NL> pairs as
On MS-Windows, Vim assumes that all the vimrc files have <CR><NL> pairs as
line separators. This will give problems if you have a file with only <NL>s
and have a line like ":map xx yy^M". The trailing ^M will be ignored.

View File

@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 8.2. Last change: 2020 Dec 04
*syntax.txt* For Vim version 8.2. Last change: 2020 Dec 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -66,8 +66,8 @@ This command also sources the |menu.vim| script when the GUI is running or
will start soon. See |'go-M'| about avoiding that.
*:syn-on* *:syntax-on*
The `:syntax enable` command will keep your current color settings. This
allows using `:highlight` commands to set your preferred colors before or
The `:syntax enable` command will keep most of your current color settings.
This allows using `:highlight` commands to set your preferred colors before or
after using this command. If you want Vim to overrule your settings with the
defaults, use: >
:syntax on

View File

@@ -1783,6 +1783,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
09.2 usr_09.txt /*09.2*
09.3 usr_09.txt /*09.3*
09.4 usr_09.txt /*09.4*
0o eval.txt /*0o*
0x eval.txt /*0x*
10.1 usr_10.txt /*10.1*
10.2 usr_10.txt /*10.2*
10.3 usr_10.txt /*10.3*
@@ -1994,6 +1996,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:AdaTagFile ft_ada.txt /*:AdaTagFile*
:AdaTypes ft_ada.txt /*:AdaTypes*
:Arguments terminal.txt /*:Arguments*
:Asm terminal.txt /*:Asm*
:Break terminal.txt /*:Break*
:Cfilter quickfix.txt /*:Cfilter*
:Clear terminal.txt /*:Clear*
@@ -2072,6 +2075,11 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:_#< cmdline.txt /*:_#<*
:_#n cmdline.txt /*:_#n*
:_% cmdline.txt /*:_%*
:_%% cmdline.txt /*:_%%*
:_%%% cmdline.txt /*:_%%%*
:_%%0 cmdline.txt /*:_%%0*
:_%%< cmdline.txt /*:_%%<*
:_%%n cmdline.txt /*:_%%n*
:_%: cmdline.txt /*:_%:*
:_%< cmdline.txt /*:_%<*
:a insert.txt /*:a*
@@ -3389,8 +3397,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:vie editing.txt /*:vie*
:view editing.txt /*:view*
:vim quickfix.txt /*:vim*
:vim9 vim9.txt /*:vim9*
:vim9script vim9.txt /*:vim9script*
:vim9 repeat.txt /*:vim9*
:vim9script repeat.txt /*:vim9script*
:vimgrep quickfix.txt /*:vimgrep*
:vimgrepa quickfix.txt /*:vimgrepa*
:vimgrepadd quickfix.txt /*:vimgrepadd*
@@ -5151,10 +5159,14 @@ VIMINIT starting.txt /*VIMINIT*
VMS os_vms.txt /*VMS*
Vi intro.txt /*Vi*
View starting.txt /*View*
Vim9 vim9.txt /*Vim9*
Vim9-script vim9.txt /*Vim9-script*
VimEnter autocmd.txt /*VimEnter*
VimLeave autocmd.txt /*VimLeave*
VimLeavePre autocmd.txt /*VimLeavePre*
VimResized autocmd.txt /*VimResized*
VimResume autocmd.txt /*VimResume*
VimSuspend autocmd.txt /*VimSuspend*
Vimball-copyright pi_vimball.txt /*Vimball-copyright*
Virtual-Replace-mode insert.txt /*Virtual-Replace-mode*
VisVim if_ole.txt /*VisVim*
@@ -5560,6 +5572,10 @@ c_## cmdline.txt /*c_##*
c_#< cmdline.txt /*c_#<*
c_#n cmdline.txt /*c_#n*
c_% cmdline.txt /*c_%*
c_%% cmdline.txt /*c_%%*
c_%%%# cmdline.txt /*c_%%%#*
c_%%< cmdline.txt /*c_%%<*
c_%%n cmdline.txt /*c_%%n*
c_<BS> cmdline.txt /*c_<BS>*
c_<C-Left> cmdline.txt /*c_<C-Left>*
c_<C-R> cmdline.txt /*c_<C-R>*
@@ -5743,8 +5759,10 @@ characterwise motion.txt /*characterwise*
characterwise-register change.txt /*characterwise-register*
characterwise-visual visual.txt /*characterwise-visual*
charclass() eval.txt /*charclass()*
charcol() eval.txt /*charcol()*
charconvert_from-variable eval.txt /*charconvert_from-variable*
charconvert_to-variable eval.txt /*charconvert_to-variable*
charidx() eval.txt /*charidx()*
charity uganda.txt /*charity*
charset mbyte.txt /*charset*
charset-conversion mbyte.txt /*charset-conversion*
@@ -6937,6 +6955,7 @@ getbufvar() eval.txt /*getbufvar()*
getchangelist() eval.txt /*getchangelist()*
getchar() eval.txt /*getchar()*
getcharmod() eval.txt /*getcharmod()*
getcharpos() eval.txt /*getcharpos()*
getcharsearch() eval.txt /*getcharsearch()*
getcmdline() eval.txt /*getcmdline()*
getcmdpos() eval.txt /*getcmdpos()*
@@ -6944,6 +6963,7 @@ getcmdtype() eval.txt /*getcmdtype()*
getcmdwintype() eval.txt /*getcmdwintype()*
getcompletion() eval.txt /*getcompletion()*
getcurpos() eval.txt /*getcurpos()*
getcursorcharpos() eval.txt /*getcursorcharpos()*
getcwd() eval.txt /*getcwd()*
getenv() eval.txt /*getenv()*
getfontname() eval.txt /*getfontname()*
@@ -7144,6 +7164,7 @@ hebrew hebrew.txt /*hebrew*
hebrew.txt hebrew.txt /*hebrew.txt*
help helphelp.txt /*help*
help-context help.txt /*help-context*
help-curwin tips.txt /*help-curwin*
help-summary usr_02.txt /*help-summary*
help-tags tags 1
help-translated helphelp.txt /*help-translated*
@@ -8245,6 +8266,7 @@ notation intro.txt /*notation*
notepad gui_w32.txt /*notepad*
nr2char() eval.txt /*nr2char()*
nroff.vim syntax.txt /*nroff.vim*
null vim9.txt /*null*
null-variable eval.txt /*null-variable*
number_relativenumber options.txt /*number_relativenumber*
numbered-function eval.txt /*numbered-function*
@@ -8856,8 +8878,10 @@ set-spc-auto spell.txt /*set-spc-auto*
setbufline() eval.txt /*setbufline()*
setbufvar() eval.txt /*setbufvar()*
setcellwidths() eval.txt /*setcellwidths()*
setcharpos() eval.txt /*setcharpos()*
setcharsearch() eval.txt /*setcharsearch()*
setcmdpos() eval.txt /*setcmdpos()*
setcursorcharpos() eval.txt /*setcursorcharpos()*
setenv() eval.txt /*setenv()*
setfperm() eval.txt /*setfperm()*
setline() eval.txt /*setline()*
@@ -9538,6 +9562,7 @@ termdebug-prompt terminal.txt /*termdebug-prompt*
termdebug-starting terminal.txt /*termdebug-starting*
termdebug-stepping terminal.txt /*termdebug-stepping*
termdebug-variables terminal.txt /*termdebug-variables*
termdebug_disasm_window terminal.txt /*termdebug_disasm_window*
termdebug_map_K terminal.txt /*termdebug_map_K*
termdebug_popup terminal.txt /*termdebug_popup*
termdebug_shortcuts terminal.txt /*termdebug_shortcuts*
@@ -10065,11 +10090,13 @@ vim9-export vim9.txt /*vim9-export*
vim9-final vim9.txt /*vim9-final*
vim9-gotchas vim9.txt /*vim9-gotchas*
vim9-import vim9.txt /*vim9-import*
vim9-namespace vim9.txt /*vim9-namespace*
vim9-rationale vim9.txt /*vim9-rationale*
vim9-reload vim9.txt /*vim9-reload*
vim9-scopes vim9.txt /*vim9-scopes*
vim9-script vim9.txt /*vim9-script*
vim9-script-intro usr_46.txt /*vim9-script-intro*
vim9-types vim9.txt /*vim9-types*
vim9-user-command vim9.txt /*vim9-user-command*
vim9.txt vim9.txt /*vim9.txt*
vim9script vim9.txt /*vim9script*
vim: options.txt /*vim:*

View File

@@ -1,4 +1,4 @@
*tagsrch.txt* For Vim version 8.2. Last change: 2020 Apr 19
*tagsrch.txt* For Vim version 8.2. Last change: 2020 Dec 19
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -556,7 +556,7 @@ The first format is a normal tag, which is completely compatible with Vi. It
is the only format produced by traditional ctags implementations. This is
often used for functions that are global, also referenced in other files.
The lines in the tags file can end in <LF> or <CR><LF>. On the Macintosh <CR>
The lines in the tags file can end in <NL> or <CR><NL>. On the Macintosh <CR>
also works. The <CR> and <NL> characters can never appear inside a line.
The second format is new. It includes additional information in optional

View File

@@ -1,4 +1,4 @@
*term.txt* For Vim version 8.2. Last change: 2020 Apr 12
*term.txt* For Vim version 8.2. Last change: 2020 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -217,6 +217,10 @@ it's different from Alt). They can be combined. Examples: >
Another speciality about these codes is that they are not overwritten by
another code. That is to avoid that the codes obtained from xterm directly
|t_RV| overwrite them.
Another special value is a termcap entry ending in "@;*X". This is for cursor
keys, which either use "CSI X" or "CSI 1 ; modifier X". Thus the "@"
stands for either "1" if a modifier follows, or nothing.
*xterm-scroll-region*
The default termcap entry for xterm on Sun and other platforms does not
contain the entry for scroll regions. Add ":cs=\E[%i%d;%dr:" to the xterm

View File

@@ -1,4 +1,4 @@
*terminal.txt* For Vim version 8.2. Last change: 2020 Nov 25
*terminal.txt* For Vim version 8.2. Last change: 2021 Jan 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -742,6 +742,9 @@ term_setapi({buf}, {expr}) *term_setapi()*
The default is "Tapi_". When {expr} is an empty string then
no |terminal-api| function can be used for {buf}.
When used as a method the base is used for {buf}: >
GetBufnr()->term_setapi({expr})
term_setansicolors({buf}, {colors}) *term_setansicolors()*
Set the ANSI color palette used by terminal {buf}.
{colors} must be a List of 16 valid color names or hexadecimal
@@ -1327,6 +1330,8 @@ Other commands ~
*:Program* jump to the window with the running program
*:Source* jump to the window with the source code, create it if there
isn't one
*:Asm* jump to the window with the disassembly, create it if there
isn't one
Prompt mode ~
@@ -1349,6 +1354,12 @@ Prompt mode can be used even when the |+terminal| feature is present with: >
The K key is normally mapped to :Evaluate. If you do not want this use: >
let g:termdebug_map_K = 0
<
*termdebug_disasm_window*
If you want the Asm window shown by default, set this to 1. Setting to
any value greater than 1 will set the Asm window height to that value: >
let g:termdebug_disasm_window = 15
<
Communication ~
*termdebug-communication*

View File

@@ -1,4 +1,4 @@
*testing.txt* For Vim version 8.2. Last change: 2020 Sep 06
*testing.txt* For Vim version 8.2. Last change: 2020 Dec 12
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -308,8 +308,11 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
first reported error: >
assert_fails('cmd', ['E987:.*expected bool'])
< The second pattern, if present, is matched against the last
reported error. To only match the last error use an empty
string for the first error: >
reported error.
If there is only one error then both patterns must match. This
can be used to check that there is only one error.
To only match the last error use an empty string for the first
error: >
assert_fails('cmd', ['', 'E987:'])
<
If {msg} is empty then it is not used. Do this to get the

View File

@@ -1,4 +1,4 @@
*tips.txt* For Vim version 8.2. Last change: 2009 Nov 07
*tips.txt* For Vim version 8.2. Last change: 2020 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -30,6 +30,7 @@ Executing shell commands in a window |shell-window|
Hex editing |hex-editing|
Using <> notation in autocommands |autocmd-<>|
Highlighting matching parens |match-parens|
Opening help in the current window |help-curwin|
==============================================================================
Editing C programs *C-editing*
@@ -530,4 +531,28 @@ A slightly more advanced version is used in the |matchparen| plugin.
autocmd InsertEnter * match none
<
==============================================================================
Opening help in the current window *help-curwin*
By default, help is displayed in a split window. If you prefer it opens in
the current window, try this custom `:HelpCurwin` command:
>
command -bar -nargs=? -complete=help HelpCurwin execute s:HelpCurwin(<q-args>)
let s:did_open_help = v:false
function s:HelpCurwin(subject) abort
let mods = 'silent noautocmd keepalt'
if !s:did_open_help
execute mods .. ' help'
execute mods .. ' helpclose'
let s:did_open_help = v:true
endif
if !getcompletion(a:subject, 'help')->empty()
execute mods .. ' edit ' .. &helpfile
endif
return 'help ' .. a:subject
endfunction
<
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2020 Dec 10
*todo.txt* For Vim version 8.2. Last change: 2021 Jan 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,34 +38,54 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
no error for:
echo extend([0], ['a', true])
like it does for:
echo extend([0], ['a'])
At script level this does not give an error:
echo map([0], (_, v) => [])
Or:
var l: list<number> = [0]
echo map(l, (_, v) => [])
Vim9 - Make everything work:
- For an :autocmd and :command argument defined in Vim9 script, if a following
line starts with "|" append it. It's like line continuation. (#6702)
- The syntax of a range list[a:b] is ambiguous, is this one "a:b" variable or
a range from "a" to "b"? To avoid confusion, require white space before
(and after) the colon? #7409
- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
- Expand `=expr` in :mkspell
- Unlet with range: "unlet list[a : b]"
- Implement "export {one, two three}".
- ISN_CHECKTYPE could use check_argtype()
- Using a script variable inside a :def function doesn't work if the variable
is inside a block, see Test_nested_function(). Should it work?
- give error for variable name:
let p = function('NoSuchFunc')
- Make closures work better:
- Create closure in a loop. Need to make a list of them.
- If a :def function is called with a function reference, compile it to get
the function type.
def Filter(x: string, Cond: func(string): bool)
Filter(x, { v -> v =~ '^b' })
- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
- Expand `=expr` in :mkspell
Filter(x, (v) => v =~ '^b')
- Make inline function work, to be used as a funcref:
let Ref = (arg: type): type => {
statement
return expr
}
let Ref = (arg: type) => {
statement
statement
}
- Does this work already: can use func as reference:
def SomeFunc() ...
map(list, SomeFunc)
- For builtin functions using tv_get_string*() use check_for_string() to be
more strict about the argument type.
- Possible memory leaks in test_vim9_func
- Implement :lockvar and :unlockvar. How about local variables? Perhaps only
allow this for global variables. Use :final or :const otherwise.
- Allow function names that will be script-local to start with lower case
letter? Or also require names with s: prefix to use upper case?
Also apply this function references "var ref = SomeFunc"
- Support passing v:none to use the default argument value. (#6504)
- Make map() give an error if the resulting type of the first argument is
wrong. Only works if the type is known? Is this slow (need to go over all
items)?
- Run the same tests in :def and Vim9 script, like in Test_expr7_not()
- Check many more builtin function arguments at compile time.
- make 0 == 'string' fail on the script level, like inside :def.
@@ -81,6 +101,7 @@ Vim9 - Make everything work:
- Using ".." at script level doesn't convert arguments to a string.
- Compile replacement of :s command: s/pat/\=expr/
- Compile redir to local variable: var_redir_start().
- Implement type cast at the script level.
- Compile builtin functions that access local variables:
islocked()
- When evaluating constants for script variables, some functions could work:
@@ -88,57 +109,59 @@ Vim9 - Make everything work:
- Implement "as Name" in "import Item as Name from ..."
- Implement using imported items at script level from "import * as X" in
eval_variable(). Should pass the ".xxx" that follows and return that.
- Disallow unlet for local/script/imported vars
- Make "++nr" work.
- Make closures work:
- Create closure in a loop. Need to make a list of them.
- nested closure only uses one context, not all (#7150)
- Make "++nr" work. "++g:count" doesn't work, thinks it is a range.
- Reload: How to make sure type of script function hasn't changed?
- expandcmd() with `=expr` in filename uses legacy expression.
- eval_expr() in ex_cexpr()
- eval_expr() call in dbg_parsearg() and debuggy_find()
Improve error checking:
- "echo Func()" is an error if Func() does not return anything.
Before launch:
- compile "skip" argument of searchpair()
- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
- give an error for "echo Func()" if Func() does not return anything.
Once Vim9 is stable:
- Change the help to prefer Vim9 syntax where appropriate
- Use Vim9 for runtime files.
PR #7497 for autoload/ccomplete.vim
- Add all the error numbers in a good place in documentation.
- In the generic eval docs, point out the Vim9 syntax where it differs.
Also:
- For range: make table of first ASCII character with flag to quickly check if
it can be a Vim9 command. E.g. "+" can, but "." can't.
Also for Vim9:
- better implementation for partial and tests for that.
- Make "g:imported = Export.exported" work in Vim9 script.
- Make Foo.Bar() work to call the dict function. (#5676)
- Error in any command in "vim9script" aborts sourcing.
- Find a way to test expressions in legacy and Vim9 script without duplication
- Test each level of expressions properly, with type checking
- Test try/catch and throw better, also nested.
Test return inside try/finally jumps to finally and then returns.
Test that return inside try/finally jumps to finally and then returns.
- Test that a function defined inside a :def function is local to that
function, g: functions can be defined and script-local functions cannot be
defined.
- implement :type
- import type declaration?
- compile options that are an expression, e.g. "expr:" in 'spellsuggest',
'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
Give an error if compilation fails. (#7625)
Use the location where the option was set for deciding whether it's to be
evaluated in Vim9 script context.
- implement :type; import type declaration.
- implement enum; import enum.
- Future work: See |vim9-classes|
- implement enum
- Make accessing varargs faster: arg[expr]
EVAL expr
LOADVARARG (varargs idx)
Define the keywords and commands to make sure it will be backwards
compatible.
- Make debugging work - at least per function. Need to recompile a function
to step through it line-by-line? Evaluate the stack and variables on the
stack?
- Make profiling work - Add ISN_PROFILE instructions after every line?
- List commands when 'verbose' is set or :verbose is used.
Further improvements:
- compile options that are an expression, e.g. "expr:" in 'spellsuggest',
'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
- Make inline function work, to be used as a funcref:
let ref = def(arg: type): rettype
body
enddef
Further Vim9 improvements, possibly after launch:
- For range: make table of first ASCII character with flag to quickly check if
it can be a Vim9 command. E.g. "+" can, but "." can't.
- compile get_lambda_tv() in popup_add_timeout()
- inline call to map() and filter()
- compile "skip" argument of searchpair()
- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
- Make accessing varargs faster: arg[expr]
EVAL expr
LOADVARARG (varargs idx)
Popup windows:
- Add a flag to make a popup window focusable?
@@ -211,6 +234,7 @@ Terminal debugger:
with another Vim instance.
Terminal emulator window:
- Can escape a terminal popup with win_gotoid(), should be an error
- No support for underline color, t_8u.
- When in terminal-Normal mode when the job finishes, the cursor jumps to the
end but the window is not updated. This only happens when typing "a".
@@ -263,6 +287,8 @@ Have another look at the implementation.
Patch to implement the vimtutor with a plugin: #6414
Was originally written by Felipe Morales.
Patch to find Python dll using registry key. (#7540)
Remove SPACE_IN_FILENAME ? It is only used for completion.
Making breakat support multibyte characters (Yasuhiro Matsumoto, #6598)
@@ -288,6 +314,18 @@ 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.
Regexp to search for duplicate lines does not work correctly:
/\(^.*\n\)\1 (Chris Morgan, #6239)
Changing a capturing group to non-capturing changes the result: #7607
:echo matchstr('aaa bbb', '\(.\{-1,}\>\)\|.*')
aaa
:echo matchstr('aaa bbb', '\%(.\{-1,}\>\)\|.*')
aaa bbb
Should also work without any group:
:echo matchstr('aaa bbb', '.\{-1,}\>\|.*')
aaa bbb (should be aaa)
Check out PR #543 (Roland Puntaier).
Patch for multibyte characters in langmap and applying a mapping on them.
(Christian Brabandt, 2015 Jun 12, update July 25)
@@ -373,9 +411,6 @@ corruption. (#6631)
When 'lazyredraw' is set sometimes the title is not updated.
(Jason Franklin, 2020 Feb 3) Looks like a race condition.
Regexp to search for duplicate lines does not work correctly:
/\(^.*\n\)\1 (Chris Morgan, #6239)
With bash ":make" does not set v:shell_error. Possible solution: set
'shellpipe' to "2>&1| tee %s; exit ${PIPESTATUS[0]}" #5994
@@ -650,6 +685,38 @@ Session file contains absolute paths when "curdir" is removed form
'sessionoptions', making it impossible to have a session with a relative path.
(#4450)
Session file only contains local option values for buffers that are in a
window, not other buffers. (#7532)
Script generated by :mksession does not work well if there are windows with
modified buffers
change "silent only" into "silent only!"
change "edit fname" of first buffer to "hide edit fname"
skip "badd fname" if "fname" is already in the buffer list
remove remark about unloading buffers from documentation
When session file has name in argument list but the buffer was deleted, the
buffer is not deleted when using the session file. (#1393)
Should add the buffer in hidden state.
When a session file is created and there are "nofile" buffers, these are not
filled. Need to trigger BufReadCmd autocommands. Also handle deleting the
initial empty buffer better. (ZyX, 2015 March 8)
Setting the spell file in a session only reads the local additions, not the
normal spell file. (Enno Nagel, 2014 Mar 29)
Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
(Felix Kater, 2009 Mar 3)
Something wrong with session that has "cd" commands and "badd", in such a way
that Vim doesn't find the edited file in the buffer list, causing the
ATTENTION message? (Tony Mechelynck, 2008 Dec 1)
Also: swap files are in ~/tmp/ One has relative file name ".mozilla/...".
'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
Likonen, March 19)
When using a timer callback vgetc_busy is reset, allowing for using input().
But in a channel callback this does not happen. We need to do something
similar to check_due_timer(). Also see #3809.
@@ -839,13 +906,6 @@ when adding a sign for every quickfix entry. (#4557)
Win32 key codes are messy. Mike Williams tried to fix that, but now old
mappings no longer work. Create a new terminal for the better solution?
Script generated by :mksession does not work well if there are windows with
modified buffers
change "silent only" into "silent only!"
change "edit fname" of first buffer to "hide edit fname"
skip "badd fname" if "fname" is already in the buffer list
remove remark about unloading buffers from documentation
Compiler warnings (geeknik, 2017 Oct 26):
- signed integer overflow in do_sub() (#2249)
- signed integer overflow in get_address() (#2248)
@@ -1107,7 +1167,7 @@ Overlong utf-8 sequence is displayed wrong. (Harm te Hennepe, 2017 Sep 14,
#2089) Patch with possible solution by Björn Linse.
The change list index is local to a buffer, but it doesn't make sense using it
for another buffer. (lacygoll) Copy w_changelistidx to wininfo_S and back.
for another buffer. (lacygoill) Copy w_changelistidx to wininfo_S and back.
X11: Putting more than about 262040 characters of text on the clipboard and
pasting it in another Vim doesn't work. (Dominique Pelle, 2008 Aug 21-23)
@@ -1214,10 +1274,6 @@ Json string with trailing \u should be an error. (Lcd)
import can't be used in define option when include matches too.
(Romain Lafourcade, 2017 Jun 18, #1519)
When session file has name in argument list but the buffer was deleted, the
buffer is not deleted when using the session file. (#1393)
Should add the buffer in hidden state.
Wrong diff highlighting with three files. (2016 Oct 20, #1186)
Also get E749 on exit.
Another example in #1309
@@ -1273,9 +1329,6 @@ Once .exe with updated installer is available: Add remark to download page
about /S and /D options (Ken Takata, 2016 Apr 13)
Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases
Problem passing non-UTF-8 strings to Python 3. (Björn Linse, 2016 Sep 11,
#1053) With patch, does it work?
":sbr" docs state it respects 'switchbuf', but "vsplit" does not cause a
vertical split. (Haldean Brown, 2017 Mar 1)
@@ -1679,10 +1732,6 @@ Doesn't work completely (Dominique Orban)
Patch to add a "literal" argument to bufnr(). (Olaf Dabrunz, 2015 Aug 4)
When a session file is created and there are "nofile" buffers, these are not
filled. Need to trigger BufReadCmd autocommands. Also handle deleting the
initial empty buffer better. (ZyX, 2015 March 8)
Extended file attributes lost on write (backupcopy=no). Issue 306.
Patch to add :lockjumps. (Carlo Baldassi, 2015 May 25)
@@ -1811,9 +1860,6 @@ Out of scope:
- Development work on plugins (although diff with distributed version would be
useful).
Setting the spell file in a session only reads the local additions, not the
normal spell file. (Enno Nagel, 2014 Mar 29)
When typing the first character of a command, e.g. "f", then using a menu, the
menu item doesn't work. Clear typeahead when using a menu?
@@ -2462,9 +2508,6 @@ opening/closing window causes other window with 'winfixheight' to change
height. Also happens when there is another window in the frame, if it's not
very high. (Yegappan Lakshmanan, 2010 Jul 22, Michael Peeters, 2010 Jul 22)
Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
(Felix Kater, 2009 Mar 3)
Session file generates error upon loading, cause by --remote-silent-tab.
(7tommm (ytommm) 2010 Nov 24)
@@ -2524,11 +2567,6 @@ still delete them. Also convert all buffer file names?
"gqip" in Insert mode has an off-by-one error, causing it to reflow text.
(Raul Coronado, 2009 Nov 2)
Something wrong with session that has "cd" commands and "badd", in such a way
that Vim doesn't find the edited file in the buffer list, causing the
ATTENTION message? (Tony Mechelynck, 2008 Dec 1)
Also: swap files are in ~/tmp/ One has relative file name ".mozilla/...".
MS-Windows: editing the first, empty buffer, 'ffs' set to "unix,dos", ":enew"
doesn't set 'ff' to "unix". (Ben Fritz, 2008 Dec 5) Reusing the old buffer
probably causes this.
@@ -2725,9 +2763,6 @@ New PHP syntax file, use it? (Peter Hodge)
":echoe" in catch block stops processing, while this doesn't happen outside of
a catch block. (ZyX, 2011 Jun 2)
'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
Likonen, March 19)
Test 54 uses shell commands, that doesn't work on non-Unix systems. Use some
other way to test buffer-local autocommands.
@@ -3998,8 +4033,6 @@ Documentation:
- if it can be undone (u/CTRL-R) and redone (.)
- how it works for folded lines
- how it works with multibyte characters
9 In change.txt, remark about Javadoc isn't right. Right alignment would
work too.
8 Spread the windows commands over the other files. For example, ":stag"
should be with ":tag". Cross-link with tags to avoid too much double
text.
@@ -5456,7 +5489,7 @@ Mappings and Abbreviations:
not the <Space>.
8 Give a warning when using CTRL-C in the lhs of a mapping. It will never
(?) work.
7 Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
7 Add <0x8f> (hex), <0o33> (octal) and <123> (decimal) to <> notation?
7 When someone tries to unmap with a trailing space, and it fails, try
unmapping without the trailing space. Helps for ":unmap xx | unmap yy".
6 Context-sensitive abbreviations: Specify syntax group(s) in which the

View File

@@ -50,7 +50,7 @@ which moves to the previous end of a word:
This is a line with example text ~
<----<----x---->------------>
2ge ge e we
2ge ge e 2e
If you are at the last word of a line, the "w" command will take you to the
first word in the next line. Thus you can use this to move through a

View File

@@ -1,4 +1,4 @@
*usr_23.txt* For Vim version 8.2. Last change: 2006 Apr 24
*usr_23.txt* For Vim version 8.2. Last change: 2020 Dec 19
VIM USER MANUAL - by Bram Moolenaar
@@ -28,9 +28,9 @@ start a new line. One to move the carriage back to the first position
(carriage return, <CR>), another to move the paper up (line feed, <LF>).
When computers came out, storage was expensive. Some people decided that
they did not need two characters for end-of-line. The UNIX people decided
they could use <Line Feed> only for end-of-line. The Apple people
standardized on <CR>. The Microsoft Windows folks decided to keep
the old <CR><LF>.
they could use <New Line> or <NL> only for end-of-line. The Apple people
standardized on <CR>. The Microsoft Windows folks decided to keep the old
<CR><NL> (we use <NL> for line feed in the help text).
This means that if you try to move a file from one system to another, you
have line-break problems. The Vim editor automatically recognizes the
different file formats and handles things properly behind your back.
@@ -55,20 +55,20 @@ which format you have, execute the following command: >
The three names that Vim uses are:
unix <LF>
dos <CR><LF>
unix <NL>
dos <CR><NL>
mac <CR>
USING THE MAC FORMAT
On Unix, <LF> is used to break a line. It's not unusual to have a <CR>
On Unix, <NL> is used to break a line. It's not unusual to have a <CR>
character halfway a line. Incidentally, this happens quite often in Vi (and
Vim) scripts.
On the Macintosh, where <CR> is the line break character, it's possible to
have a <LF> character halfway a line.
have a <NL> character halfway a line.
The result is that it's not possible to be 100% sure whether a file
containing both <CR> and <LF> characters is a Mac or a Unix file. Therefore,
containing both <CR> and <NL> characters is a Mac or a Unix file. Therefore,
Vim assumes that on Unix you probably won't edit a Mac file, and doesn't check
for this type of file. To check for this format anyway, add "mac" to
'fileformats': >

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 8.2. Last change: 2020 Nov 09
*usr_41.txt* For Vim version 8.2. Last change: 2021 Jan 08
VIM USER MANUAL - by Bram Moolenaar
@@ -122,14 +122,14 @@ starts with a zero. "017" is decimal 15. A binary number starts with "0b" or
decimal number, it will be interpreted as an octal number!
The ":echo" command always prints decimal numbers. Example: >
:echo 0x7f 036
:echo 0x7f 0o36
< 127 30 ~
A number is made negative with a minus sign. This also works for hexadecimal,
octal and binary numbers. A minus sign is also used for subtraction. Compare
this with the previous example: >
:echo 0x7f -036
:echo 0x7f -0o36
< 97 ~
White space in an expression is ignored. However, it's recommended to use it
@@ -137,7 +137,7 @@ for separating items, to make the expression easier to read. For example, to
avoid the confusion with a negative number above, put a space between the
minus sign and the following number: >
:echo 0x7f - 036
:echo 0x7f - 0o36
==============================================================================
*41.2* Variables
@@ -625,6 +625,7 @@ String manipulation: *string-functions*
iconv() convert text from one encoding to another
byteidx() byte index of a character in a string
byteidxcomp() like byteidx() but count composing characters
charidx() character index of a byte in a string
repeat() repeat a string multiple times
eval() evaluate a string expression
execute() execute an Ex command and get the output
@@ -752,6 +753,11 @@ Cursor and mark position: *cursor-functions* *mark-functions*
screenchar() get character code at a screen line/row
screenchars() get character codes at a screen line/row
screenstring() get string of characters at a screen line/row
charcol() character number of the cursor or a mark
getcharpos() get character position of cursor, mark, etc.
setcharpos() set character position of cursor, mark, etc.
getcursorcharpos() get character position of the cursor
setcursorcharpos() set character position of the cursor
Working with text in the current buffer: *text-functions*
getline() get a line or list of lines from the buffer
@@ -1765,7 +1771,7 @@ Here is a summary of items that apply to Vim scripts. They are also mentioned
elsewhere, but form a nice checklist.
The end-of-line character depends on the system. For Unix a single <NL>
character is used. For MS-Windows and the like, <CR><LF> is used. This is
character is used. For MS-Windows and the like, <CR><NL> is used. This is
important when using mappings that end in a <CR>. See |:source_crnl|.

View File

@@ -1,4 +1,4 @@
*version5.txt* For Vim version 8.2. Last change: 2020 Sep 02
*version5.txt* For Vim version 8.2. Last change: 2020 Dec 19
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -805,7 +805,7 @@ Using "~" for $HOME now works for all systems. |$HOME|
Unix: Besides using CTRL-C, also use the INTR character from the tty settings.
Somebody has INTR set to DEL.
Allow a <LF> in a ":help" command argument to end the help command, so another
Allow a <NL> in a ":help" command argument to end the help command, so another
command can follow.
Doing "%" on a line that starts with " #if" didn't jump to matching "#else".

View File

@@ -1,4 +1,4 @@
*version8.txt* For Vim version 8.2. Last change: 2020 Oct 25
*version8.txt* For Vim version 8.2. Last change: 2020 Dec 24
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3282,7 +3282,7 @@ Solution: Convert the printer name from the active codepage to 'encoding'.
Files: src/os_mswin.c
Patch 7.4.472
Problem: The "precedes" entry in 'listchar' will be drawn when 'showbreak'
Problem: The "precedes" entry in 'listchars' will be drawn when 'showbreak'
is set and 'list' is not.
Solution: Only draw this character when 'list' is on. (Christian Brabandt)
Files: src/screen.c
@@ -35835,7 +35835,7 @@ Files: src/ex_cmds2.c, src/getchar.c, src/testdir/test_mapping.vim,
Patch 8.1.1592
Problem: May start file dialog while exiting.
Solution: Ignore the "browse" modifier when exiting. (Ozaki Kiichi,
closes #4582
closes #4582)
Files: src/ex_cmds.c, src/terminal.c
Patch 8.1.1593
@@ -46431,7 +46431,7 @@ Files: src/buffer.c, src/change.c, src/diff.c, src/evalbuffer.c,
Patch 8.2.0854
Problem: Xxd cannot show offset as a decimal number.
Solution: Add the "-d" flag. (Aapo Rantalainen, closes #5616
Solution: Add the "-d" flag. (Aapo Rantalainen, closes #5616)
Files: src/testdir/test_xxd.vim, src/xxd/xxd.c
Patch 8.2.0855
@@ -46661,7 +46661,7 @@ Solution: Use // comments. (Yegappan Lakshmanan, closes #6190)
Files: src/gui_xim.c
Patch 8.2.0890
Problem: No color in terminal window when 'termguicolor' is set.
Problem: No color in terminal window when 'termguicolors' is set.
Solution: Clear the underline color. (closes #6186)
Files: src/highlight.c
@@ -46728,7 +46728,7 @@ Files: runtime/doc/change.txt, src/mbyte.c, src/ops.c, src/option.h,
Patch 8.2.0902
Problem: Using searchcount() in 'statusline' causes an error.
Solution: Avoid saving/restoring the search patten recursively.
Solution: Avoid saving/restoring the search pattern recursively.
(closes #6194)
Files: src/search.c, src/testdir/test_search_stat.vim,
src/testdir/dumps/Test_searchstat_4.dump
@@ -48832,7 +48832,7 @@ Files: src/buffer.c, src/testdir/test_tabline.vim
Patch 8.2.1260
Problem: There is no good test for CursorHold.
Solution: Add a test. Remove duplicated test. (Yegappan Lakshmanan,
closes #6503
closes #6503)
Files: src/testdir/test_autocmd.vim, src/testdir/test_buffer.vim,
src/testdir/test_normal.vim

View File

@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2020 Dec 05
*vim9.txt* For Vim version 8.2. Last change: 2021 Jan 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6,7 +6,7 @@
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
Vim9 script commands and expressions. *vim9*
Vim9 script commands and expressions. *Vim9* *vim9*
Most expression help is in |eval.txt|. This file is about the new syntax and
features in Vim9 script.
@@ -14,7 +14,7 @@ features in Vim9 script.
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
1. What is Vim9 script? |vim9-script|
1. What is Vim9 script? |Vim9-script|
2. Differences |vim9-differences|
3. New style functions |fast-functions|
4. Types |vim9-types|
@@ -25,7 +25,7 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
==============================================================================
1. What is Vim9 script? *vim9-script*
1. What is Vim9 script? *Vim9-script*
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
@@ -52,8 +52,9 @@ The Vim9 script syntax and semantics are used in:
- a script file where the first command is `vim9script`
- an autocommand defined in the context of the above
When using `:function` in a Vim9 script file the legacy syntax is used.
However, this can be confusing and is therefore discouraged.
When using `:function` in a Vim9 script file the legacy syntax is used, with
the highest |scriptversion|. However, this can be confusing and is therefore
discouraged.
Vim9 script and legacy Vim script can be mixed. There is no requirement to
rewrite old scripts, they keep working as before. You may want to use a few
@@ -70,28 +71,29 @@ Overview ~
Brief summary of the differences you will most often encounter when using Vim9
script and `:def` functions; details are below:
- Comments start with #, not ": >
echo "hello" # comment
echo "hello" # comment
- Using a backslash for line continuation is hardly ever needed: >
echo "hello "
echo "hello "
.. yourName
.. ", how are you?"
- White space is required in many places.
- Assign values without `:let`, declare variables with `:var`: >
var count = 0
var count = 0
count += 3
- Constants can be declared with `:final` and `:const`: >
final matches = [] # add matches
final matches = [] # add matches
const names = ['Betty', 'Peter'] # cannot be changed
- `:final` cannot be used as an abbreviation of `:finally`.
- Variables and functions are script-local by default.
- Functions are declared with argument types and return type: >
def CallMe(count: number, message: string): bool
- Call functions without `:call`: >
writefile(['done'], 'file.txt')
writefile(['done'], 'file.txt')
- You cannot use `:xit`, `:t`, `:append`, `:change`, `:insert` or curly-braces
names.
- A range before a command must be prefixed with a colon: >
:%s/this/that
:%s/this/that
- Unless mentioned specifically, the highest |scriptversion| is used.
Comments starting with # ~
@@ -112,7 +114,13 @@ In Vi # is a command to list text with numbers. In Vim9 script you can use
101 number
To improve readability there must be a space between a command and the #
that starts a comment.
that starts a comment: >
var name = value # comment
var name = value# error!
In legacy Vim script # is also used for the alternate file name. In Vim9
script you need to use %% instead. Instead of ## use %%% (stands for all
arguments).
Vim9 functions ~
@@ -134,7 +142,7 @@ Compilation is done when either of these is encountered:
`:def` has no options like `:function` does: "range", "abort", "dict" or
"closure". A `:def` function always aborts on an error (unless `:silent!` was
used for the command or inside a `:try` block), does not get a range passed
and cannot be a "dict" function.
cannot be a "dict" function, and can always be a closure.
The argument types and return type need to be specified. The "any" type can
be used, type checking will then be done at runtime, like with legacy
@@ -187,6 +195,33 @@ Global functions can still be defined and deleted at nearly any time. In
Vim9 script script-local functions are defined once when the script is sourced
and cannot be deleted or replaced.
When compiling a function and a function call is encountered for a function
that is not (yet) defined, the |FuncUndefined| autocommand is not triggered.
You can use an autoload function if needed, or call a legacy function and have
|FuncUndefined| triggered there.
Reloading a Vim9 script clears functions and variables by default ~
*vim9-reload*
When loading a legacy Vim script a second time nothing is removed, the
commands will replace existing variables and functions and create new ones.
When loading a Vim9 script a second time all existing script-local functions
and variables are deleted, thus you start with a clean slate. This is useful
if you are developing a plugin and want to try a new version. If you renamed
something you don't have to worry about the old name still hanging around.
If you do want to keep items, use: >
vim9script noclear
You want to use this in scripts that use a `finish` command to bail out at
some point when loaded again. E.g. when a buffer local option is set: >
vim9script noclear
setlocal completefunc=SomeFunc
if exists('*g:SomeFunc') | finish | endif
def g:SomeFunc()
....
Variable declarations with :var, :final and :const ~
*vim9-declaration* *:var*
@@ -282,7 +317,7 @@ The constant only applies to the value itself, not what it refers to. >
NAMES[0] = ["Jack"] # Error!
NAMES[0][0] = "Jack" # Error!
NAMES[1] = ["Emma"] # Error!
Names[1][0] = "Emma" # OK, now females[0] == "Emma"
NAMES[1][0] = "Emma" # OK, now females[0] == "Emma"
< *E1092*
Declaring more than one variable at a time, using the unpack notation, is
@@ -335,11 +370,49 @@ When using `function()` the resulting type is "func", a function with any
number of arguments and any return type. The function can be defined later.
Lambda using => instead of -> ~
In legacy script there can be confusion between using "->" for a method call
and for a lambda. Also, when a "{" is found the parser needs to figure out if
it is the start of a lambda or a dictionary, which is now more complicated
because of the use of argument types.
To avoid these problems Vim9 script uses a different syntax for a lambda,
which is similar to Javascript: >
var Lambda = (arg) => expression
No line break is allowed in the arguments of a lambda up to and including the
"=>". This is OK: >
filter(list, (k, v) =>
v > 0)
This does not work: >
filter(list, (k, v)
=> v > 0)
This also does not work: >
filter(list, (k,
v) => v > 0)
But you can use a backslash to concatenate the lines before parsing: >
filter(list, (k,
\ v)
\ => v > 0)
Additionally, a lambda can contain statements in {}: >
var Lambda = (arg) => {
g:was_called = 'yes'
return expression
}
NOT IMPLEMENTED YET
To avoid the "{" of a dictionary literal to be recognized as a statement block
wrap it in parenthesis: >
var Lambda = (arg) => ({key: 42})
Automatic line continuation ~
In many cases it is obvious that an expression continues on the next line. In
those cases there is no need to prefix the line with a backslash
|line-continuation|. For example, when a list spans multiple lines: >
those cases there is no need to prefix the line with a backslash (see
|line-continuation|). For example, when a list spans multiple lines: >
var mylist = [
'one',
'two',
@@ -361,7 +434,7 @@ possible just before or after the operator. For example: >
.. middle
.. end
var total = start +
end -
end -
correction
var result = positive
? PosFunc(arg)
@@ -376,6 +449,12 @@ before it: >
var result = MyDict
.member
For commands that have an argument that is a list of commands, the | character
at the start of the line indicates line continuation: >
autocmd BufNewFile *.match if condition
| echo 'match'
| endif
< *E1050*
To make it possible for the operator at the start of the line to be
recognized, it is required to put a colon before a range. This will add
@@ -399,6 +478,16 @@ arguments: >
separator = '-'
): string
Since a continuation line cannot be easily recognized the parsing of commands
has been made stricter. E.g., because of the error in the first line, the
second line is seen as a separate command: >
popup_create(some invalid expression, {
exit_cb: Func})
Now "exit_cb: Func})" is actually a valid command: save any changes to the
file "_cb: Func})" and exit. To avoid this kind of mistake in Vim9 script
there must be white space between most command names and the argument.
Notes:
- "enddef" cannot be used at the start of a continuation line, it ends the
current function.
@@ -418,14 +507,6 @@ Notes:
< This does not work: >
echo [1, 2]
[3, 4]
- No line break is allowed in the arguments of a lambda, between the "{" and
"->". This is OK: >
filter(list, {k, v ->
v > 0})
< This does not work: >
filter(list, {k,
v -> v > 0})
No curly braces expansion ~
@@ -486,6 +567,13 @@ command: >
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[:] # make a copy of the List
otherlist = mylist[v :]
otherlist = mylist[: v]
White space is not allowed:
- Between a function name and the "(": >
call Func (arg) # Error!
@@ -516,7 +604,7 @@ is either falsy or truthy. This is mostly like JavaScript, except that an
empty list and dict is falsy:
type truthy when ~
bool v:true or 1
bool true, v:true or 1
number non-zero
float non-zero
string non-empty
@@ -524,11 +612,11 @@ empty list and dict is falsy:
list non-empty (different from JavaScript)
dictionary non-empty (different from JavaScript)
func when there is a function name
special v:true
special true or v:true
job when not NULL
channel when not NULL
class when not NULL
object when not NULL (TODO: when isTrue() returns v:true)
object when not NULL (TODO: when isTrue() returns true)
The boolean operators "||" and "&&" expect the values to be boolean, zero or
one: >
@@ -543,25 +631,36 @@ one: >
When using "!" for inverting, there is no error for using any type and the
result is a boolean. "!!" can be used to turn any value into boolean: >
!'yes' == false
!'yes' == false
!![] == false
!![1, 2, 3] == true
!![1, 2, 3] == true
When using "`.."` for string concatenation arguments of simple types are
always converted to string: >
'hello ' .. 123 == 'hello 123'
'hello ' .. v:true == 'hello v:true'
'hello ' .. v:true == 'hello true'
Simple types are string, float, special and bool. For other types |string()|
can be used.
*false* *true*
In Vim9 script one can use "true" for v:true and "false" for v:false.
*false* *true* *null*
In Vim9 script one can use "true" for v:true, "false" for v:false and "null"
for v:null. When converting a boolean to a string "false" and "true" are
used, not "v:false" and "v:true" like in legacy script. "v:none" is not
changed, it is only used in JSON and has no equivalent in other languages.
Indexing a string with [idx] or [idx, idx] uses character indexes instead of
byte indexes. Example: >
echo 'bár'[1]
In legacy script this results in the character 0xc3 (an illegal byte), in Vim9
script this results in the string 'á'.
A negative index is counting from the end, "[-1]" is the last character.
If the index is out of range then an empty string results.
In legacy script "++var" and "--var" would be silently accepted and have no
effect. This is an error in Vim9 script.
Numbers starting with zero are not considered to be octal, only numbers
starting with "0o" are octal: "0o744". |scriptversion-4|
What to watch out for ~
@@ -600,7 +699,7 @@ Vim9 functions are compiled as a whole: >
if !has('feature')
return
endif
use-feature # May give compilation error
use-feature # May give a compilation error
enddef
For a workaround, split it in two functions: >
func Maybe()
@@ -620,12 +719,38 @@ evaluates to false: >
use-feature
endif
enddef
< *vim9-user-command*
Another side effect of compiling a function is that the precense of a user
command is checked at compile time. If the user command is defined later an
error will result. This works: >
command -nargs=1 MyCommand echom <q-args>
def Works()
MyCommand 123
enddef
This will give an error for "MyCommand" not being defined: >
def Works()
command -nargs=1 MyCommand echom <q-args>
MyCommand 123
enddef
A workaround is to invoke the command indirectly with `:execute`: >
def Works()
command -nargs=1 MyCommand echom <q-args>
execute 'MyCommand 123'
enddef
Note that for unrecognized commands there is no check for "|" and a following
command. This will give an error for missing `endif`: >
def Maybe()
if has('feature') | use-feature | endif
enddef
Other differences ~
Patterns are used like 'magic' is set, unless explicitly overruled.
The 'edcompatible' option value is not used.
The 'gdefault' option value is not used.
==============================================================================
3. New style functions *fast-functions*
@@ -689,18 +814,24 @@ prefix and they do not need to exist (they can be deleted any time).
Limitations ~
Local variables will not be visible to string evaluation. For example: >
def EvalString(): list<string>
def MapList(): list<string>
var list = ['aa', 'bb', 'cc', 'dd']
return range(1, 2)->map('list[v:val]')
enddef
The map argument is a string expression, which is evaluated without the
function scope. Instead, use a lambda: >
def EvalString(): list<string>
def MapList(): list<string>
var list = ['aa', 'bb', 'cc', 'dd']
return range(1, 2)->map({ _, v -> list[v] })
return range(1, 2)->map(( _, v) => list[v])
enddef
The same is true for commands that are not compiled, such as `:global`.
For these the backtick expansion can be used. Example: >
def Replace()
var newText = 'blah'
g/pattern/s/^/`=newText`/
enddef
==============================================================================
@@ -795,12 +926,14 @@ compiled code the "any" type is assumed.
This can be a problem when the "any" type is undesired and the actual type is
expected to always be the same. For example, when declaring a list: >
var l: list<number> = [1, g:two]
This will give an error, because "g:two" has type "any". To avoid this, use a
type cast: >
At compile time Vim doesn't know the type of "g:two" and the expression type
becomes list<any>. An instruction is generated to check the list type before
doing the assignment, which is a bit inefficient.
*type-casting*
To avoid this, use a type cast: >
var l: list<number> = [1, <number>g:two]
< *type-casting*
The compiled code will then check that "g:two" is a number at runtime and give
an error if it isn't. This is called type casting.
The compiled code will then only check that "g:two" is a number and give an
error if it isn't. This is called type casting.
The syntax of a type cast is: "<" {type} ">". There cannot be white space
after the "<" or before the ">" (to avoid them being confused with
@@ -842,6 +975,12 @@ an error, thus breaking backwards compatibility. For example:
- Using a string value when setting a number options.
- Using a number where a string is expected. *E1024*
One consequence is that the item type of a list or dict given to map() must
not change. This will give an error in compiled code: >
map([1, 2, 3], (i, v) => 'item ' .. i)
E1012: Type mismatch; expected list<number> but got list<string>
Instead use |mapnew()|.
==============================================================================
5. Namespace, Import and Export
@@ -858,7 +997,7 @@ that you don't do that.
Namespace ~
*:vim9script* *:vim9*
*vim9-namespace*
To recognize a file that can be imported the `vim9script` statement must
appear as the first statement in the file. It tells Vim to interpret the
script in its own namespace, instead of the global namespace. If a file
@@ -951,14 +1090,14 @@ actually needed. A recommended mechanism:
1. In the plugin define user commands, functions and/or mappings that refer to
an autoload script. >
command -nargs=1 SearchForStuff call searchfor#Stuff(<f-args>)
command -nargs=1 SearchForStuff call searchfor#Stuff(<f-args>)
< This goes in .../plugin/anyname.vim. "anyname.vim" can be freely chosen.
2. In the autoload script do the actual work. You can import items from
other files to split up functionality in appropriate pieces. >
vim9script
import FilterFunc from "../import/someother.vim"
import FilterFunc from "../import/someother.vim"
def searchfor#Stuff(arg: string)
var filtered = FilterFunc(arg)
...

View File

@@ -1,4 +1,4 @@
*windows.txt* For Vim version 8.2. Last change: 2020 Nov 07
*windows.txt* For Vim version 8.2. Last change: 2020 Dec 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -205,11 +205,6 @@ CTRL-W CTRL_N *CTRL-W_CTRL-N*
This behaves like a ":split" first, and then an ":enew"
command.
:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
Like |:new|, but split vertically. If 'equalalways' is set
and 'eadirection' isn't "ver" the windows will be spread out
horizontally, unless a width was specified.
:[N]new [++opt] [+cmd] {file}
:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Create a new window and start editing file {file} in it. This
@@ -221,6 +216,11 @@ CTRL-W CTRL_N *CTRL-W_CTRL-N*
height). Reduces the current window height to create room
(and others, if the 'equalalways' option is set).
:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
Like |:new|, but split vertically. If 'equalalways' is set
and 'eadirection' isn't "ver" the windows will be spread out
horizontally, unless a width was specified.
:[N]sv[iew] [++opt] [+cmd] [file] *:sv* *:sview* *splitview*
Same as ":split", but set 'readonly' option for this buffer.

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Dec 07
" Last Change: 2020 Dec 24
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -499,6 +499,9 @@ au BufNewFile,BufRead *.com call dist#ft#BindzoneCheck('dcl')
" DOT
au BufNewFile,BufRead *.dot,*.gv setf dot
" Dune
au BufNewFile,BufRead jbuild,dune,dune-project,dune-workspace setf dune
" Dylan - lid files
au BufNewFile,BufRead *.lid setf dylanlid
@@ -627,6 +630,9 @@ au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
" Gedcom
au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
" Gift (Moodle)
autocmd BufRead,BufNewFile *.gift setf gift
" Git
au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig setf gitconfig
@@ -1122,8 +1128,8 @@ au BufNewFile,BufRead *.nse setf lua
" NSIS
au BufNewFile,BufRead *.nsi,*.nsh setf nsis
" OCAML
au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit setf ocaml
" OCaml
au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit,*.mlt,*.mlp,*.mlip,*.mli.cppo,*.ml.cppo setf ocaml
" Occam
au BufNewFile,BufRead *.occ setf occam
@@ -1131,6 +1137,9 @@ au BufNewFile,BufRead *.occ setf occam
" Omnimark
au BufNewFile,BufRead *.xom,*.xin setf omnimark
" OPAM
au BufNewFile,BufRead opam,*.opam,*.opam.template setf opam
" OpenROAD
au BufNewFile,BufRead *.or setf openroad
@@ -1544,6 +1553,9 @@ au BufNewFile,BufRead *.scm,*.ss,*.rkt setf scheme
" Screen RC
au BufNewFile,BufRead .screenrc,screenrc setf screen
" Sexplib
au BufNewFile,BufRead *.sexp setf sexplib
" Simula
au BufNewFile,BufRead *.sim setf simula

View File

@@ -2,7 +2,7 @@
" Language: CSS
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2008-07-09
" Last Change: 2020 Dec 21
if exists("b:did_ftplugin")
finish
@@ -12,11 +12,12 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
let b:undo_ftplugin = "setl com< cms< inc< fo< ofu<"
let b:undo_ftplugin = "setl com< cms< inc< fo< ofu< isk<"
setlocal comments=s1:/*,mb:*,ex:*/ commentstring&
setlocal formatoptions-=t formatoptions+=croql
setlocal omnifunc=csscomplete#CompleteCSS
setlocal iskeyword+=-
let &l:include = '^\s*@import\s\+\%(url(\)\='

View File

@@ -1,7 +1,7 @@
" Language: Dune buildsystem
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" Anton Kochkov <anton.kochkov@gmail.com>
" URL: https://github.com/rgrinberg/vim-ocaml
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2018 Nov 3 - Added commentstring (Markus Mottl)
" 2017 Sep 6 - Initial version (Etienne Millon)

View File

@@ -1,87 +1,83 @@
" Vim ftplugin file
" Language: Erlang
" Language: Erlang (http://www.erlang.org)
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
" Author: Oscar Hellström <oscar@oscarh.net>
" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
" Eduardo Lopez (http://github.com/tapichu)
" Arvid Bjurklint (http://github.com/slarwise)
" Last Update: 2021-Jan-08
" License: Vim license
" Version: 2012/01/25
" URL: https://github.com/vim-erlang/vim-erlang-runtime
if exists('b:did_ftplugin')
finish
else
let b:did_ftplugin = 1
endif
if exists('s:did_function_definitions')
call s:SetErlangOptions()
finish
else
let s:did_function_definitions = 1
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
if !exists('g:erlang_keywordprg')
let g:erlang_keywordprg = 'erl -man'
let &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man')
if get(g:, 'erlang_folding', 0)
setlocal foldmethod=expr
setlocal foldexpr=GetErlangFold(v:lnum)
setlocal foldtext=ErlangFoldText()
endif
if !exists('g:erlang_folding')
let g:erlang_folding = 0
endif
setlocal comments=:%%%,:%%,:%
setlocal commentstring=%%s
setlocal formatoptions+=ro
setlocal suffixesadd=.erl,.hrl
let &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")'
let &l:define = '^\s*-\%(define\|record\|type\|opaque\)'
let s:erlang_fun_begin = '^\a\w*(.*$'
let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
function s:SetErlangOptions()
if g:erlang_folding
setlocal foldmethod=expr
setlocal foldexpr=GetErlangFold(v:lnum)
setlocal foldtext=ErlangFoldText()
endif
if !exists('*GetErlangFold')
function GetErlangFold(lnum)
let lnum = a:lnum
let line = getline(lnum)
setlocal comments=:%%%,:%%,:%
setlocal commentstring=%%s
if line =~ s:erlang_fun_end
return '<1'
endif
setlocal formatoptions+=ro
let &l:keywordprg = g:erlang_keywordprg
endfunction
if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
return '1'
endif
function GetErlangFold(lnum)
let lnum = a:lnum
let line = getline(lnum)
if line =~ s:erlang_fun_begin
return '>1'
endif
if line =~ s:erlang_fun_end
return '<1'
endif
return '='
endfunction
endif
if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
return '1'
endif
if !exists('*ErlangFoldText')
function ErlangFoldText()
let line = getline(v:foldstart)
let foldlen = v:foldend - v:foldstart + 1
let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
if foldlen < 10
let lines = ' ' . lines
endif
let retval = '+' . v:folddashes . lines
if line =~ s:erlang_fun_begin
return '>1'
endif
return retval
endfunction
endif
return '='
endfunction
function ErlangFoldText()
let line = getline(v:foldstart)
let foldlen = v:foldend - v:foldstart + 1
let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
if foldlen < 10
let lines = ' ' . lines
endif
let retval = '+' . v:folddashes . lines
return retval
endfunction
call s:SetErlangOptions()
let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<"
\ . " comments< commentstring< formatoptions<"
let b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<"
\ . " comments< commentstring< formatoptions< suffixesadd< include<"
\ . " define<"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: sw=2 et

View File

@@ -0,0 +1,19 @@
" Vim ftplugin file
" Language: fstab file
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
" URL: https://raw.github.com/rid9/vim-fstab/master/ftplugin/fstab.vim
" Last Change: 2021 Jan 02
" Version: 1.0
"
" Credits:
" Subhaditya Nath <sn03.general@gmail.com>
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
setlocal commentstring=#%s
let b:undo_ftplugin = "setlocal commentstring<"
" vim: ts=8 ft=vim

View File

@@ -5,7 +5,7 @@
" Pierre Vittet <pierre-vittet@pvittet.com>
" Stefano Zacchiroli <zack@bononia.it>
" Vincent Aravantinos <firstname.name@imag.fr>
" URL: https://github.com/rgrinberg/vim-ocaml
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2013 Oct 27 - Added commentstring (MM)
" 2013 Jul 26 - load default compiler settings (MM)
@@ -38,7 +38,8 @@ let s:cposet=&cpoptions
set cpo&vim
" Comment string
setlocal comments=
setlocal comments=sr:(*\ ,mb:\ ,ex:*)
setlocal comments^=sr:(**,mb:\ \ ,ex:*)
setlocal commentstring=(*%s*)
" Add mappings, unless the user didn't want this.
@@ -391,9 +392,9 @@ endfunction
endif
endfun
" This variable contain a dictionnary of list. Each element of the dictionnary
" represent an annotation system. An annotation system is a list with :
" - annotation file name as it's key
" This variable contains a dictionary of lists. Each element of the dictionary
" represents an annotation system. An annotation system is a list with:
" - annotation file name as its key
" - annotation file path as first element of the contained list
" - build path as second element of the contained list
" - annot_file_last_mod (contain the date of .annot file) as third element
@@ -521,7 +522,7 @@ endfunction
"c. link this stuff with what the user wants
" ie. get the expression selected/under the cursor
let s:ocaml_word_char = '\w|[À-ÿ]|'''
let s:ocaml_word_char = '\w|[\xc0-\xff]|'''
"In: the current mode (eg. "visual", "normal", etc.)
"Out: the borders of the expression we are looking for the type

View File

@@ -0,0 +1,15 @@
" Vim filetype plugin file
" Language: Sexplib
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2017 Apr 12 - First version (MM)
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin=1
" Comment string
setl commentstring=;\ %s
setl comments=:;

View File

@@ -73,23 +73,23 @@ if !exists("*s:SpecChangelog")
let chgline = -1
while (line <= line("$"))
let linestr = getline(line)
if (name == "" && linestr =~? '^Name:')
if name == "" && linestr =~? '^Name:'
let nameline = line
let name = substitute(strpart(linestr,5), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
elseif (ver == "" && linestr =~? '^Version:')
elseif ver == "" && linestr =~? '^Version:'
let verline = line
let ver = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
elseif (rel == "" && linestr =~? '^Release:')
elseif rel == "" && linestr =~? '^Release:'
let relline = line
let rel = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
elseif (linestr =~? '^%changelog')
elseif linestr =~? '^%changelog'
let chgline = line
execute line
break
endif
let line = line+1
endwhile
if (nameline != -1 && verline != -1 && relline != -1)
if nameline != -1 && verline != -1 && relline != -1
let include_release_info = exists("g:spec_chglog_release_info")
let name = s:ParseRpmVars(name, nameline)
let ver = s:ParseRpmVars(ver, verline)
@@ -100,20 +100,20 @@ if !exists("*s:SpecChangelog")
call s:GetRelVer()
if (chgline == -1)
if chgline == -1
let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3)
if (option == 1)
if option == 1
call append(line("$"),"")
call append(line("$"),"%changelog")
execute line("$")
let chgline = line(".")
elseif (option == 2)
elseif option == 2
call append(line("."),"%changelog")
normal j
chgline = line(".")
let chgline = line(".")
endif
endif
if (chgline != -1)
if chgline != -1
let tmptime = v:lc_time
language time C
let parsed_format = "* ".strftime(format)." - ".ver."-".rel
@@ -122,16 +122,16 @@ if !exists("*s:SpecChangelog")
let wrong_format = 0
let wrong_release = 0
let insert_line = 0
if (getline(chgline+1) != parsed_format)
if getline(chgline+1) != parsed_format
let wrong_format = 1
endif
if (include_release_info && getline(chgline+2) != release_info)
if include_release_info && getline(chgline+2) != release_info
let wrong_release = 1
endif
if (wrong_format || wrong_release)
if (include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release"))
if wrong_format || wrong_release
if include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release")
let option = confirm("Increase release? ","&Yes\n&No",1)
if (option == 1)
if option == 1
execute relline
normal 
let rel = substitute(strpart(getline(relline),8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
@@ -171,13 +171,13 @@ if !exists("*s:ParseRpmVars")
let ret = ""
while (1)
let start = match(a:str, "\%{", end+1)
if (start == -1)
if start == -1
let ret = ret . strpart(a:str, end+1)
break
endif
let ret = ret . strpart(a:str, end+1, start-(end+1))
let end = match(a:str, "}", start)
if (end == -1)
if end == -1
let ret = ret . strpart(a:str, start)
break
endif
@@ -185,7 +185,7 @@ if !exists("*s:ParseRpmVars")
execute a:strline
let definestr = "^[ \t]*%\\(define\\|global\\)[ \t]\\+".varname."[ \t]\\+\\(.*\\)$"
let linenum = search(definestr, "bW")
if (linenum != 0)
if linenum != 0
let ret = ret . substitute(getline(linenum), definestr, "\\2", "")
endif
endwhile

View File

@@ -6,7 +6,16 @@
" See https://swift.org/LICENSE.txt for license information
" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
"
" Vim maintainer: Emir SARI <bitigchi@me.com>
" Vim maintainer: Emir SARI <bitigchi@me.com>
" Last Change: 2021 Jan 08
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let b:undo_ftplugin = "setlocal comments< expandtab< tabstop< shiftwidth< smartindent<"
setlocal comments=s1:/*,mb:*,ex:*/,:///,://
setlocal expandtab

View File

@@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Aug 14
" Last Change: 2021 Jan 05
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -48,18 +48,23 @@ setlocal isk+=#
" Use :help to lookup the keyword under the cursor with K.
setlocal keywordprg=:help
" Set 'comments' to format dashed lists in comments
" Avoid that #{} starts a comment.
setlocal com=sO:\"\ -,mO:\"\ \ ,sO:#\ -,mO:#\ \ ,eO:##,:\",b:#
if "\n" .. getline(1, 10)->join("\n") =~# '\n\s*vim9\%[script]\>'
" Set 'comments' to format dashed lists in comments
setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:#
" Comments start with a double quote in a legacy script;
" with # in a Vim9 script
setlocal commentstring=\"%s
else
setlocal com=sO:\"\ -,mO:\"\ \ ,:\"
setlocal commentstring=#%s
endif
" Format comments to be up to 78 characters long
if &tw == 0
setlocal tw=78
endif
" Comments start with a double quote; in Vim9 script # would also work
setlocal commentstring=\"%s
if !exists("no_plugin_maps") && !exists("no_vim_maps")
let b:did_add_maps = 1

13
runtime/indent/dune.vim Normal file
View File

@@ -0,0 +1,13 @@
" Vim indent file
" Language: dune
" Maintainers: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change: 2021 Jan 01
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
" dune format-dune-file uses 1 space to indent
setlocal softtabstop=1 shiftwidth=1 expandtab

View File

@@ -1,7 +1,7 @@
" Vim indent script for HTML
" Maintainer: Bram Moolenaar
" Original Author: Andy Wokula <anwoku@yahoo.de>
" Last Change: 2020 Jul 06
" Last Change: 2020 Dec 11
" Version: 1.0 "{{{
" Description: HTML indent script with cached state for faster indenting on a
" range of lines.
@@ -815,7 +815,7 @@ func! s:Alien5()
let idx = match(prevtext, '^\s*\zs<!--')
if idx >= 0
" just below comment start, add a shiftwidth
return idx + shiftwidth()
return indent(prevlnum) + shiftwidth()
endif
" Some files add 4 spaces just below a TODO line. It's difficult to detect

View File

@@ -3,7 +3,7 @@
" Maintainers: Jean-Francois Yuen <jfyuen@happycoders.org>
" Mike Leary <leary@nwlink.com>
" Markus Mottl <markus.mottl@gmail.com>
" URL: http://www.ocaml.info/vim/indent/ocaml.vim
" URL: https://github.com/ocaml/vim-ocaml
" Last Change: 2017 Jun 13
" 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
" 2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
@@ -30,7 +30,8 @@ setlocal nosmartindent
" Comment formatting
if !exists("no_ocaml_comments")
if (has("comments"))
setlocal comments=sr:(*,mb:*,ex:*)
setlocal comments=sr:(*\ ,mb:\ ,ex:*)
setlocal comments^=sr:(**,mb:\ \ ,ex:*)
setlocal fo=cqort
endif
endif

View File

@@ -227,4 +227,4 @@ endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:sw=2
" vim:sw=2

View File

@@ -21,8 +21,27 @@ let cmd =
" END_INDENT
" START_INDENT
" INDENT_EXE let g:vim_indent_cont = 5
let list = [
\ 'one',
\ 'two']
" END_INDENT
" START_INDENT
" INDENT_EXE unlet g:vim_indent_cont
let list = [
'one',
'two',
]
echo
" END_INDENT
" START_INDENT
" INDENT_AT this-line
func Some()
let f = x " this-line

View File

@@ -21,8 +21,27 @@ let cmd =
" END_INDENT
" START_INDENT
" INDENT_EXE let g:vim_indent_cont = 5
let list = [
\ 'one',
\ 'two']
" END_INDENT
" START_INDENT
" INDENT_EXE unlet g:vim_indent_cont
let list = [
'one',
'two',
]
echo
" END_INDENT
" START_INDENT
" INDENT_AT this-line
func Some()
let f = x " this-line

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Vim script
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 Sep 27
" Last Change: 2021 Jan 06
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -52,6 +52,7 @@ function GetVimIndentIntern()
return 0
endif
let prev_text = getline(lnum)
let found_cont = 0
" Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function
" and :else. Add it three times for a line that starts with '\' or '"\ '
@@ -83,6 +84,7 @@ function GetVimIndentIntern()
endif
if cur_text =~ s:lineContPat && v:lnum > 1 && prev_text !~ s:lineContPat
let found_cont = 1
if exists("g:vim_indent_cont")
let ind = ind + g:vim_indent_cont
else
@@ -114,10 +116,50 @@ function GetVimIndentIntern()
endif
endif
" For a line starting with "}" find the matching "{". If it is at the start
" of the line align with it, probably end of a block.
" Use the mapped "%" from matchit to find the match, otherwise we may match
" a { inside a comment or string.
if cur_text =~ '^\s*}'
if maparg('%') != ''
exe v:lnum
silent! normal %
if line('.') < v:lnum && getline('.') =~ '^\s*{'
let ind = indent('.')
endif
else
" todo: use searchpair() to find a match
endif
endif
" Below a line starting with "}" find the matching "{". If it is at the
" end of the line we must be below the end of a dictionary.
if prev_text =~ '^\s*}'
if maparg('%') != ''
exe lnum
silent! normal %
if line('.') == lnum || getline('.') !~ '^\s*{'
let ind = ind - shiftwidth()
endif
else
" todo: use searchpair() to find a match
endif
endif
" Below a line starting with "]" we must be below the end of a list.
if prev_text =~ '^\s*]'
let ind = ind - shiftwidth()
endif
" A line ending in "{"/"[} is most likely the start of a dict/list literal,
" indent the next line more. Not for a continuation line.
if prev_text =~ '[{[]\s*$' && !found_cont
let ind = ind + shiftwidth()
endif
" Subtract a 'shiftwidth' on a :endif, :endwhile, :catch, :finally, :endtry,
" :endfun, :enddef, :else and :augroup END.
if cur_text =~ '^\s*\(ene\@!\|}\|cat\|finall\|el\|aug\%[roup]\s\+[eE][nN][dD]\)'
if cur_text =~ '^\s*\(ene\@!\|cat\|finall\|el\|aug\%[roup]\s\+[eE][nN][dD]\)'
let ind = ind - shiftwidth()
endif

View File

@@ -1,3 +1,3 @@
" Menu Translations: Turkish
source <sfile>:p:h/menu_tr_tr.cp1254.vim
source <sfile>:p:h/menu_tr_tr.cp1254.vim

View File

@@ -1,3 +1,3 @@
" Menu Translations: Turkish
source <sfile>:p:h/menu_tr_tr.iso_8859-9.vim
source <sfile>:p:h/menu_tr_tr.iso_8859-9.vim

View File

@@ -1,6 +1,6 @@
" Vim script to work like "less"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2020 May 18
" Last Change: 2020 Dec 17
" Avoid loading this file twice, allow the user to define his own script.
if exists("loaded_less")
@@ -35,8 +35,16 @@ if argc() > 0
endwhile
endif
set nocp
syntax on
" we don't want 'compatible' here
if &cp
set nocp
endif
" enable syntax highlighting if not done already
if !get(g:, 'syntax_on', 0)
syntax enable
endif
set so=0
set hlsearch
set incsearch

View File

@@ -2,7 +2,7 @@
"
" Author: Bram Moolenaar
" Copyright: Vim license applies, see ":help license"
" Last Change: 2020 Dec 07
" Last Change: 2021 Jan 03
"
" WORK IN PROGRESS - Only the basics work
" Note: On MS-Windows you need a recent version of gdb. The one included with
@@ -70,9 +70,14 @@ if !exists('g:termdebugger')
endif
let s:pc_id = 12
let s:break_id = 13 " breakpoint number is added to this
let s:asm_id = 13
let s:break_id = 14 " breakpoint number is added to this
let s:stopped = 1
let s:parsing_disasm_msg = 0
let s:asm_lines = []
let s:asm_addr = ''
" Take a breakpoint number as used by GDB and turn it into an integer.
" The breakpoint may contain a dot: 123.4 -> 123004
" The main breakpoint has a zero subid.
@@ -114,6 +119,7 @@ func s:StartDebug_internal(dict)
let s:ptywin = 0
let s:pid = 0
let s:asmwin = 0
" Uncomment this line to write logging in "debuglog".
" call ch_logfile('debuglog', 'w')
@@ -153,6 +159,14 @@ func s:StartDebug_internal(dict)
else
call s:StartDebug_term(a:dict)
endif
if exists('g:termdebug_disasm_window')
if g:termdebug_disasm_window
let curwinid = win_getid(winnr())
call s:GotoAsmwinOrCreateIt()
call win_gotoid(curwinid)
endif
endif
endfunc
" Use when debugger didn't start or ended.
@@ -546,6 +560,14 @@ func s:GetFullname(msg)
return name
endfunc
" Extract the "addr" value from a gdb message with addr="0x0001234".
func s:GetAsmAddr(msg)
if a:msg !~ 'addr='
return ''
endif
let addr = s:DecodeMessage(substitute(a:msg, '.*addr=', '', ''))
return addr
endfunc
func s:EndTermDebug(job, status)
exe 'bwipe! ' . s:commbuf
unlet s:gdbwin
@@ -609,6 +631,69 @@ func s:EndPromptDebug(job, status)
call ch_log("Returning from EndPromptDebug()")
endfunc
" Disassembly window - added by Michael Sartain
"
" - CommOutput: disassemble $pc
" - CommOutput: &"disassemble $pc\n"
" - CommOutput: ~"Dump of assembler code for function main(int, char**):\n"
" - CommOutput: ~" 0x0000555556466f69 <+0>:\tpush rbp\n"
" ...
" - CommOutput: ~" 0x0000555556467cd0:\tpop rbp\n"
" - CommOutput: ~" 0x0000555556467cd1:\tret \n"
" - CommOutput: ~"End of assembler dump.\n"
" - CommOutput: ^done
" - CommOutput: disassemble $pc
" - CommOutput: &"disassemble $pc\n"
" - CommOutput: &"No function contains specified address.\n"
" - CommOutput: ^error,msg="No function contains specified address."
func s:HandleDisasmMsg(msg)
if a:msg =~ '^\^done'
let curwinid = win_getid(winnr())
if win_gotoid(s:asmwin)
silent normal! gg0"_dG
call setline(1, s:asm_lines)
set nomodified
set filetype=asm
let lnum = search('^' . s:asm_addr)
if lnum != 0
exe 'sign unplace ' . s:asm_id
exe 'sign place ' . s:asm_id . ' line=' . lnum . ' name=debugPC'
endif
call win_gotoid(curwinid)
endif
let s:parsing_disasm_msg = 0
let s:asm_lines = []
elseif a:msg =~ '^\^error,msg='
if s:parsing_disasm_msg == 1
" Disassemble call ran into an error. This can happen when gdb can't
" find the function frame address, so let's try to disassemble starting
" at current PC
call s:SendCommand('disassemble $pc,+100')
endif
let s:parsing_disasm_msg = 0
elseif a:msg =~ '\&\"disassemble \$pc'
if a:msg =~ '+100'
" This is our second disasm attempt
let s:parsing_disasm_msg = 2
endif
else
let value = substitute(a:msg, '^\~\"[ ]*', '', '')
let value = substitute(value, '^=>[ ]*', '', '')
let value = substitute(value, '\\n\"
$', '', '')
let value = substitute(value, '\\n\"$', '', '')
let value = substitute(value, '
', '', '')
let value = substitute(value, '\\t', ' ', 'g')
if value != '' || !empty(s:asm_lines)
call add(s:asm_lines, value)
endif
endif
endfunc
" Handle a message received from gdb on the GDB/MI interface.
@@ -618,7 +703,10 @@ func s:CommOutput(chan, msg)
for msg in msgs
" remove prefixed NL
if msg[0] == "\n"
if msg != ''
let msg = msg[1:]
endif
if s:parsing_disasm_msg
call s:HandleDisasmMsg(msg)
elseif msg != ''
if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
@@ -631,6 +719,9 @@ func s:CommOutput(chan, msg)
call s:HandleProgramRun(msg)
elseif msg =~ '^\^done,value='
call s:HandleEvaluate(msg)
elseif msg =~ '^\^error,msg='
call s:HandleError(msg)
elseif msg =~ '^disassemble'
let s:parsing_disasm_msg = 1
let s:asm_lines = []
endif
@@ -671,6 +762,7 @@ func s:InstallCommands()
command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>)
command Gdb call win_gotoid(s:gdbwin)
command Program call s:GotoProgram()
command Source call s:GotoSourcewinOrCreateIt()
command Asm call s:GotoAsmwinOrCreateIt()
command Winbar call s:InstallWinbar()
@@ -724,6 +816,7 @@ func s:DeleteCommands()
delcommand Continue
delcommand Evaluate
delcommand Gdb
delcommand Program
delcommand Source
delcommand Asm
delcommand Winbar
@@ -923,6 +1016,48 @@ func s:GotoSourcewinOrCreateIt()
let s:sourcewin = win_getid(winnr())
call s:InstallWinbar()
endif
endfunc
func s:GotoAsmwinOrCreateIt()
if !win_gotoid(s:asmwin)
if win_gotoid(s:sourcewin)
exe 'rightbelow new'
else
exe 'new'
endif
let s:asmwin = win_getid(winnr())
setlocal nowrap
setlocal number
setlocal noswapfile
setlocal buftype=nofile
let asmbuf = bufnr('Termdebug-asm-listing')
if asmbuf > 0
exe 'buffer' . asmbuf
else
exe 'file Termdebug-asm-listing'
endif
if exists('g:termdebug_disasm_window')
if g:termdebug_disasm_window > 1
exe 'resize ' . g:termdebug_disasm_window
endif
endif
endif
if s:asm_addr != ''
let lnum = search('^' . s:asm_addr)
if lnum == 0
if s:stopped
call s:SendCommand('disassemble $pc')
endif
else
exe 'sign unplace ' . s:asm_id
exe 'sign place ' . s:asm_id . ' line=' . lnum . ' name=debugPC'
endif
endif
endfunc
" Handle stopping and running message from gdb.
@@ -941,6 +1076,27 @@ func s:HandleCursor(msg)
if a:msg =~ 'fullname='
let fname = s:GetFullname(a:msg)
else
let fname = ''
endif
if a:msg =~ 'addr='
let asm_addr = s:GetAsmAddr(a:msg)
if asm_addr != ''
let s:asm_addr = asm_addr
let curwinid = win_getid(winnr())
if win_gotoid(s:asmwin)
let lnum = search('^' . s:asm_addr)
if lnum == 0
call s:SendCommand('disassemble $pc')
else
exe 'sign unplace ' . s:asm_id
exe 'sign place ' . s:asm_id . ' line=' . lnum . ' name=debugPC'
endif
call win_gotoid(curwinid)
endif
endif
endif
if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)

View File

@@ -1,7 +1,7 @@
" Vim ABAP syntax file
" Language: SAP - ABAP/R4
" Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
" Last Change: 2018 Dec 12
" Last Change: 2021 Jan 02
" Comment: Thanks to EPI-USE Labs for all your assistance. :)
" Quit when a syntax file was already loaded
@@ -193,4 +193,4 @@ hi def link abapHex Number
let b:current_syntax = "abap"
" vim: ts=8 sw=2
" vim: ts=8 sw=2

View File

@@ -2,7 +2,7 @@
" Language: Diff (context or unified)
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Translations by Jakson Alves de Aquino.
" Last Change: 2020 Dec 07
" Last Change: 2020 Dec 30
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
@@ -348,11 +348,16 @@ syn match diffLine "^\d\+\(,\d\+\)\=[cda]\d\+\>.*"
syn match diffFile "^diff\>.*"
syn match diffFile "^Index: .*"
syn match diffFile "^==== .*"
" Old style diff uses *** for old and --- for new.
" Unified diff uses --- for old and +++ for new; names are wrong but it works.
syn match diffOldFile "^+++ .*"
syn match diffOldFile "^\*\*\* .*"
syn match diffNewFile "^--- .*"
if search('^@@ -\S\+ +\S\+ @@', 'nw', '', 100)
" unified
syn match diffOldFile "^--- .*"
syn match diffNewFile "^+++ .*"
else
" context / old style
syn match diffOldFile "^\*\*\* .*"
syn match diffNewFile "^--- .*"
endif
" Used by git
syn match diffIndexLine "^index \x\x\x\x.*"

View File

@@ -2,10 +2,10 @@
" Language: doxygen on top of c, cpp, idl, java, php
" Maintainer: Michael Geddes <vimmer@frog.wheelycreek.net>
" Author: Michael Geddes
" Last Change: November 2017 (\throws by Candy Gumdrop)
" Version: 1.27
" Last Change: December 2020
" Version: 1.30
"
" Copyright 2004-2017 Michael Geddes
" Copyright 2004-2020 Michael Geddes
" Please feel free to use, modify & distribute all or part of this script,
" providing this copyright message remains.
" I would appreciate being acknowledged in any derived scripts, and would
@@ -170,7 +170,7 @@ endif
fun! s:DxyCreateSmallSpecial( kword, name )
let mx='[-:0-9A-Za-z_%=&+*/!~>|]\@<!\([-0-9A-Za-z_%=+*/!~>|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,][0-9a-zA-Z_]\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+'
let mx='[-:0-9A-Za-z_%=&+*/!~>|]\@<!\([-0-9A-Za-z_%=+*/!~>|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,]\w\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+'
exe 'syn region doxygenSpecial'.a:name.'Word contained start=+'.a:kword.'+ end=+\(\_s\+'.mx.'\)\@<=[-a-zA-Z_0-9+*/^%|~!=&\\]\@!+ skipwhite contains=doxygenContinueCommentWhite,doxygen'.a:name.'Word'
exe 'syn match doxygen'.a:name.'Word contained "\_s\@<='.mx.'" contains=doxygenHtmlSpecial,@Spell keepend'
endfun
@@ -186,7 +186,7 @@ endif
syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\>\|\<link\>\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word
" Now for special characters
syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\|\<link\>\>\|\<f\$\|[$\\&<>#]\)\@!+ nextgroup=doxygenParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion
syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\|\<link\>\>\|\<f\$\|[$\\&<>#]\)\@!+ nextgroup=doxygenParam,doxygenTParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion
" doxygenOtherLink,doxygenSymbol,doxygenFormula,doxygenErrorSpecial,doxygenSpecial.*Word
"
syn match doxygenGroupDefine contained +@\@<=[{}]+
@@ -199,13 +199,14 @@ endif
syn keyword doxygenParam contained param nextgroup=doxygenParamName,doxygenParamDirection skipwhite
syn keyword doxygenTParam contained tparam nextgroup=doxygenParamName skipwhite
syn match doxygenParamName contained +[A-Za-z0-9_:]\++ nextgroup=doxygenSpecialMultilineDesc skipwhite
syn keyword doxygenRetval contained retval throw throws exception nextgroup=doxygenParamName skipwhite
syn keyword doxygenRetval contained retval throw throws exception nextgroup=doxygenReturnValue skipwhite
syn match doxygenReturnValue contained +\S\++ nextgroup=doxygenSpecialMultilineDesc skipwhite
" Match one line identifiers.
syn keyword doxygenOther contained addindex anchor
\ dontinclude endhtmlonly endlatexonly showinitializer hideinitializer
\ example htmlonly image include includelineno ingroup internal latexonly line
\ overload relates relatesalso sa skip skipline
\ example htmlonly image include includelineno ingroup latexonly line
\ overload relates related relatesalso relatedalso sa skip skipline
\ until verbinclude version addtogroup htmlinclude copydoc dotfile
\ xmlonly endxmlonly
\ nextgroup=doxygenSpecialOnelineDesc copybrief copydetails copyright dir extends
@@ -241,8 +242,8 @@ endif
syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine
syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc
syn keyword doxygenOther contained arg author authors date deprecated li return returns see invariant note post pre remarks since test nextgroup=doxygenSpecialMultilineDesc
" Match the start of other multiline comments.
syn keyword doxygenOther contained arg author authors date deprecated li return returns result see invariant note post pre remarks since test internal nextgroup=doxygenSpecialMultilineDesc
syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc
syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc
syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc
@@ -256,7 +257,7 @@ endif
syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest
syn match doxygenLinkError "\*/" contained
" #Link hilighting.
syn match doxygenHashLink /\([a-zA-Z_][0-9a-zA-Z_]*\)\?#\(\.[0-9a-zA-Z_]\@=\|[a-zA-Z0-9_]\+\|::\|()\)\+/ contained contains=doxygenHashSpecial
syn match doxygenHashLink /\(\h\w*\)\?#\(\.\w\@=\|\w\+\|::\|()\)\+/ contained contains=doxygenHashSpecial
syn match doxygenHashSpecial /#/ contained
syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@~]\+/ contained
@@ -264,12 +265,12 @@ endif
syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage
syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent
syn region doxygenPageDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody
syn match doxygenPageIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenPageDesc
syn match doxygenPageIdent "\<\w\+\>" contained nextgroup=doxygenPageDesc
" Handle section
syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent
syn region doxygenSpecialSectionDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueCommentWhite
syn match doxygenSpecialIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenSpecialSectionDesc
syn match doxygenSpecialIdent "\<\w\+\>" contained nextgroup=doxygenSpecialSectionDesc
" Does the one-line description for the one-line type identifiers.
syn region doxygenSpecialTypeOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend
@@ -421,7 +422,7 @@ endif
if &guifont == ''
let font="font='FreeSerif 12'"
else
let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'"
let font="font='".substitute(&guifont, '^.\{-}\(\d\+\)$', 'FreeSerif \1','')."'"
endif
elseif has('gui_win32') || has('gui_win16') || has('gui_win95')
@@ -475,6 +476,7 @@ endif
SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold
SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen
endif
SynLink doxygenValue doxygenParamName
else
SynLink doxygenComment SpecialComment
SynLink doxygenBrief Statement
@@ -486,7 +488,10 @@ endif
SynLink doxygenSpecialOnelineDesc Statement
SynLink doxygenSpecialHeading Statement
SynLink doxygenPrev SpecialComment
SynLink doxygenValue Constant
endif
SynLink doxygenTParam doxygenParam
endfun
call s:Doxygen_Hilights()
@@ -550,6 +555,7 @@ endif
SynLink doxygenLinkRest doxygenSpecialMultilineDesc
SynLink doxygenHyperLink doxygenLinkWord
SynLink doxygenHashLink doxygenLinkWord
SynLink doxygenReturnValue doxygenValue
SynLink doxygenPage doxygenSpecial
SynLink doxygenPagePage doxygenBOther

View File

@@ -1,7 +1,8 @@
" Vim syntax file
" Language: Dune buildsystem
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" Anton Kochkov <anton.kochkov@gmail.com>
" URL: https://github.com/rgrinberg/vim-ocaml
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2019 Feb 27 - Add newer keywords to the syntax (Simon Cruanes)
" 2018 May 8 - Check current_syntax (Kawahara Satoru)
@@ -28,7 +29,7 @@ syn keyword lispKey ppx_runtime_libraries virtual_deps js_of_ocaml link_flags
syn keyword lispKey javascript_files flags ocamlc_flags ocamlopt_flags pps staged_pps
syn keyword lispKey library_flags c_flags c_library_flags kind package action
syn keyword lispKey deps targets locks fallback
syn keyword lispKey inline_tests tests names
syn keyword lispKey inline_tests tests test names
syn keyword lispAtom true false

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: fstab file
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
" URL: https://raw.github.com/rid9/vim-fstab/master/fstab.vim
" Last Change: 2020 Aug 06
" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim
" Last Change: 2020 Dec 30
" Version: 1.4
"
" Credits:

216
runtime/syntax/gift.vim Normal file
View File

@@ -0,0 +1,216 @@
" Vim syntax file
"
" Language: Moodle GIFT (General Import Format Template)
" Maintainer: Selim Temizer (http://selimtemizer.com)
" Creation: November 28, 2020
" Latest Revision: December 21, 2020
" Note: The order of entities in this file is important!
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
setlocal conceallevel=1
"-----------------------------------------------
" GIFT entities
syn match giftS "\~" contained "GIFT special characters
syn match giftS "=" contained
syn match giftS "#" contained
syn match giftS "{" contained
syn match giftS "}" contained
syn match giftS ":" contained
syn match giftES "\\\~" contained conceal cchar=~ "GIFT escaped special characters
syn match giftES "\\=" contained conceal cchar==
syn match giftES "\\#" contained conceal cchar=#
syn match giftES "\\{" contained conceal cchar={
syn match giftES "\\}" contained conceal cchar=}
syn match giftES "\\:" contained conceal cchar=:
syn match giftEN "\\n" contained conceal cchar=n "GIFT escaped newline
syn match giftFormat "\[html]" contained "GIFT formats
syn match giftFormat "\[plain]" contained
syn match giftFormat "\[moodle]" contained
syn match giftFormat "\[markdown]" contained
"--------------------------------------------------------
" HTML entities
syn match giftH "<" contained "HTML characters that might need to be handled/escaped
syn match giftH ">" contained
syn match giftH "&" contained
syn match giftEH "&lt;" contained conceal cchar=< "HTML escaped characters
syn match giftEH "&gt;" contained conceal cchar=>
syn match giftEH "&amp;" contained conceal cchar=&
syn match giftEH "&nbsp;" contained conceal cchar=_
"-------------------------------------------------------
" Answer components: Feedback and general feedback
syn match giftFB "#\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)" contained contains=giftF "Feedback block
syn match giftF "#\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)" contained contains=@giftCEF "Feedback
syn match giftGFB "####\_.\{-}\(\_^\|[^\\]\)\ze}" contained contains=giftGF "General feedback block
syn match giftGF "####\zs\_.\{-}\(\_^\|[^\\]\)\ze}" contained contains=@giftCEF "General feedback
"------------------------------------------------------
" Answer components: Other components
syn keyword giftTF T TRUE F FALSE contained
syn match giftNum1 "[-+]\=[.0-9]\+" contained "Something matching a number
syn match giftNum2 "[-+]\=[.0-9]\+\s*:\s*[-+]\=[.0-9]\+" contained contains=giftNum2D "Number with error margin
syn match giftNum2D ":" contained "Associated delimiter
syn match giftNum3 "[-+]\=[.0-9]\+\s*\.\.\s*[-+]\=[.0-9]\+" contained contains=giftNum3D "Number as min/max range
syn match giftNum3D "\.\." contained "Associated delimiter
syn match giftWeightB "%-*[0-9]\{1,2}\.\?[0-9]*%" contained contains=giftWeight "Weight block
syn match giftWeight "%\zs-*[0-9]\{1,2}\.\?[0-9]*\ze%" contained "Weight
"-----------------------------------------------------
" Answer choices
syn match giftWrongNum "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(####\|}\)" contained contains=@giftCEFF "Wrong numeric choice
syn match giftRightNum "=\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCEFFW,@giftNums "Right numeric choice
syn match giftWrong "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCEFFW "Wrong choice
syn match giftRight "=\zs\_.\{-}\(\ze->\|\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)\)" contained contains=@giftCEFFW "Right choice
syn match giftMatchB "->\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=giftMatch "Match choice block
syn match giftMatch "->\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCE "Match choice
"----------------------------------------------------
" Answer
syn match giftAnswer "{\_.\{-}\(\_^\|[^\\]\)}" contained keepend contains=@giftA "General answer
syn match giftAnswer "{}" contained "Minimal answer
syn match giftAnswerNum "{\_[[:space:]]*#\_[^#]\_.\{-}\(\_^\|[^\\]\)}" contained keepend contains=@giftANum "Numeric answer
syn match giftAnswerNumD "{\zs\_[[:space:]]*#" contained "Associated delimiter
"---------------------------------------------------
" Question
" The first pattern matches the last question at the end of the file (in case there is no empty line coming after).
" However, it slows down parsing (and especially scrolling up), therefore it is commented out.
"syn match giftQuestion "[^{[:space:]]\_.\{-}\%$" keepend contains=@giftCEF,giftAnswer,giftAnswerNum
syn match giftQuestion "[^{[:space:]]\_.\{-}\n\(\s*\n\)\+" keepend contains=@giftCEF,giftAnswer,giftAnswerNum
"--------------------------------------------------
" Question name
syn match giftName "::\_.\{-}::" contains=@giftCE,giftNameD "Question name
syn match giftNameD "::" contained "Associated delimiter
"-------------------------------------------------
" Category
syn match giftCategoryB "^\s*\$CATEGORY:.*\n\+" contains=giftCategory "Category block
syn match giftCategory "^\s*\$CATEGORY:\zs.*\ze\n" contained "Category
"------------------------------------------------
" Comments (may need to be the last entity)
syn keyword giftTodo FIXME TODO NOTE FIX XXX contained
syn match giftIdB "\[id:\(\\]\|[^][:cntrl:]]\)\+]" contained contains=giftId "Id block
syn match giftId "\[id:\zs\(\\]\|[^][:cntrl:]]\)\+\ze]" contained "Id
syn match giftTagB "\[tag:\(\\]\|[^]<>`[:cntrl:]]\)\+]" contained contains=giftTag "Tag block
syn match giftTag "\[tag:\zs\(\\]\|[^]<>`[:cntrl:]]\)\+\ze]" contained "Tag
syn match giftComment "^\s*//.*" contains=giftTodo,giftIdB,giftTagB
"-----------------------------------------------
" Clusters
"Comments and entities (to be escaped)
syn cluster giftCE contains=giftComment,giftS,giftES,giftEN,giftH,giftEH
"The above plus format
syn cluster giftCEF contains=@giftCE,giftFormat
"The above plus feedback block
syn cluster giftCEFF contains=@giftCEF,giftFB
"The above plus weight block
syn cluster giftCEFFW contains=@giftCEFF,giftWeightB
"Possible numerical representations
syn cluster giftNums contains=giftNum1,giftNum2,giftNum3
"Possible contents of answers
syn cluster giftA contains=giftComment,giftTF,giftWrong,giftRight,giftMatchB,giftFB,giftGFB
"Possible contents of numerical answers
syn cluster giftANum contains=giftAnswerNumD,giftComment,@giftNums,giftWrongNum,giftRightNum,giftFB,giftGFB
"-----------------------------------------------
let b:current_syntax = "gift"
"-----------------------------------------------
hi Conceal ctermbg=NONE ctermfg=Blue guibg=NONE guifg=Blue
hi Feedback ctermbg=NONE ctermfg=DarkCyan guibg=NONE guifg=DarkCyan
hi GFeedback ctermbg=NONE ctermfg=DarkGreen guibg=NONE guifg=DarkGreen
hi WeightB ctermbg=NONE ctermfg=DarkYellow guibg=NONE guifg=DarkYellow
"-----------------------------------------------
hi def link giftS Error
hi def link giftES Conceal
hi def link giftEN Conceal
hi def link giftFormat LineNr
hi def link giftH Error
hi def link giftEH Conceal
hi def link giftFB PreProc
hi def link giftF Feedback
hi def link giftGFB Title
hi def link giftGF GFeedback
hi def link giftTF Question
hi def link giftNum1 Question
hi def link giftNum2 Question
hi def link giftNum2D Special
hi def link giftNum3 Question
hi def link giftNum3D Special
hi def link giftWeightB WeightB
hi def link giftWeight Identifier
hi def link giftWrongNum Constant
hi def link giftRightNum Question
hi def link giftWrong Constant
hi def link giftRight Question
hi def link giftMatchB ModeMsg
hi def link giftMatch Constant
hi def link giftAnswer MoreMsg
hi def link giftAnswerNum MoreMsg
hi def link giftAnswerNumD Identifier
hi def link giftQuestion Identifier
hi def link giftName PreProc
hi def link giftNameD Directory
hi def link giftCategoryB LineNr
hi def link giftCategory Directory
hi def link giftTodo Todo
hi def link giftIdB LineNr
hi def link giftId Title
hi def link giftTagB LineNr
hi def link giftTag Constant
hi def link giftComment Comment

View File

@@ -4,7 +4,7 @@
" Maintainers: Markus Mottl <markus.mottl@gmail.com>
" Karl-Heinz Sylla <Karl-Heinz.Sylla@gmd.de>
" Issac Trotts <ijtrotts@ucdavis.edu>
" URL: https://github.com/rgrinberg/vim-ocaml
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2018 Nov 08 - Improved highlighting of operators (Maëlan)
" 2018 Apr 22 - Improved support for PPX (Andrey Popp)
@@ -18,14 +18,20 @@
" can be distinguished from begin/end, which is used for indentation,
" and folding. (David Baelde)
" quit when a syntax file was already loaded
" Quit when a syntax file was already loaded
if exists("b:current_syntax") && b:current_syntax == "ocaml"
finish
endif
let s:keepcpo = &cpo
set cpo&vim
" ' can be used in OCaml identifiers
setlocal iskeyword+='
" ` is part of the name of polymorphic variants
setlocal iskeyword+=`
" OCaml is case sensitive.
syn case match
@@ -123,7 +129,7 @@ syn region ocamlSig matchgroup=ocamlSigEncl start="\<sig\>" matchgroup=ocamlSi
syn region ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
" "open"
syn region ocamlNone matchgroup=ocamlKeyword start="\<open\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*\>" contains=@ocamlAllErrs,ocamlComment
syn match ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod
" "include"
syn match ocamlKeyword "\<include\>" skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
@@ -225,7 +231,18 @@ syn match ocamlStar "*"
syn match ocamlAngle "<"
syn match ocamlAngle ">"
" Custom indexing operators:
syn match ocamlIndexingOp "\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\(()\|\[]\|{}\)\(<-\)\?"
syn region ocamlIndexing matchgroup=ocamlIndexingOp
\ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*("
\ end=")\(\_s*<-\)\?"
\ contains=ALLBUT,@ocamlContained,ocamlParenErr
syn region ocamlIndexing matchgroup=ocamlIndexingOp
\ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*\["
\ end="]\(\_s*<-\)\?"
\ contains=ALLBUT,@ocamlContained,ocamlBrackErr
syn region ocamlIndexing matchgroup=ocamlIndexingOp
\ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*{"
\ end="}\(\_s*<-\)\?"
\ contains=ALLBUT,@ocamlContained,ocamlBraceErr
" Extension operators (has to be declared before regular infix operators):
syn match ocamlExtensionOp "#[#~?!.:|&$%<=>@^*/+-]\+"
" Infix and prefix operators:
@@ -283,7 +300,6 @@ syn sync match ocamlSigSync grouphere ocamlSig "\<sig\>"
syn sync match ocamlSigSync groupthere ocamlSig "\<end\>"
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link ocamlBraceErr Error
hi def link ocamlBrackErr Error
@@ -308,14 +324,17 @@ hi def link ocamlModPath Include
hi def link ocamlObject Include
hi def link ocamlModule Include
hi def link ocamlModParam1 Include
hi def link ocamlGenMod Include
hi def link ocamlModType Include
hi def link ocamlMPRestr3 Include
hi def link ocamlFullMod Include
hi def link ocamlFuncWith Include
hi def link ocamlModParam Include
hi def link ocamlModTypeRestr Include
hi def link ocamlWith Include
hi def link ocamlMTDef Include
hi def link ocamlSigEncl ocamlModule
hi def link ocamlStructEncl ocamlModule
hi def link ocamlSigEncl ocamlModule
hi def link ocamlStructEncl ocamlModule
hi def link ocamlScript Include
@@ -326,24 +345,25 @@ hi def link ocamlModPreRHS Keyword
hi def link ocamlMPRestr2 Keyword
hi def link ocamlKeyword Keyword
hi def link ocamlMethod Include
hi def link ocamlArrow Keyword
hi def link ocamlKeyChar Keyword
hi def link ocamlAnyVar Keyword
hi def link ocamlTopStop Keyword
hi def link ocamlRefAssign ocamlKeyChar
hi def link ocamlEqual ocamlKeyChar
hi def link ocamlStar ocamlInfixOp
hi def link ocamlAngle ocamlInfixOp
hi def link ocamlCons ocamlInfixOp
hi def link ocamlRefAssign ocamlKeyChar
hi def link ocamlEqual ocamlKeyChar
hi def link ocamlStar ocamlInfixOp
hi def link ocamlAngle ocamlInfixOp
hi def link ocamlCons ocamlInfixOp
hi def link ocamlPrefixOp ocamlOperator
hi def link ocamlInfixOp ocamlOperator
hi def link ocamlExtensionOp ocamlOperator
hi def link ocamlIndexingOp ocamlOperator
hi def link ocamlPrefixOp ocamlOperator
hi def link ocamlInfixOp ocamlOperator
hi def link ocamlExtensionOp ocamlOperator
hi def link ocamlIndexingOp ocamlOperator
if exists("ocaml_highlight_operators")
hi def link ocamlInfixOpKeyword ocamlOperator
hi def link ocamlOperator Operator
hi def link ocamlOperator Operator
else
hi def link ocamlInfixOpKeyword Keyword
endif
@@ -353,7 +373,7 @@ hi def link ocamlCharacter Character
hi def link ocamlNumber Number
hi def link ocamlFloat Float
hi def link ocamlString String
hi def link ocamlQuotedStringDelim Identifier
hi def link ocamlQuotedStringDelim Identifier
hi def link ocamlLabel Identifier
@@ -363,8 +383,11 @@ hi def link ocamlTodo Todo
hi def link ocamlEncl Keyword
hi def link ocamlPpxEncl ocamlEncl
hi def link ocamlPpxEncl ocamlEncl
let b:current_syntax = "ocaml"
let &cpo = s:keepcpo
unlet s:keepcpo
" vim: ts=8

38
runtime/syntax/opam.vim Normal file
View File

@@ -0,0 +1,38 @@
" Vim syntax file
" Language: OPAM - OCaml package manager
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
" 2020 Dec 31 - Added header (Markus Mottl)
if exists("b:current_syntax")
finish
endif
" need %{vars}%
" env: [[CAML_LD_LIBRARY_PATH = "%{lib}%/stublibs"]]
syn keyword opamKeyword1 remove depends pin-depends depopts conflicts env packages patches version maintainer tags license homepage authors doc install author available name depexts substs synopsis description
syn match opamKeyword2 "\v(bug-reports|post-messages|ocaml-version|opam-version|dev-repo|build-test|build-doc|build)"
syn keyword opamTodo FIXME NOTE NOTES TODO XXX contained
syn match opamComment "#.*$" contains=opamTodo,@Spell
syn match opamOperator ">\|<\|=\|<=\|>="
syn region opamInterpolate start=/%{/ end=/}%/ contained
syn region opamString start=/"/ end=/"/ contains=opamInterpolate
syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1,opamKeyword2
syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1,opamKeyword2
hi link opamKeyword1 Keyword
hi link opamKeyword2 Keyword
hi link opamString String
hi link opamExp Function
hi link opamSeq Statement
hi link opamOperator Operator
hi link opamComment Comment
hi link opamInterpolate Identifier
let b:current_syntax = "opam"
" vim: ts=2 sw=2

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: php PHP 3/4/5/7/8
" Maintainer: Tyson Andre <tysonandre775@hotmail.com>
" Last Change: Sep 07, 2020
" URL: https://github.com/TysonAndre/vim-syntax
" Last Change: Dec 22, 2020
" URL: https://github.com/TysonAndre/php-vim-syntax
" Former Maintainers:
" Jason Woofenden <jason@jasonwoof.com>
" Peter Hodge <toomuchphp-vim@yahoo.com>
@@ -149,7 +149,7 @@ syn keyword phpFunctions domxml_new_doc domxml_open_file domxml_open_mem domxml_
syn keyword phpMethods name specified value create_attribute create_cdata_section create_comment create_element_ns create_element create_entity_reference create_processing_instruction create_text_node doctype document_element dump_file dump_mem get_element_by_id get_elements_by_tagname html_dump_mem xinclude entities internal_subset name notations public_id system_id get_attribute_node get_attribute get_elements_by_tagname has_attribute remove_attribute set_attribute tagname add_namespace append_child append_sibling attributes child_nodes clone_node dump_node first_child get_content has_attributes has_child_nodes insert_before is_blank_node last_child next_sibling node_name node_type node_value owner_document parent_node prefix previous_sibling remove_child replace_child replace_node set_content set_name set_namespace unlink_node data target process result_dump_file result_dump_mem contained
syn keyword phpFunctions dotnet_load contained
syn keyword phpFunctions debug_backtrace debug_print_backtrace error_log error_reporting restore_error_handler set_error_handler trigger_error user_error contained
syn keyword phpFunctions enchant_broker_describe enchant_broker_dict_exists enchant_broker_free enchant_broker_free_dict enchant_broker_get_dict_path enchant_broker_get_error enchant_broker_init enchant_broker_list_dicts enchant_broker_request_dict enchant_broker_request_pwl_dict enchant_broker_set_dict_path enchant_broker_set_ordering enchant_dict_add_to_personal enchant_dict_add_to_session enchant_dict_check enchant_dict_describe enchant_dict_get_error enchant_dict_is_in_session enchant_dict_quick_check enchant_dict_store_replacement enchant_dict_suggest contained
syn keyword phpFunctions enchant_broker_describe enchant_broker_dict_exists enchant_broker_free enchant_broker_free_dict enchant_broker_get_dict_path enchant_broker_get_error enchant_broker_init enchant_broker_list_dicts enchant_broker_request_dict enchant_broker_request_pwl_dict enchant_broker_set_dict_path enchant_broker_set_ordering enchant_dict_add enchant_dict_add_to_personal enchant_dict_add_to_session enchant_dict_check enchant_dict_describe enchant_dict_get_error enchant_dict_is_added enchant_dict_is_in_session enchant_dict_quick_check enchant_dict_store_replacement enchant_dict_suggest contained
syn keyword phpFunctions escapeshellarg escapeshellcmd exec passthru proc_close proc_get_status proc_nice proc_open proc_terminate shell_exec system contained
syn keyword phpFunctions fam_cancel_monitor fam_close fam_monitor_collection fam_monitor_directory fam_monitor_file fam_next_event fam_open fam_pending fam_resume_monitor fam_suspend_monitor contained
syn keyword phpFunctions fbsql_affected_rows fbsql_autocommit fbsql_change_user fbsql_close fbsql_commit fbsql_connect fbsql_create_blob fbsql_create_clob fbsql_create_db fbsql_data_seek fbsql_database_password fbsql_database fbsql_db_query fbsql_db_status fbsql_drop_db fbsql_errno fbsql_error fbsql_fetch_array fbsql_fetch_assoc fbsql_fetch_field fbsql_fetch_lengths fbsql_fetch_object fbsql_fetch_row fbsql_field_flags fbsql_field_len fbsql_field_name fbsql_field_seek fbsql_field_table fbsql_field_type fbsql_free_result fbsql_get_autostart_info fbsql_hostname fbsql_insert_id fbsql_list_dbs fbsql_list_fields fbsql_list_tables fbsql_next_result fbsql_num_fields fbsql_num_rows fbsql_password fbsql_pconnect fbsql_query fbsql_read_blob fbsql_read_clob fbsql_result fbsql_rollback fbsql_select_db fbsql_set_lob_mode fbsql_set_transaction fbsql_start_db fbsql_stop_db fbsql_tablename fbsql_username fbsql_warnings contained
@@ -171,11 +171,11 @@ syn keyword phpFunctions ibase_add_user ibase_affected_rows ibase_blob_add ibase
syn keyword phpFunctions iconv_get_encoding iconv_mime_decode_headers iconv_mime_decode iconv_mime_encode iconv_set_encoding iconv_strlen iconv_strpos iconv_strrpos iconv_substr iconv ob_iconv_handler contained
syn keyword phpFunctions ifx_affected_rows ifx_blobinfile_mode ifx_byteasvarchar ifx_close ifx_connect ifx_copy_blob ifx_create_blob ifx_create_char ifx_do ifx_error ifx_errormsg ifx_fetch_row ifx_fieldproperties ifx_fieldtypes ifx_free_blob ifx_free_char ifx_free_result ifx_get_blob ifx_get_char ifx_getsqlca ifx_htmltbl_result ifx_nullformat ifx_num_fields ifx_num_rows ifx_pconnect ifx_prepare ifx_query ifx_textasvarchar ifx_update_blob ifx_update_char ifxus_close_slob ifxus_create_slob ifxus_free_slob ifxus_open_slob ifxus_read_slob ifxus_seek_slob ifxus_tell_slob ifxus_write_slob contained
syn keyword phpFunctions igbinary_serialize igbinary_unserialize contained
syn keyword phpFunctions exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data exif_tagname imageaffine imageaffinematrixconcat imageaffinematrixget imagebmp imageconvolution imagecreatefrombmp imagecreatefromtga imagecrop imagecropauto imagefilter imageflip imagegetclip imagelayereffect imageopenpolygon imagepalettetotruecolor imageresolution imagescale imagesetclip imagesetinterpolation imagexbm contained
syn keyword phpFunctions exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data exif_tagname imageaffine imageaffinematrixconcat imageaffinematrixget imagebmp imageconvolution imagecreatefrombmp imagecreatefromtga imagecrop imagecropauto imagefilter imageflip imagegetclip imagegetinterpolation imagelayereffect imageopenpolygon imagepalettetotruecolor imageresolution imagescale imagesetclip imagesetinterpolation imagexbm contained
syn keyword phpFunctions imap_8bit imap_alerts imap_append imap_base64 imap_binary imap_body imap_bodystruct imap_check imap_clearflag_full imap_close imap_createmailbox imap_delete imap_deletemailbox imap_errors imap_expunge imap_fetch_overview imap_fetchbody imap_fetchheader imap_fetchstructure imap_get_quota imap_get_quotaroot imap_getacl imap_getmailboxes imap_getsubscribed imap_header imap_headerinfo imap_headers imap_last_error imap_list imap_listmailbox imap_listscan imap_listsubscribed imap_lsub imap_mail_compose imap_mail_copy imap_mail_move imap_mail imap_mailboxmsginfo imap_mime_header_decode imap_msgno imap_num_msg imap_num_recent imap_open imap_ping imap_qprint imap_renamemailbox imap_reopen imap_rfc822_parse_adrlist imap_rfc822_parse_headers imap_rfc822_write_address imap_scanmailbox imap_search imap_set_quota imap_setacl imap_setflag_full imap_sort imap_status imap_subscribe imap_thread imap_timeout imap_uid imap_undelete imap_unsubscribe imap_utf7_decode imap_utf7_encode imap_utf8 contained
syn keyword phpFunctions assert_options assert dl extension_loaded get_cfg_var get_current_user get_defined_constants get_extension_funcs get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime get_required_files getenv getlastmod getmygid getmyinode getmypid getmyuid getopt getrusage ini_alter ini_get_all ini_get ini_restore ini_set main memory_get_usage php_ini_scanned_files php_logo_guid php_sapi_name php_uname phpcredits phpinfo phpversion putenv restore_include_path set_include_path set_magic_quotes_runtime set_time_limit version_compare zend_logo_guid zend_version contained
syn keyword phpFunctions ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback contained
syn keyword phpFunctions collator_asort collator_compare collator_create collator_get_attribute collator_get_error_code collator_get_error_message collator_get_locale collator_get_sort_key collator_get_strength collator_set_attribute collator_set_strength collator_sort collator_sort_with_sort_keys datefmt_create datefmt_format datefmt_format_object datefmt_get_calendar datefmt_get_calendar_object datefmt_get_datetype datefmt_get_error_code datefmt_get_error_message datefmt_get_locale datefmt_get_pattern datefmt_get_timetype datefmt_get_timezone datefmt_get_timezone_id datefmt_is_lenient datefmt_localtime datefmt_parse datefmt_set_calendar datefmt_set_lenient datefmt_set_pattern datefmt_set_timezone grapheme_extract grapheme_stripos grapheme_stristr grapheme_strlen grapheme_strpos grapheme_strripos grapheme_strrpos grapheme_strstr grapheme_substr idn_to_ascii idn_to_utf8 intl_error_name intl_get_error_code intl_get_error_message intl_is_failure intlcal_add intlcal_after intlcal_before intlcal_clear intlcal_create_instance intlcal_equals intlcal_field_difference intlcal_from_date_time intlcal_get intlcal_get_actual_maximum intlcal_get_actual_minimum intlcal_get_available_locales intlcal_get_day_of_week_type intlcal_get_error_code intlcal_get_error_message intlcal_get_first_day_of_week intlcal_get_greatest_minimum intlcal_get_keyword_values_for_locale intlcal_get_least_maximum intlcal_get_locale intlcal_get_maximum intlcal_get_minimal_days_in_first_week intlcal_get_minimum intlcal_get_now intlcal_get_repeated_wall_time_option intlcal_get_skipped_wall_time_option intlcal_get_time intlcal_get_time_zone intlcal_get_type intlcal_get_weekend_transition intlcal_in_daylight_time intlcal_is_equivalent_to intlcal_is_lenient intlcal_is_set intlcal_is_weekend intlcal_roll intlcal_set intlcal_set_first_day_of_week intlcal_set_lenient intlcal_set_minimal_days_in_first_week intlcal_set_repeated_wall_time_option intlcal_set_skipped_wall_time_option intlcal_set_time intlcal_set_time_zone intlcal_to_date_time intlgregcal_create_instance intlgregcal_get_gregorian_change intlgregcal_is_leap_year intlgregcal_set_gregorian_change intltz_count_equivalent_ids intltz_create_default intltz_create_enumeration intltz_create_time_zone intltz_create_time_zone_id_enumeration intltz_from_date_time_zone intltz_get_canonical_id intltz_get_display_name intltz_get_dst_savings intltz_get_equivalent_id intltz_get_error_code intltz_get_error_message intltz_get_gmt intltz_get_id intltz_get_offset intltz_get_raw_offset intltz_get_region intltz_get_tz_data_version intltz_get_unknown intltz_has_same_rules intltz_to_date_time_zone intltz_use_daylight_time locale_accept_from_http locale_canonicalize locale_compose locale_filter_matches locale_get_all_variants locale_get_default locale_get_display_language locale_get_display_name locale_get_display_region locale_get_display_script locale_get_display_variant locale_get_keywords locale_get_primary_language locale_get_region locale_get_script locale_lookup locale_parse locale_set_default msgfmt_create msgfmt_format msgfmt_format_message msgfmt_get_error_code msgfmt_get_error_message msgfmt_get_locale msgfmt_get_pattern msgfmt_parse msgfmt_parse_message msgfmt_set_pattern normalizer_is_normalized normalizer_normalize numfmt_create numfmt_format numfmt_format_currency numfmt_get_attribute numfmt_get_error_code numfmt_get_error_message numfmt_get_locale numfmt_get_pattern numfmt_get_symbol numfmt_get_text_attribute numfmt_parse numfmt_parse_currency numfmt_set_attribute numfmt_set_pattern numfmt_set_symbol numfmt_set_text_attribute resourcebundle_count resourcebundle_create resourcebundle_get resourcebundle_get_error_code resourcebundle_get_error_message resourcebundle_locales transliterator_create transliterator_create_from_rules transliterator_create_inverse transliterator_get_error_code transliterator_get_error_message transliterator_list_ids transliterator_transliterate contained
syn keyword phpFunctions collator_asort collator_compare collator_create collator_get_attribute collator_get_error_code collator_get_error_message collator_get_locale collator_get_sort_key collator_get_strength collator_set_attribute collator_set_strength collator_sort collator_sort_with_sort_keys datefmt_create datefmt_format datefmt_format_object datefmt_get_calendar datefmt_get_calendar_object datefmt_get_datetype datefmt_get_error_code datefmt_get_error_message datefmt_get_locale datefmt_get_pattern datefmt_get_timetype datefmt_get_timezone datefmt_get_timezone_id datefmt_is_lenient datefmt_localtime datefmt_parse datefmt_set_calendar datefmt_set_lenient datefmt_set_pattern datefmt_set_timezone grapheme_extract grapheme_stripos grapheme_stristr grapheme_strlen grapheme_strpos grapheme_strripos grapheme_strrpos grapheme_strstr grapheme_substr idn_to_ascii idn_to_utf8 intl_error_name intl_get_error_code intl_get_error_message intl_is_failure intlcal_add intlcal_after intlcal_before intlcal_clear intlcal_create_instance intlcal_equals intlcal_field_difference intlcal_from_date_time intlcal_get intlcal_get_actual_maximum intlcal_get_actual_minimum intlcal_get_available_locales intlcal_get_day_of_week_type intlcal_get_error_code intlcal_get_error_message intlcal_get_first_day_of_week intlcal_get_greatest_minimum intlcal_get_keyword_values_for_locale intlcal_get_least_maximum intlcal_get_locale intlcal_get_maximum intlcal_get_minimal_days_in_first_week intlcal_get_minimum intlcal_get_now intlcal_get_repeated_wall_time_option intlcal_get_skipped_wall_time_option intlcal_get_time intlcal_get_time_zone intlcal_get_type intlcal_get_weekend_transition intlcal_in_daylight_time intlcal_is_equivalent_to intlcal_is_lenient intlcal_is_set intlcal_is_weekend intlcal_roll intlcal_set intlcal_set_first_day_of_week intlcal_set_lenient intlcal_set_minimal_days_in_first_week intlcal_set_repeated_wall_time_option intlcal_set_skipped_wall_time_option intlcal_set_time intlcal_set_time_zone intlcal_to_date_time intlgregcal_create_instance intlgregcal_get_gregorian_change intlgregcal_is_leap_year intlgregcal_set_gregorian_change intltz_count_equivalent_ids intltz_create_default intltz_create_enumeration intltz_create_time_zone intltz_create_time_zone_id_enumeration intltz_from_date_time_zone intltz_get_canonical_id intltz_get_display_name intltz_get_dst_savings intltz_get_equivalent_id intltz_get_error_code intltz_get_error_message intltz_get_id_for_windows_id intltz_get_windows_id intltz_get_gmt intltz_get_id intltz_get_offset intltz_get_raw_offset intltz_get_region intltz_get_tz_data_version intltz_get_unknown intltz_has_same_rules intltz_to_date_time_zone intltz_use_daylight_time locale_accept_from_http locale_canonicalize locale_compose locale_filter_matches locale_get_all_variants locale_get_default locale_get_display_language locale_get_display_name locale_get_display_region locale_get_display_script locale_get_display_variant locale_get_keywords locale_get_primary_language locale_get_region locale_get_script locale_lookup locale_parse locale_set_default msgfmt_create msgfmt_format msgfmt_format_message msgfmt_get_error_code msgfmt_get_error_message msgfmt_get_locale msgfmt_get_pattern msgfmt_parse msgfmt_parse_message msgfmt_set_pattern normalizer_get_raw_decomposition normalizer_is_normalized normalizer_normalize numfmt_create numfmt_format numfmt_format_currency numfmt_get_attribute numfmt_get_error_code numfmt_get_error_message numfmt_get_locale numfmt_get_pattern numfmt_get_symbol numfmt_get_text_attribute numfmt_parse numfmt_parse_currency numfmt_set_attribute numfmt_set_pattern numfmt_set_symbol numfmt_set_text_attribute resourcebundle_count resourcebundle_create resourcebundle_get resourcebundle_get_error_code resourcebundle_get_error_message resourcebundle_locales transliterator_create transliterator_create_from_rules transliterator_create_inverse transliterator_get_error_code transliterator_get_error_message transliterator_list_ids transliterator_transliterate contained
syn keyword phpFunctions ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois contained
syn keyword phpFunctions java_last_exception_clear java_last_exception_get contained
syn keyword phpFunctions json_decode json_encode json_last_error json_last_error_msg contained
@@ -212,13 +212,13 @@ syn keyword phpFunctions aggregate_info aggregate_methods_by_list aggregate_meth
syn keyword phpFunctions ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob contained
syn keyword phpFunctions odbc_autocommit odbc_binmode odbc_close_all odbc_close odbc_columnprivileges odbc_columns odbc_commit odbc_connect odbc_cursor odbc_data_source odbc_do odbc_error odbc_errormsg odbc_exec odbc_execute odbc_fetch_array odbc_fetch_into odbc_fetch_object odbc_fetch_row odbc_field_len odbc_field_name odbc_field_num odbc_field_precision odbc_field_scale odbc_field_type odbc_foreignkeys odbc_free_result odbc_gettypeinfo odbc_longreadlen odbc_next_result odbc_num_fields odbc_num_rows odbc_pconnect odbc_prepare odbc_primarykeys odbc_procedurecolumns odbc_procedures odbc_result_all odbc_result odbc_rollback odbc_setoption odbc_specialcolumns odbc_statistics odbc_tableprivileges odbc_tables contained
syn keyword phpFunctions opcache_reset opcache_invalidate opcache_compile_file opcache_is_script_cached opcache_get_configuration opcache_get_status contained
syn keyword phpFunctions openssl_cipher_iv_length openssl_csr_export_to_file openssl_csr_export openssl_csr_get_public_key openssl_csr_get_subject openssl_csr_new openssl_csr_sign openssl_decrypt openssl_dh_compute_key openssl_digest openssl_encrypt openssl_error_string openssl_free_key openssl_get_cert_locations openssl_get_cipher_methods openssl_get_md_methods openssl_get_privatekey openssl_get_publickey openssl_open openssl_pbkdf2 openssl_pkcs12_export_to_file openssl_pkcs12_export openssl_pkcs12_read openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_free openssl_pkey_get_details openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_random_pseudo_bytes openssl_seal openssl_sign openssl_spki_export_challenge openssl_spki_export openssl_spki_new openssl_spki_verify openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_fingerprint openssl_x509_free openssl_x509_parse openssl_x509_read openssl_get_curve_names openssl_pkcs7_read openssl_pkey_derive openssl_x509_verify contained
syn keyword phpFunctions openssl_cipher_iv_length openssl_cms_decrypt openssl_cms_encrypt openssl_cms_read openssl_cms_sign openssl_cms_verify openssl_csr_export_to_file openssl_csr_export openssl_csr_get_public_key openssl_csr_get_subject openssl_csr_new openssl_csr_sign openssl_decrypt openssl_dh_compute_key openssl_digest openssl_encrypt openssl_error_string openssl_free_key openssl_get_cert_locations openssl_get_cipher_methods openssl_get_md_methods openssl_get_privatekey openssl_get_publickey openssl_open openssl_pbkdf2 openssl_pkcs12_export_to_file openssl_pkcs12_export openssl_pkcs12_read openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_free openssl_pkey_get_details openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_random_pseudo_bytes openssl_seal openssl_sign openssl_spki_export_challenge openssl_spki_export openssl_spki_new openssl_spki_verify openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_fingerprint openssl_x509_free openssl_x509_parse openssl_x509_read openssl_get_curve_names openssl_pkcs7_read openssl_pkey_derive openssl_x509_verify contained
syn keyword phpFunctions ora_bind ora_close ora_columnname ora_columnsize ora_columntype ora_commit ora_commitoff ora_commiton ora_do ora_error ora_errorcode ora_exec ora_fetch_into ora_fetch ora_getcolumn ora_logoff ora_logon ora_numcols ora_numrows ora_open ora_parse ora_plogon ora_rollback contained
syn keyword phpFunctions flush ob_clean ob_end_clean ob_end_flush ob_flush ob_get_clean ob_get_contents ob_get_flush ob_get_length ob_get_level ob_get_status ob_gzhandler ob_implicit_flush ob_list_handlers ob_start output_add_rewrite_var output_reset_rewrite_vars contained
syn keyword phpFunctions overload contained
syn keyword phpFunctions ovrimos_close ovrimos_commit ovrimos_connect ovrimos_cursor ovrimos_exec ovrimos_execute ovrimos_fetch_into ovrimos_fetch_row ovrimos_field_len ovrimos_field_name ovrimos_field_num ovrimos_field_type ovrimos_free_result ovrimos_longreadlen ovrimos_num_fields ovrimos_num_rows ovrimos_prepare ovrimos_result_all ovrimos_result ovrimos_rollback contained
syn keyword phpFunctions pcntl_exec pcntl_fork pcntl_signal pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig pcntl_alarm pcntl_async_signals pcntl_errno pcntl_get_last_error pcntl_getpriority pcntl_setpriority pcntl_signal_dispatch pcntl_signal_get_handler pcntl_sigprocmask pcntl_sigtimedwait pcntl_sigwaitinfo pcntl_strerror pcntl_unshare pcntl_wait pcntl_wifcontinued contained
syn keyword phpFunctions preg_filter preg_grep preg_last_error preg_match_all preg_match preg_quote preg_replace_callback preg_replace_callback_array preg_replace preg_split contained
syn keyword phpFunctions preg_filter preg_grep preg_last_error preg_last_error_msg preg_match_all preg_match preg_quote preg_replace_callback preg_replace_callback_array preg_replace preg_split contained
syn keyword phpFunctions pdo_drivers contained
syn keyword phpFunctions pdf_add_annotation pdf_add_bookmark pdf_add_launchlink pdf_add_locallink pdf_add_note pdf_add_outline pdf_add_pdflink pdf_add_thumbnail pdf_add_weblink pdf_arc pdf_arcn pdf_attach_file pdf_begin_page pdf_begin_pattern pdf_begin_template pdf_circle pdf_clip pdf_close_image pdf_close_pdi_page pdf_close_pdi pdf_close pdf_closepath_fill_stroke pdf_closepath_stroke pdf_closepath pdf_concat pdf_continue_text pdf_curveto pdf_delete pdf_end_page pdf_end_pattern pdf_end_template pdf_endpath pdf_fill_stroke pdf_fill pdf_findfont pdf_get_buffer pdf_get_font pdf_get_fontname pdf_get_fontsize pdf_get_image_height pdf_get_image_width pdf_get_majorversion pdf_get_minorversion pdf_get_parameter pdf_get_pdi_parameter pdf_get_pdi_value pdf_get_value pdf_initgraphics pdf_lineto pdf_makespotcolor pdf_moveto pdf_new pdf_open_CCITT pdf_open_file pdf_open_gif pdf_open_image_file pdf_open_image pdf_open_jpeg pdf_open_memory_image pdf_open_pdi_page pdf_open_pdi pdf_open_png pdf_open_tiff pdf_open pdf_place_image pdf_place_pdi_page pdf_rect pdf_restore pdf_rotate pdf_save pdf_scale pdf_set_border_color pdf_set_border_dash pdf_set_border_style pdf_set_char_spacing pdf_set_duration pdf_set_font pdf_set_horiz_scaling pdf_set_info_author pdf_set_info_creator pdf_set_info_keywords pdf_set_info_subject pdf_set_info_title pdf_set_info pdf_set_leading pdf_set_parameter pdf_set_text_matrix pdf_set_text_pos pdf_set_text_rendering pdf_set_text_rise pdf_set_value pdf_set_word_spacing pdf_setcolor pdf_setdash pdf_setflat pdf_setfont pdf_setgray_fill pdf_setgray_stroke pdf_setgray pdf_setlinecap pdf_setlinejoin pdf_setlinewidth pdf_setmatrix pdf_setmiterlimit pdf_setpolydash pdf_setrgbcolor_fill pdf_setrgbcolor_stroke pdf_setrgbcolor pdf_show_boxed pdf_show_xy pdf_show pdf_skew pdf_stringwidth pdf_stroke pdf_translate contained
syn keyword phpFunctions pfpro_cleanup pfpro_init pfpro_process_raw pfpro_process pfpro_version contained
@@ -242,13 +242,14 @@ syn keyword phpFunctions class_implements class_parents class_uses iterator_appl
syn keyword phpFunctions sqlite_array_query sqlite_busy_timeout sqlite_changes sqlite_close sqlite_column sqlite_create_aggregate sqlite_create_function sqlite_current sqlite_error_string sqlite_escape_string sqlite_fetch_array sqlite_fetch_single sqlite_fetch_string sqlite_field_name sqlite_has_more sqlite_last_error sqlite_last_insert_rowid sqlite_libencoding sqlite_libversion sqlite_next sqlite_num_fields sqlite_num_rows sqlite_open sqlite_popen sqlite_query sqlite_rewind sqlite_seek sqlite_udf_decode_binary sqlite_udf_encode_binary sqlite_unbuffered_query contained
syn keyword phpFunctions stream_context_create stream_context_get_options stream_context_set_option stream_context_set_params stream_copy_to_stream stream_filter_append stream_filter_prepend stream_filter_register stream_get_contents stream_get_filters stream_get_line stream_get_meta_data stream_get_transports stream_get_wrappers stream_register_wrapper stream_select stream_set_blocking stream_set_timeout stream_set_write_buffer stream_socket_accept stream_socket_client stream_socket_get_name stream_socket_recvfrom stream_socket_sendto stream_socket_server stream_wrapper_register contained
syn keyword phpFunctions addcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string count_chars crc32 crypt explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str print printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vprintf vsprintf wordwrap contained
syn keyword phpFunctions fdiv get_debug_type getdir str_contains str_ends_with str_starts_with
syn keyword phpFunctions swf_actiongeturl swf_actiongotoframe swf_actiongotolabel swf_actionnextframe swf_actionplay swf_actionprevframe swf_actionsettarget swf_actionstop swf_actiontogglequality swf_actionwaitforframe swf_addbuttonrecord swf_addcolor swf_closefile swf_definebitmap swf_definefont swf_defineline swf_definepoly swf_definerect swf_definetext swf_endbutton swf_enddoaction swf_endshape swf_endsymbol swf_fontsize swf_fontslant swf_fonttracking swf_getbitmapinfo swf_getfontinfo swf_getframe swf_labelframe swf_lookat swf_modifyobject swf_mulcolor swf_nextid swf_oncondition swf_openfile swf_ortho2 swf_ortho swf_perspective swf_placeobject swf_polarview swf_popmatrix swf_posround swf_pushmatrix swf_removeobject swf_rotate swf_scale swf_setfont swf_setframe swf_shapearc swf_shapecurveto3 swf_shapecurveto swf_shapefillbitmapclip swf_shapefillbitmaptile swf_shapefilloff swf_shapefillsolid swf_shapelinesolid swf_shapelineto swf_shapemoveto swf_showframe swf_startbutton swf_startdoaction swf_startshape swf_startsymbol swf_textwidth swf_translate swf_viewport contained
syn keyword phpFunctions sybase_affected_rows sybase_close sybase_connect sybase_data_seek sybase_deadlock_retry_count sybase_fetch_array sybase_fetch_assoc sybase_fetch_field sybase_fetch_object sybase_fetch_row sybase_field_seek sybase_free_result sybase_get_last_message sybase_min_client_severity sybase_min_error_severity sybase_min_message_severity sybase_min_server_severity sybase_num_fields sybase_num_rows sybase_pconnect sybase_query sybase_result sybase_select_db sybase_set_message_handler sybase_unbuffered_query contained
syn keyword phpFunctions tidy_access_count tidy_clean_repair tidy_config_count tidy_diagnose tidy_error_count tidy_get_body tidy_get_config tidy_get_error_buffer tidy_get_head tidy_get_html_ver tidy_get_html tidy_get_output tidy_get_release tidy_get_root tidy_get_status tidy_getopt tidy_is_xhtml tidy_load_config tidy_parse_file tidy_parse_string tidy_repair_file tidy_repair_string tidy_reset_config tidy_save_config tidy_set_encoding tidy_setopt tidy_warning_count tidy_is_xml tidy_get_opt_doc contained
syn keyword phpMethods attributes children get_attr get_nodes has_children has_siblings is_asp is_comment is_html is_jsp is_jste is_text is_xhtml is_xml next prev tidy_node contained
syn keyword phpFunctions token_get_all token_name contained
syn keyword phpFunctions base64_decode base64_encode get_meta_tags http_build_query parse_url rawurldecode rawurlencode urldecode urlencode contained
syn keyword phpFunctions doubleval empty floatval get_defined_vars get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export contained
syn keyword phpFunctions doubleval empty floatval get_defined_vars get_resource_id get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export contained
syn keyword phpFunctions get_called_class property_exists interface_exists trait_exists class_alias get_mangled_object_vars set_exception_handler restore_exception_handler get_declared_traits get_declared_interfaces get_resources gc_mem_caches gc_collect_cycles gc_enabled gc_enable gc_disable gc_status contained
syn keyword phpFunctions vpopmail_add_alias_domain_ex vpopmail_add_alias_domain vpopmail_add_domain_ex vpopmail_add_domain vpopmail_add_user vpopmail_alias_add vpopmail_alias_del_domain vpopmail_alias_del vpopmail_alias_get_all vpopmail_alias_get vpopmail_auth_user vpopmail_del_domain_ex vpopmail_del_domain vpopmail_del_user vpopmail_error vpopmail_passwd vpopmail_set_user_quota contained
syn keyword phpFunctions w32api_deftype w32api_init_dtype w32api_invoke_function w32api_register_function w32api_set_call_method contained
@@ -282,7 +283,7 @@ syn keyword phpStatement return break continue exit goto yield contained
syn keyword phpKeyword var const contained
" Type
syn keyword phpType void bool boolean int integer real double float string array object NULL callable iterable contained
syn keyword phpType void bool boolean int integer real double float string array object NULL callable iterable mixed contained
" Structure
syn keyword phpStructure namespace extends implements instanceof parent self contained
@@ -296,6 +297,7 @@ syn match phpOperator "&&\|\<and\>" contained display
syn match phpOperator "||\|\<x\=or\>" contained display
syn match phpRelation "[!=<>]=" contained display
syn match phpRelation "[<>]" contained display
syn match phpRelation "<=>" contained display
" PHP 8.0 adds the nullsafe operator ?-> for property access and method calls.
syn match phpMemberSelector "?\?->" contained display
syn match phpVarSelector "\$" contained display
@@ -313,10 +315,14 @@ syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contain
syn match phpInterpSimpleError "?\?->[^a-zA-Z_]" contained display
" make sure these stay above the correct DollarCurlies so they don't take priority
syn match phpInterpBogusDollarCurley "${[^}]*}" contained display " fallback (if nothing else matches)
syn match phpinterpSimpleBracketsInner "\w\+" contained
syn match phpInterpSimpleBrackets "\[\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
syn match phpInterpSimpleBrackets "\[\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
syn match phpInterpSimpleBrackets "\[0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
syn match phpInterpSimpleBracketsInner "\w\+" contained
syn match phpInterpSimpleBracketsInner "\$\h\w*" contained
syn match phpInterpSimpleBrackets "\[\$\?\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
" -0x1 and -123 refer to the string offsets '-0x1' and '-123' of array keys
" TODO: Support [1_2], [-0b1_10_1], etc (also literal strings).
syn match phpInterpSimpleBrackets "\[-\?\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
syn match phpInterpSimpleBrackets "\[-\?0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
syn match phpInterpSimpleBrackets "\[-\?0[bB][01]\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
syn match phpInterpSimple "\$\h\w*\(\[[^]]*\]\|?\?->\h\w*\)\?" contained contains=phpInterpSimpleBrackets,phpIdentifier,phpInterpSimpleError,phpMethods,phpMemberSelector display
syn match phpInterpVarname "\h\w*" contained
syn match phpInterpMethodName "\h\w*" contained " default color
@@ -515,7 +521,10 @@ syntax keyword phpSpecialFunction containedin=ALLBUT,phpComment,phpStringDouble,
hi def link phpSpecialFunction phpOperator
" Highlighting for PHP5's built-in classes
" - built-in classes harvested from get_declared_classes() in 5.1.4
" Note: Some of the names have inconsistent cases.
" Those are probably the actual name in reflection and should not be changed in
" this file.
" (CURLFile and CurlShareHandle, XMLReader and XmlParser, etc)
syntax keyword phpClasses containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier,phpMethodsVar
\ stdClass __PHP_Incomplete_Class php_user_filter AssertionError Directory ArrayObject
\ Exception ErrorException LogicException BadFunctionCallException BadMethodCallException DomainException
@@ -527,22 +536,34 @@ syntax keyword phpClasses containedin=ALLBUT,phpComment,phpStringDouble,phpStrin
\ RecursiveRegexIterator RecursiveTreeIterator RegexIterator SplDoublyLinkedList
\ SplFixedArray SplHeap SplMaxHeap SplMinHeap SplPriorityQueue SplQueue SplStack
\ InvalidArgumentException LengthException OutOfRangeException RuntimeException OutOfBoundsException
\ Attribute InternalIterator Stringable UnhandledMatchError ValueError WeakMap
\ OverflowException RangeException UnderflowException UnexpectedValueException
\ PDO PDOException PDOStatement PDORow
\ Reflection ReflectionFunction ReflectionParameter ReflectionMethod ReflectionClass
\ ReflectionObject ReflectionProperty ReflectionExtension ReflectionException
\ ReflectionClassConstant ReflectionFunctionAbstract ReflectionGenerator ReflectionNamedType
\ ReflectionReference ReflectionType ReflectionZendExtension
\ ReflectionAttribute ReflectionUnionType
\ SplFileInfo SplFileObject SplTempFileObject SplObjectStorage
\ XMLWriter LibXMLError XMLReader SimpleXMLElement SimpleXMLIterator
\ XmlParser
\ DeflateContext InflateContext
\ DOMException DOMStringList DOMNameList DOMDomError DOMErrorHandler
\ DOMImplementation DOMImplementationList DOMImplementationSource
\ DOMNode DOMNameSpaceNode DOMDocumentFragment DOMDocument DOMNodeList DOMNamedNodeMap
\ DOMCharacterData DOMAttr DOMElement DOMText DOMComment DOMTypeinfo DOMUserDataHandler
\ DOMLocator DOMConfiguration DOMCdataSection DOMDocumentType DOMNotation DOMEntity
\ DOMEntityReference DOMProcessingInstruction DOMStringExtend DOMXPath
\ DOMChildNode DOMParentNode
\ EnchantBroker EnchantDictionary
\ GdImage
\ OpenSSLAsymmetricKey OpenSSLCertificate OpenSSLCertificateSigningRequest
\ Shmop
\ AddressInfo Socket
\ SysvMessageQueue SysvSemaphore SysvSharedMemory
\ PhpToken
\ APCIterator APCuIterator
\ CURLFile
\ CURLFile CurlHandle CurlMultiHandle CurlShareHandle
\ DateInterval DatePeriod DateTime DateTimeImmutable DateTimeZone
\ finfo
\ GMP
@@ -566,7 +587,6 @@ syntax keyword phpInterfaces containedin=ALLBUT,phpComment,phpStringDouble,phpSt
\ Iterator IteratorAggregate RecursiveIterator OuterIterator SeekableIterator
\ Traversable ArrayAccess Serializable Countable SplObserver SplSubject Reflector
\ Throwable DateTimeInterface JsonSerializable SessionHandlerInterface SessionIdInterface SessionUpdateTimestampHandlerInterface
\
hi def link phpInterfaces phpConstant
@@ -604,6 +624,7 @@ if php_alt_comparisons
" highlight comparison operators differently
syntax match phpComparison "\v[=!]\=\=?" contained containedin=phpRegion
syntax match phpComparison "\v[=<>-]@<![<>]\=?[<>]@!" contained containedin=phpRegion
syntax match phpComparison "<=>" contained containedin=phpRegion
" highlight the 'instanceof' operator as a comparison operator rather than a structure
syntax case ignore

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: PROLOG
" Maintainer: Anton Kochkov <anton.kochkov@gmail.com>
" Last Change: 2019 Aug 29
" Last Change: 2021 Jan 05
" There are two sets of highlighting in here:
" If the "prolog_highlighting_clean" variable exists, it is rather sparse.
@@ -21,16 +21,16 @@ syn case match
" Very simple highlighting for comments, clause heads and
" character codes. It respects prolog strings and atoms.
syn region prologCComment start=+/\*+ end=+\*/+
syn match prologComment +%.*+
syn region prologCComment start=+/\*+ end=+\*/+ contains=@Spell
syn match prologComment +%.*+ contains=@Spell
if !exists("prolog_highlighting_no_keyword")
syn keyword prologKeyword module meta_predicate multifile dynamic
endif
syn match prologCharCode +0'\\\=.+
syn region prologString start=+"+ skip=+\\\\\|\\"+ end=+"+
syn region prologString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
syn region prologAtom start=+'+ skip=+\\\\\|\\'+ end=+'+
syn region prologClause matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause
syn region prologClause matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause contains=@NoSpell
if !exists("prolog_highlighting_clean")

View File

@@ -0,0 +1,88 @@
" Vim syntax file
" Language: S-expressions as used in Sexplib
" Filenames: *.sexp
" Maintainers: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change: 2020 Dec 31 - Updated header for Vim contribution (MM)
" 2017 Apr 11 - Improved matching of negative numbers (MM)
" 2012 Jun 20 - Fixed a block comment highlighting bug (MM)
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax") && b:current_syntax == "sexplib"
finish
endif
" Sexplib is case sensitive.
syn case match
" Comments
syn keyword sexplibTodo contained TODO FIXME XXX NOTE
syn region sexplibBlockComment matchgroup=sexplibComment start="#|" matchgroup=sexplibComment end="|#" contains=ALLBUT,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibEncl,sexplibComment
syn match sexplibSexpComment "#;" skipwhite skipempty nextgroup=sexplibQuotedAtomComment,sexplibUnquotedAtomComment,sexplibListComment,sexplibComment
syn region sexplibQuotedAtomComment start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
syn match sexplibUnquotedAtomComment /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/ contained
syn region sexplibListComment matchgroup=sexplibComment start="(" matchgroup=sexplibComment end=")" contained contains=ALLBUT,sexplibEncl,sexplibString,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibTodo,sexplibNumber,sexplibFloat
syn match sexplibComment ";.*" contains=sexplibTodo
" Atoms
syn match sexplibUnquotedAtom /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/
syn region sexplibQuotedAtom start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match sexplibNumber "-\=\<\d\(_\|\d\)*[l|L|n]\?\>"
syn match sexplibNumber "-\=\<0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
syn match sexplibNumber "-\=\<0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
syn match sexplibNumber "-\=\<0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
syn match sexplibFloat "-\=\<\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
" Lists
syn region sexplibEncl transparent matchgroup=sexplibEncl start="(" matchgroup=sexplibEncl end=")" contains=ALLBUT,sexplibParenErr
" Errors
syn match sexplibUnquotedAtomErr /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*\(#|\||#\)[^;()" \t]*/
syn match sexplibParenErr ")"
" Synchronization
syn sync minlines=50
syn sync maxlines=500
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_sexplib_syntax_inits")
if version < 508
let did_sexplib_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink sexplibParenErr Error
HiLink sexplibUnquotedAtomErr Error
HiLink sexplibComment Comment
HiLink sexplibSexpComment Comment
HiLink sexplibQuotedAtomComment Include
HiLink sexplibUnquotedAtomComment Comment
HiLink sexplibBlockComment Comment
HiLink sexplibListComment Comment
HiLink sexplibBoolean Boolean
HiLink sexplibCharacter Character
HiLink sexplibNumber Number
HiLink sexplibFloat Float
HiLink sexplibUnquotedAtom Identifier
HiLink sexplibEncl Identifier
HiLink sexplibQuotedAtom Keyword
HiLink sexplibTodo Todo
HiLink sexplibEncl Keyword
delcommand HiLink
endif
let b:current_syntax = "sexplib"
" vim: ts=8

View File

@@ -36,6 +36,7 @@ syn keyword silConventions
\ c
\ method
\ objc_method
\ sil_differentiability_witness
\ thick
\ thin
\ witness_method

View File

@@ -3,13 +3,16 @@
" Filenames: *.sml *.sig
" Maintainers: Markus Mottl <markus.mottl@gmail.com>
" Fabrizio Zeno Cornelli <zeno@filibusta.crema.unimi.it>
" URL: http://www.ocaml.info/vim/syntax/sml.vim
" Last Change: 2006 Oct 23 - Fixed character highlighting bug (MM)
" 2002 Jun 02 - Fixed small typo (MM)
" 2001 Nov 20 - Fixed small highlighting bug with modules (MM)
" Last Change: 2019 Oct 01 - Only spell check strings & comments (Chuan Wei Foo)
" 2015 Aug 31 - Fixed opening of modules (Ramana Kumar)
" 2006 Oct 23 - Fixed character highlighting bug (MM)
" quit when a syntax file was already loaded
if exists("b:current_syntax")
" Disable spell checking of syntax.
syn spell notoplevel
finish
endif
@@ -52,7 +55,7 @@ syn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=sm
" Comments
syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo
syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo,@Spell
syn keyword smlTodo contained TODO FIXME XXX
@@ -82,7 +85,7 @@ syn region smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule en
syn region smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr
" "open"
syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment
syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment
" "structure" - somewhat complicated stuff ;-)
syn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef
@@ -136,7 +139,7 @@ syn match smlModPath "\u\(\w\|'\)*\."he=e-1
syn match smlCharacter +#"\\""\|#"."\|#"\\\d\d\d"+
syn match smlCharErr +#"\\\d\d"\|#"\\\d"+
syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+
syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
syn match smlFunDef "=>"
syn match smlRefAssign ":="
@@ -149,9 +152,9 @@ syn match smlKeyChar ";"
syn match smlKeyChar "\*"
syn match smlKeyChar "="
syn match smlNumber "\<-\=\d\+\>"
syn match smlNumber "\<-\=0[x|X]\x\+\>"
syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
syn match smlNumber "\<-\=\d\+\>"
syn match smlNumber "\<-\=0[x|X]\x\+\>"
syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
" Synchronization
syn sync minlines=20
@@ -167,49 +170,49 @@ syn sync match smlSigSync groupthere smlSig "\<end\>"
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link smlBraceErr Error
hi def link smlBrackErr Error
hi def link smlParenErr Error
hi def link smlBraceErr Error
hi def link smlBrackErr Error
hi def link smlParenErr Error
hi def link smlCommentErr Error
hi def link smlCommentErr Error
hi def link smlEndErr Error
hi def link smlThenErr Error
hi def link smlEndErr Error
hi def link smlThenErr Error
hi def link smlCharErr Error
hi def link smlCharErr Error
hi def link smlComment Comment
hi def link smlComment Comment
hi def link smlModPath Include
hi def link smlModule Include
hi def link smlModParam1 Include
hi def link smlModType Include
hi def link smlMPRestr3 Include
hi def link smlFullMod Include
hi def link smlModPath Include
hi def link smlModule Include
hi def link smlModParam1 Include
hi def link smlModType Include
hi def link smlMPRestr3 Include
hi def link smlFullMod Include
hi def link smlModTypeRestr Include
hi def link smlWith Include
hi def link smlMTDef Include
hi def link smlWith Include
hi def link smlMTDef Include
hi def link smlConstructor Constant
hi def link smlModPreRHS Keyword
hi def link smlMPRestr2 Keyword
hi def link smlKeyword Keyword
hi def link smlFunDef Keyword
hi def link smlRefAssign Keyword
hi def link smlKeyChar Keyword
hi def link smlAnyVar Keyword
hi def link smlTopStop Keyword
hi def link smlOperator Keyword
hi def link smlModPreRHS Keyword
hi def link smlMPRestr2 Keyword
hi def link smlKeyword Keyword
hi def link smlFunDef Keyword
hi def link smlRefAssign Keyword
hi def link smlKeyChar Keyword
hi def link smlAnyVar Keyword
hi def link smlTopStop Keyword
hi def link smlOperator Keyword
hi def link smlBoolean Boolean
hi def link smlCharacter Character
hi def link smlNumber Number
hi def link smlReal Float
hi def link smlString String
hi def link smlType Type
hi def link smlTodo Todo
hi def link smlEncl Keyword
hi def link smlBoolean Boolean
hi def link smlCharacter Character
hi def link smlNumber Number
hi def link smlReal Float
hi def link smlString String
hi def link smlType Type
hi def link smlTodo Todo
hi def link smlEncl Keyword
let b:current_syntax = "sml"

View File

@@ -21,10 +21,11 @@ let s:keepcpo = &cpo
set cpo&vim
syn keyword swiftKeyword
\ associatedtype
\ break
\ case
\ catch
\ continue
\ default
\ defer
\ do
\ else
@@ -43,6 +44,10 @@ syn keyword swiftKeyword
syn match swiftMultiwordKeyword
\ "indirect case"
syn keyword swiftCoreTypes
\ Any
\ AnyObject
syn keyword swiftImport skipwhite skipempty nextgroup=swiftImportModule
\ import
@@ -93,10 +98,13 @@ syn keyword swiftTypeDefinition skipwhite skipempty nextgroup=swiftTypeName
\ class
\ enum
\ extension
\ operator
\ precedencegroup
\ protocol
\ struct
syn keyword swiftTypeAliasDefinition skipwhite skipempty nextgroup=swiftTypeAliasName
\ associatedtype
\ typealias
syn match swiftMultiwordTypeDefinition skipwhite skipempty nextgroup=swiftTypeName
@@ -202,7 +210,7 @@ syn match swiftDecimal contained
\ /[0-9]\+/
syn match swiftPreproc
\ /#\(\<file\>\|\<line\>\|\<function\>\)/
\ /#\(\<column\>\|\<dsohandle\>\|\<file\>\|\<line\>\|\<function\>\)/
syn match swiftPreproc
\ /^\s*#\(\<if\>\|\<else\>\|\<elseif\>\|\<endif\>\|\<error\>\|\<warning\>\)/
syn region swiftPreprocFalse
@@ -213,9 +221,9 @@ syn match swiftAttribute
syn keyword swiftTodo MARK TODO FIXME contained
syn match swiftCastOp skipwhite skipempty nextgroup=swiftType
syn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes
\ "\<is\>"
syn match swiftCastOp skipwhite skipempty nextgroup=swiftType
syn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes
\ "\<as\>[!?]\?"
syn match swiftNilOps
@@ -228,6 +236,7 @@ hi def link swiftImport Include
hi def link swiftImportModule Title
hi def link swiftImportComponent Identifier
hi def link swiftKeyword Statement
hi def link swiftCoreTypes Type
hi def link swiftMultiwordKeyword Statement
hi def link swiftTypeDefinition Define
hi def link swiftMultiwordTypeDefinition Define

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Vim 8.0 script
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
" Last Change: October 06, 2020
" Version: 8.0-45
" Last Change: December 14, 2020
" Version: 8.0-47
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
" Automatically generated keyword lists: {{{1
@@ -19,12 +19,12 @@ syn keyword vimTodo contained COMBAK FIXME TODO XXX
syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
syn keyword vimCommand contained a ar[gs] argl[ocal] ba[ll] bm[odified] breaka[dd] bun[load] cabc[lear] cal[l] cc cf[ile] changes cla[st] cnew[er] com cope[n] cscope debug delep dell diffg[et] dig[raphs] do dsp[lit] echom[sg] enddef eval f[ile] fina[lly] foldd[oopen] go[to] ha[rdcopy] hid[e] ij[ump] inor j[oin] keepj[umps] lab[ove] lat lc[d] le[ft] lg[etfile] lhi[story] lmapc[lear] loadkeymap lpf[ile] luafile mak[e] mks[ession] mzf[ile] nmapc[lear] nos[wapfile] opt[ions] pe[rl] pre[serve] promptr[epl] ptl[ast] pw[d] pydo pyxfile red[o] res[ize] ru[ntime] sI sIp sav[eas] sbm[odified] sce scripte[ncoding] setg[lobal] sgc sgr sign sl[eep] smile sor[t] spellr[epall] srI srn startr[eplace] sunme syn ta[g] tabf[ind] tabo[nly] tcd tf[irst] tln tmapc[lear] try una[bbreviate] unlo[ckvar] ve[rsion] vim9 vmapc[lear] wa[ll] winp[os] wundo xme xr[estore]
syn keyword vimCommand contained ab arga[dd] argu[ment] bad[d] bn[ext] breakd[el] bw[ipeout] cabo[ve] cat[ch] ccl[ose] cfdo chd[ir] class cnf[ile] comc[lear] cp[revious] cstag debugg[reedy] deletel delm[arks] diffo[ff] dir doau e[dit] echon endf[unction] ex files fini[sh] folddoc[losed] gr[ep] helpc[lose] his[tory] il[ist] interface ju[mps] keepp[atterns] lad[dexpr] later lch[dir] lefta[bove] lgetb[uffer] ll lne[xt] loc[kmarks] lr[ewind] lv[imgrep] marks mksp[ell] n[ext] noa nu[mber] ownsyntax ped[it] prev[ious] ps[earch] ptn[ext] py3 pyf[ile] q[uit] redi[r] ret[ab] rub[y] sIc sIr sbN[ext] sbn[ext] scg scriptv[ersion] setl[ocal] sge sh[ell] sil[ent] sla[st] sn[ext] sp[lit] spellr[rare] src srp stj[ump] sunmenu sync tab tabfir[st] tabp[revious] tch[dir] th[row] tlnoremenu tn[ext] ts[elect] undoj[oin] uns[ilent] verb[ose] vim9script vne[w] wh[ile] wn[ext] wv[iminfo] xmenu xunme
syn keyword vimCommand contained abc[lear] argd[elete] as[cii] bd[elete] bo[tright] breakl[ist] cN[ext] cad[dbuffer] cb[uffer] cd cfir[st] che[ckpath] cle[arjumps] cnor comp[iler] cpf[ile] cun def deletep delp diffp[atch] disa[ssemble] doaut ea el[se] endfo[r] exi[t] filet fir[st] foldo[pen] grepa[dd] helpf[ind] i imapc[lear] intro k lN[ext] laddb[uffer] lb[uffer] lcl[ose] lex[pr] lgete[xpr] lla[st] lnew[er] lockv[ar] ls lvimgrepa[dd] mat[ch] mkv[imrc] nb[key] noautocmd o[pen] p[rint] perld[o] pro ptN[ext] ptp[revious] py3do python3 qa[ll] redr[aw] retu[rn] rubyd[o] sIe sN[ext] sb[uffer] sbp[revious] sci scs sf[ind] sgi si sim[alt] sm[agic] sno[magic] spe[llgood] spellu[ndo] sre[wind] st[op] stopi[nsert] sus[pend] syncbind tabN[ext] tabl[ast] tabr[ewind] tcld[o] tj[ump] tlu tno[remap] tu[nmenu] undol[ist] up[date] vert[ical] vim[grep] vs[plit] win[size] wp[revious] x[it] xnoreme xunmenu
syn keyword vimCommand contained abo[veleft] argdo au bel[owright] bp[revious] bro[wse] cNf[ile] cadde[xpr] cbe[fore] cdo cg[etfile] checkt[ime] clo[se] co[py] con[tinue] cq[uit] cuna[bbrev] defc[ompile] deletl dep diffpu[t] dj[ump] dp earlier elsei[f] endt[ry] exp filetype fix[del] for gui helpg[rep] ia imp is[earch] kee[pmarks] lNf[ile] laddf[ile] lbe[fore] lcs lf[ile] lgr[ep] lli[st] lnf[ile] lol[der] lt[ag] lw[indow] menut[ranslate] mkvie[w] nbc[lose] noh[lsearch] ol[dfiles] pa[ckadd] po[p] prof[ile] pta[g] ptr[ewind] py3f[ile] pythonx quita[ll] redraws[tatus] rew[ind] rubyf[ile] sIg sa[rgument] sba[ll] sbr[ewind] scl scscope sfir[st] sgl sic sin sm[ap] snoreme spelld[ump] spellw[rong] srg sta[g] sts[elect] sv[iew] syntime tabc[lose] tabm[ove] tabs tclf[ile] tl[ast] tlunmenu to[pleft] tunma[p] unh[ide] v vi[sual] vimgrepa[dd] wN[ext] winc[md] wq xa[ll] xnoremenu xwininfo
syn keyword vimCommand contained addd arge[dit] bN[ext] bf[irst] br[ewind] bufdo c[hange] caddf[ile] cbel[ow] ce[nter] cgetb[uffer] chi[story] cmapc[lear] col[der] conf[irm] cr[ewind] cw[indow] delc[ommand] deletp di[splay] diffs[plit] dl dr[op] ec em[enu] endw[hile] export filt[er] fo[ld] fu[nction] gvim helpt[ags] iabc[lear] import isp[lit] keepa l[ist] laf[ter] lbel[ow] lcscope lfdo lgrepa[dd] lma lo[adview] lop[en] lua m[ove] mes[sages] mod[e] nbs[tart] nor omapc[lear] packl[oadall] popu[p] profd[el] ptf[irst] pts[elect] py3f[ile] pyx r[ead] redrawt[abline] ri[ght] rundo sIl sal[l] sbf[irst] sc scp se[t] sg sgn sie sip sme snoremenu spelli[nfo] spr[evious] sri star[tinsert] substitutepattern sw[apname] t tabd[o] tabn[ext] tags te[aroff] tlm tm[enu] tp[revious] type unl var vie[w] viu[sage] w[rite] windo wqa[ll] xmapc[lear] xprop y[ank]
syn keyword vimCommand contained al[l] argg[lobal] b[uffer] bl[ast] brea[k] buffers ca caf[ter] cbo[ttom] cex[pr] cgete[xpr] cl[ist] cn[ext] colo[rscheme] cons[t] cs d[elete] delel delf[unction] dif[fupdate] difft[his] dli[st] ds[earch] echoe[rr] en[dif] ene[w] exu[sage] fin[d] foldc[lose] g h[elp] hi if in iuna[bbrev] keepalt la[st] lan[guage] lbo[ttom] ld[o] lfir[st] lh[elpgrep] lmak[e] loadk lp[revious] luado ma[rk] mk[exrc] mz[scheme] new nore on[ly] pc[lose] pp[op] promptf[ind] ptj[ump] pu[t] py[thon] pyxdo rec[over] reg[isters] rightb[elow] rv[iminfo] sIn san[dbox] sbl[ast] scI scr[iptnames] setf[iletype] sgI sgp sig sir smenu so[urce] spellr[are] sr srl startg[replace] sun[hide] sy tN[ext] tabe[dit] tabnew tc[l] ter[minal] tlmenu tma[p] tr[ewind] u[ndo]
syn keyword vimCommand contained a ar[gs] argl[ocal] ba[ll] bl[ast] brea[k] buffers ca caf[ter] cbo[ttom] cex[pr] cgete[xpr] cl[ist] cn[ext] colo[rscheme] cons[t] cs d[elete] delel delf[unction] dif[fupdate] difft[his] dli[st] ds[earch] echoe[rr] en[dif] ene[w] exu[sage] fin[d] foldc[lose] g h[elp] hi if in iuna[bbrev] keepalt la[st] lan[guage] lbo[ttom] ld[o] lfir[st] lh[elpgrep] lmak[e] loadk lp[revious] luado ma[rk] mk[exrc] mz[scheme] new nore on[ly] pc[lose] pp[op] promptf[ind] ptj[ump] pu[t] py[thon] pyxdo rec[over] reg[isters] rightb[elow] rv[iminfo] sIn san[dbox] sbl[ast] scI scr[iptnames] setf[iletype] sgI sgp sig sir smenu so[urce] spellr[are] sr srl startg[replace] sun[hide] sy tN[ext] tabe[dit] tabnew tc[l] ter[minal] tlmenu tma[p] tr[ewind] u[ndo] unlo[ckvar] ve[rsion] vim9 vmapc[lear] wa[ll] winp[os] wundo xme xr[estore]
syn keyword vimCommand contained ab arga[dd] argu[ment] bad[d] bm[odified] breaka[dd] bun[load] cabc[lear] cal[l] cc cf[ile] changes cla[st] cnew[er] com cope[n] cscope debug delep dell diffg[et] dig[raphs] do dsp[lit] echom[sg] enddef eval f[ile] fina[lly] foldd[oopen] go[to] ha[rdcopy] hid[e] ij[ump] inor j[oin] keepj[umps] lab[ove] lat lc[d] le[ft] lg[etfile] lhi[story] lmapc[lear] loadkeymap lpf[ile] luafile mak[e] mks[ession] mzf[ile] nmapc[lear] nos[wapfile] opt[ions] pe[rl] pre[serve] promptr[epl] ptl[ast] pw[d] pydo pyxfile red[o] res[ize] ru[ntime] sI sIp sav[eas] sbm[odified] sce scripte[ncoding] setg[lobal] sgc sgr sign sl[eep] smile sor[t] spellr[epall] srI srn startr[eplace] sunme syn ta[g] tabf[ind] tabo[nly] tcd tf[irst] tln tmapc[lear] try una[bbreviate] uns[ilent] verb[ose] vim9script vne[w] wh[ile] wn[ext] wv[iminfo] xmenu xunme
syn keyword vimCommand contained abc[lear] argd[elete] as[cii] balt bn[ext] breakd[el] bw[ipeout] cabo[ve] cat[ch] ccl[ose] cfdo chd[ir] class cnf[ile] comc[lear] cp[revious] cstag debugg[reedy] deletel delm[arks] diffo[ff] dir doau e[dit] echon endf[unction] ex files fini[sh] folddoc[losed] gr[ep] helpc[lose] his[tory] il[ist] interface ju[mps] keepp[atterns] lad[dexpr] later lch[dir] lefta[bove] lgetb[uffer] ll lne[xt] loc[kmarks] lr[ewind] lv[imgrep] marks mksp[ell] n[ext] noa nu[mber] ownsyntax ped[it] prev[ious] ps[earch] ptn[ext] py3 pyf[ile] q[uit] redi[r] ret[ab] rub[y] sIc sIr sbN[ext] sbn[ext] scg scriptv[ersion] setl[ocal] sge sh[ell] sil[ent] sla[st] sn[ext] sp[lit] spellr[rare] src srp stj[ump] sunmenu sync tab tabfir[st] tabp[revious] tch[dir] th[row] tlnoremenu tn[ext] ts[elect] undoj[oin] up[date] vert[ical] vim[grep] vs[plit] win[size] wp[revious] x[it] xnoreme xunmenu
syn keyword vimCommand contained abo[veleft] argdo au bd[elete] bo[tright] breakl[ist] cN[ext] cad[dbuffer] cb[uffer] cd cfir[st] che[ckpath] cle[arjumps] cnor comp[iler] cpf[ile] cun def deletep delp diffp[atch] disa[ssemble] doaut ea el[se] endfo[r] exi[t] filet fir[st] foldo[pen] grepa[dd] helpf[ind] i imapc[lear] intro k lN[ext] laddb[uffer] lb[uffer] lcl[ose] lex[pr] lgete[xpr] lla[st] lnew[er] lockv[ar] ls lvimgrepa[dd] mat[ch] mkv[imrc] nb[key] noautocmd o[pen] p[rint] perld[o] pro ptN[ext] ptp[revious] py3do python3 qa[ll] redr[aw] retu[rn] rubyd[o] sIe sN[ext] sb[uffer] sbp[revious] sci scs sf[ind] sgi si sim[alt] sm[agic] sno[magic] spe[llgood] spellu[ndo] sre[wind] st[op] stopi[nsert] sus[pend] syncbind tabN[ext] tabl[ast] tabr[ewind] tcld[o] tj[ump] tlu tno[remap] tu[nmenu] undol[ist] v vi[sual] vimgrepa[dd] wN[ext] winc[md] wq xa[ll] xnoremenu xwininfo
syn keyword vimCommand contained addd arge[dit] bN[ext] bel[owright] bp[revious] bro[wse] cNf[ile] cadde[xpr] cbe[fore] cdo cg[etfile] checkt[ime] clo[se] co[py] con[tinue] cq[uit] cuna[bbrev] defc[ompile] deletl dep diffpu[t] dj[ump] dp earlier elsei[f] endt[ry] exp filetype fix[del] for gui helpg[rep] ia imp is[earch] kee[pmarks] lNf[ile] laddf[ile] lbe[fore] lcs lf[ile] lgr[ep] lli[st] lnf[ile] lol[der] lt[ag] lw[indow] menut[ranslate] mkvie[w] nbc[lose] noh[lsearch] ol[dfiles] pa[ckadd] po[p] prof[ile] pta[g] ptr[ewind] py3f[ile] pythonx quita[ll] redraws[tatus] rew[ind] rubyf[ile] sIg sa[rgument] sba[ll] sbr[ewind] scl scscope sfir[st] sgl sic sin sm[ap] snoreme spelld[ump] spellw[rong] srg sta[g] sts[elect] sv[iew] syntime tabc[lose] tabm[ove] tabs tclf[ile] tl[ast] tlunmenu to[pleft] tunma[p] unh[ide] var vie[w] viu[sage] w[rite] windo wqa[ll] xmapc[lear] xprop y[ank]
syn keyword vimCommand contained al[l] argg[lobal] b[uffer] bf[irst] br[ewind] bufdo c[hange] caddf[ile] cbel[ow] ce[nter] cgetb[uffer] chi[story] cmapc[lear] col[der] conf[irm] cr[ewind] cw[indow] delc[ommand] deletp di[splay] diffs[plit] dl dr[op] ec em[enu] endw[hile] export filt[er] fo[ld] fu[nction] gvim helpt[ags] iabc[lear] import isp[lit] keepa l[ist] laf[ter] lbel[ow] lcscope lfdo lgrepa[dd] lma lo[adview] lop[en] lua m[ove] mes[sages] mod[e] nbs[tart] nor omapc[lear] packl[oadall] popu[p] profd[el] ptf[irst] pts[elect] py3f[ile] pyx r[ead] redrawt[abline] ri[ght] rundo sIl sal[l] sbf[irst] sc scp se[t] sg sgn sie sip sme snoremenu spelli[nfo] spr[evious] sri star[tinsert] substitutepattern sw[apname] t tabd[o] tabn[ext] tags te[aroff] tlm tm[enu] tp[revious] type unl
syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man N[ext] Over P[rint] Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Winbar XMLent XMLns
@@ -66,8 +66,8 @@ syn keyword vimErrSetting contained bioskey biosk conskey consk autoprint beauti
" AutoCmd Events {{{2
syn case ignore
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave WinNew
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre BufWinEnter
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinLeave BufWrite BufWritePost CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre MenuPopup OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinEnter WinLeave WinNew
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre BufWinEnter BufWipeout BufWriteCmd BufWritePre
" Highlight commonly used Groupnames {{{2
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
@@ -78,11 +78,12 @@ syn match vimHLGroup contained "Conceal"
syn case match
" Function Names {{{2
syn keyword vimFuncName contained abs appendbufline asin assert_fails assert_notmatch balloon_gettext bufadd bufname byteidx char2nr chdir ch_info ch_readblob ch_status complete_add cos debugbreak diff_filler escape exepath extend finddir fmod foldlevel function getbufvar getcmdline getcurpos getfsize getline getpid getregtype gettext getwinvar has_key histget iconv inputlist interrupt isnan job_start js_encode libcall list2str log mapcheck matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_list prop_type_get pyeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcmdpos setmatches settabwinvar shiftwidth sign_place simplify soundfold spellsuggest str2float strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_function test_option_not_set test_settime timer_pause toupper undofile visualmode win_execute winheight winnr win_splitmove
syn keyword vimFuncName contained acos argc assert_beeps assert_false assert_report balloon_show bufexists bufnr byteidxcomp charclass ch_evalexpr ch_log ch_readraw cindent complete_check cosh deepcopy diff_hlID eval exists feedkeys findfile fnameescape foldtext garbagecollect getchangelist getcmdpos getcwd getftime getloclist getpos gettabinfo getwininfo glob haslocaldir histnr indent inputrestore invert items job_status json_decode libcallnr listener_add log10 mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_remove prop_type_list pyxeval readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setenv setpos settagstack sign_define sign_placelist sin sound_playevent split str2list strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_ignore_error test_null_job test_override test_srand_seed timer_start tr undotree wildmenumode win_findbuf win_id2tabwin winrestcmd winwidth
syn keyword vimFuncName contained add argidx assert_equal assert_inrange assert_true balloon_split buflisted bufwinid call ch_canread ch_evalraw ch_logfile ch_sendexpr clearmatches complete_info count delete echoraw eventhandler exp filereadable flatten fnamemodify foldtextresult get getchar getcmdtype getenv getftype getmarklist getqflist gettabvar getwinpos glob2regpat hasmapto hlexists index inputsave isdirectory job_getchannel job_stop json_encode line listener_flush luaeval match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_type_add pum_getpos rand reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playfile sqrt str2nr strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_null_blob test_null_list test_refcount test_unknown timer_stop trim uniq winbufnr win_getid win_id2win winrestview wordcount
syn keyword vimFuncName contained and arglistid assert_equalfile assert_match atan browse bufload bufwinnr ceil ch_close ch_getbufnr ch_open ch_sendraw col confirm cscope_connection deletebufline empty executable expand filewritable float2nr foldclosed foreground getbufinfo getcharmod getcmdwintype getfontname getimstatus getmatches getreg gettabwinvar getwinposx globpath histadd hlID input inputsecret isinf job_info join keys line2byte listener_remove map matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_clear prop_type_change pumvisible range reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setline setreg sha256 sign_getplaced sign_unplace sort sound_stop srand strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc values wincol win_gettype winlayout winsaveview writefile
syn keyword vimFuncName contained append argv assert_exception assert_notequal atan2 browsedir bufloaded byte2line changenr ch_close_in ch_getjob ch_read ch_setoptions complete copy cursor did_filetype environ execute expandcmd filter floor foldclosedend funcref getbufline getcharsearch getcompletion getfperm getjumplist getmousepos getreginfo gettagstack getwinposy has histdel hostname inputdialog insert islocked job_setoptions js_decode len lispindent localtime maparg matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_find prop_type_delete py3eval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharsearch setloclist settabvar shellescape sign_jump sign_unplacelist sound_clear spellbadword state strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_dict test_null_string test_setmouse timer_info tolower type virtcol windowsversion win_gotoid winline win_screenpos xor
syn keyword vimFuncName contained abs argc assert_beeps assert_false assert_report balloon_show bufexists bufnr byteidxcomp charclass ch_evalexpr ch_log ch_readraw cindent complete_check cosh deepcopy diff_hlID eval exists feedkeys findfile fnameescape foldtext garbagecollect getchangelist getcmdpos getcwd getftime getloclist getpos gettabinfo getwininfo glob haslocaldir histnr indent inputrestore invert items job_status json_decode libcallnr listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_list prop_type_get pyeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcmdpos setmatches settabwinvar shiftwidth sign_place simplify soundfold spellsuggest str2float strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_function test_option_not_set test_settime timer_pause toupper undofile visualmode win_execute winheight winnr win_splitmove
syn keyword vimFuncName contained acos argidx assert_equal assert_inrange assert_true balloon_split buflisted bufwinid call ch_canread ch_evalraw ch_logfile ch_sendexpr clearmatches complete_info count delete echoraw eventhandler exp filereadable flatten fnamemodify foldtextresult get getchar getcmdtype getenv getftype getmarklist getqflist gettabvar getwinpos glob2regpat hasmapto hlexists index inputsave isdirectory job_getchannel job_stop json_encode line listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_remove prop_type_list pyxeval readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setenv setpos settagstack sign_define sign_placelist sin sound_playevent split str2list strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_ignore_error test_null_job test_override test_srand_seed timer_start tr undotree wildmenumode win_findbuf win_id2tabwin winrestcmd winwidth
syn keyword vimFuncName contained add arglistid assert_equalfile assert_match atan browse bufload bufwinnr ceil ch_close ch_getbufnr ch_open ch_sendraw col confirm cscope_connection deletebufline empty executable expand filewritable float2nr foldclosed foreground getbufinfo getcharmod getcmdwintype getfontname getimstatus getmatches getreg gettabwinvar getwinposx globpath histadd hlID input inputsecret isinf job_info join keys line2byte listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_type_add pum_getpos rand reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playfile sqrt str2nr strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_null_blob test_null_list test_refcount test_unknown timer_stop trim uniq winbufnr win_getid win_id2win winrestview wordcount
syn keyword vimFuncName contained and argv assert_exception assert_notequal atan2 browsedir bufloaded byte2line changenr ch_close_in ch_getjob ch_read ch_setoptions complete copy cursor did_filetype environ execute expandcmd filter floor foldclosedend funcref getbufline getcharsearch getcompletion getfperm getjumplist getmousepos getreginfo gettagstack getwinposy has histdel hostname inputdialog insert islocked job_setoptions js_decode len lispindent localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_clear prop_type_change pumvisible range reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setline setreg sha256 sign_getplaced sign_unplace sort sound_stop srand strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc values wincol win_gettype winlayout winsaveview writefile
syn keyword vimFuncName contained append asin assert_fails assert_notmatch balloon_gettext bufadd bufname byteidx char2nr chdir ch_info ch_readblob ch_status complete_add cos debugbreak diff_filler escape exepath extend finddir fmod foldlevel function getbufvar getcmdline getcurpos getfsize getline getpid getregtype gettext getwinvar has_key histget iconv inputlist interrupt isnan job_start js_encode libcall list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_find prop_type_delete py3eval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharsearch setloclist settabvar shellescape sign_jump sign_unplacelist sound_clear spellbadword state strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_dict test_null_string test_setmouse timer_info tolower type virtcol windowsversion win_gotoid winline win_screenpos xor
syn keyword vimFuncName contained appendbufline
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1
@@ -169,10 +170,13 @@ endif
" Numbers {{{2
" =======
syn match vimNumber "\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber "-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber "\<0[xX]\x\+" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber "\%(^\|\A\)\zs#\x\{6}" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '\<0[xX]\x\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '\<0[zZ][a-zA-Z0-9.]\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '0[0-7]\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
syn match vimNumber '0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment
" All vimCommands are contained by vimIsCommand. {{{2
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=vimAddress,vimAutoCmd,vimEcho,vimIsCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd
@@ -228,7 +232,7 @@ syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}" skipwhi
syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "||\|&&\|[-+.!]" skipwhite nextgroup=vimString,vimSpecFile
syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=vimoperStar,@vimOperGroup
syn region vimOperParen matchgroup=vimSep start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
syn match vimOperError ")"
endif
@@ -383,12 +387,12 @@ syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vim9Comment,vimSetString,vimSetMod
syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar oneline
syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
syn match vimSetSep contained "[,:]" skipwhite nextgroup=vimCommand
syn match vimSetSep contained "[,:]"
syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
" Let: {{{2
" ===
syn keyword vimLet let var unl[et] skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
syn keyword vimLet let unl[et] skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s\+\%(trim\>\)\=\s*\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$' contains=vimComment,vim9Comment
" Abbreviations: {{{2
@@ -442,7 +446,7 @@ syn match vimMenuBang "!" contained skipwhite nextgroup=@vimMenuList
" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
" ======================
syn case ignore
syn match vimNotation "\%#=1\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|mouse\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\(page\)\=\(\|down\|up\|k\d\>\)\)>" contains=vimBracket
syn match vimNotation "\%#=1\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cmd\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|mouse\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\(page\)\=\(\|down\|up\|k\d\>\)\)>" contains=vimBracket
syn match vimNotation "\%#=1\(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>" contains=vimBracket
syn match vimNotation "\%#=1\(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>" contains=vimBracket
syn match vimNotation '\(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
@@ -637,7 +641,7 @@ syn match vimCtrlChar "[- -]"
" Beginners - Patterns that involve ^ {{{2
" =========
syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vim9LineComment +^[ \t]*#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
syn match vimContinue "^\s*\\"
syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue

View File

@@ -3,7 +3,7 @@ INSTALLmac.txt - Installation of Vim on Macintosh
This file contains instructions for compiling Vim. If you already have an
executable version of Vim, you don't need this.
First, make sure you've installed Xcode or CommandLineToots. If not, open a
First, make sure you've installed Xcode or CommandLineTools. If not, open a
terminal and do
$ make --version

View File

@@ -2,7 +2,7 @@
# Makefile for Vim on OpenVMS
#
# Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
# Last change: 2020 Aug 13
# Last change: 2021 Jan 04
#
# This script has been tested on VMS 6.2 to 8.4 on DEC Alpha, VAX and IA64
# with MMS and MMK
@@ -38,13 +38,13 @@ MODEL = HUGE
# GUI or terminal mode executable.
# Comment out if you want just the character terminal mode only.
# GUI with Motif
GUI = YES
# GUI = YES
# GUI with GTK
# If you have GTK installed you might want to enable this option.
# NOTE: you will need to properly define GTK_DIR below
# NOTE: since Vim 7.3 GTK 2+ is used that is not ported to VMS,
# therefore this option should not be used
# NOTE: since Vim 7.3 GTK 2+ is used that is not ported to VMS,
# therefore this option should not be used
# GTK = YES
# GUI/Motif with XPM
@@ -59,7 +59,7 @@ CCVER = YES
# Uncomment if want a debug version. Resulting executable is DVIM.EXE
# Development purpose only! Normally, it should not be defined. !!!
# DEBUG = YES
# DEBUG = YES
# Languages support for Perl, Python, TCL etc.
# If you don't need it really, leave them behind the comment.
@@ -68,6 +68,7 @@ CCVER = YES
# VIM_PERL = YES
# VIM_PYTHON = YES
# VIM_RUBY = YES
# VIM_LUA = YES
# X Input Method. For entering special languages like chinese and
# Japanese.
@@ -97,7 +98,7 @@ CCVER = YES
.IFDEF MMSVAX
.IFDEF DECC # VAX with DECC
CC_DEF = cc # /decc # some versions require /decc switch but when it is not required /ver might fail
PREFIX = /prefix=all
PREFIX = /prefix=all/name=(upper,short)
OPTIMIZE= /noopt # do not optimize on VAX. The compiler has hard time with crypto functions
.ELSE # VAX with VAXC
CC_DEF = cc
@@ -107,7 +108,7 @@ CCVER =
.ENDIF
.ELSE # AXP and IA64 with DECC
CC_DEF = cc
PREFIX = /prefix=all
PREFIX = /prefix=all/name=(upper,short)
OPTIMIZE= /opt
.ENDIF
@@ -165,7 +166,7 @@ GTK = ""
GTK_DIR = DKA0:[WORK.GTK1210.]
DEFS = "HAVE_CONFIG_H","FEAT_GUI_GTK"
LIBS = ,OS_VMS_GTK.OPT/OPT
GUI_FLAG = /name=(as_is,short)/float=ieee/ieee=denorm
GUI_FLAG = /float=ieee/ieee=denorm
GUI_SRC = gui.c gui_gtk.c gui_gtk_f.c gui_gtk_x11.c gui_beval.c pty.c
GUI_OBJ = gui.obj gui_gtk.obj gui_gtk_f.obj gui_gtk_x11.obj gui_beval.obj pty.obj
GUI_INC = ,"/gtk_root/gtk","/gtk_root/glib"
@@ -177,9 +178,10 @@ MOTIF = YES
.IFDEF XPM
DEFS = "HAVE_CONFIG_H","FEAT_GUI_MOTIF","HAVE_XPM"
XPM_INC = ,[.xpm.include]
XPM_LIB = ,OS_VMS_XPM.OPT/OPT
.ELSE
DEFS = "HAVE_CONFIG_H","FEAT_GUI_MOTIF"
XPM_INC =
XPM_INC =
.ENDIF
LIBS = ,OS_VMS_MOTIF.OPT/OPT
GUI_FLAG =
@@ -236,6 +238,15 @@ RUBY_LIB = ,OS_VMS_RUBY.OPT/OPT
RUBY_INC =
.ENDIF
.IFDEF VIM_LUA
# LUA related setup.
LUA_DEF = ,"FEAT_LUA"
LUA_SRC = if_lua.c
LUA_OBJ = if_lua.obj
LUA_LIB = ,OS_VMS_LUA.OPT/OPT
LUA_INC = ,LUA$ROOT:[INCLUDE]
.ENDIF
.IFDEF VIM_XIM
# XIM related setup.
.IFDEF GUI
@@ -246,7 +257,7 @@ XIM_DEF = ,"FEAT_XIM"
.IFDEF VIM_MZSCHEME
# MZSCHEME related setup
MZSCH_DEF = ,"FEAT_MZSCHEME"
MZSCH_SRC = if_mzsch.c
MZSCH_SRC = if_mzsch.c
MZSCH_OBJ = if_mzsch.obj
.ENDIF
@@ -257,7 +268,7 @@ ICONV_DEF = ,"USE_ICONV"
# XDIFF related setup.
XDIFF_SRC = xdiffi.c,xemit.c,xprepare.c,xutils.c,xhistogram.c,xpatience.c
XDIFF_OBJ = xdiffi.obj,xemit.obj,xprepare.obj,xutils.obj,xhistogram.obj,xpatience.obj
XDIFF_OBJ = xdiffi.obj,xemit.obj,xprepare.obj,xutils.obj,xhistogram.obj,xpatience.obj
XDIFF_INC = ,[.xdiff]
######################################################################
@@ -274,7 +285,7 @@ VIMHOST = "''F$TRNLNM("SYS$NODE")'''F$TRNLNM("UCX$INET_HOST")'.''F$TRNLNM("UCX$I
.SUFFIXES : .obj .c
ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
$(TCL_DEF)$(RUBY_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
$(TCL_DEF)$(RUBY_DEF)$(LUA_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
$(ICONV_DEF)) -
$(CFLAGS)$(GUI_FLAG) -
/include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC)$(PERL_INC)$(PYTHON_INC) -
@@ -285,14 +296,14 @@ ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
# as $(GUI_INC) - replaced with $(GUI_INC_VER)
# Otherwise should not be any other difference.
ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
$(TCL_DEF)$(RUBY_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
$(TCL_DEF)$(RUBY_DEF)$(LUA_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
$(ICONV_DEF)) -
$(CFLAGS)$(GUI_FLAG) -
/include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC_VER)$(PERL_INC)$(PYTHON_INC) -
$(TCL_INC)$(XDIFF_INC)$(XPM_INC))
ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) \
$(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(RUBY_LIB)
ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) $(XPM_LIB)\
$(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(RUBY_LIB) $(LUA_LIB)
SRC = \
arabic.c \
@@ -407,6 +418,7 @@ SRC = \
$(PYTHON_SRC) \
$(TCL_SRC) \
$(RUBY_SRC) \
$(LUA_SRC) \
$(MZSCH_SRC) \
$(XDIFF_SRC)
@@ -524,11 +536,12 @@ OBJ = \
$(PYTHON_OBJ) \
$(TCL_OBJ) \
$(RUBY_OBJ) \
$(LUA_OBJ) \
$(MZSCH_OBJ) \
$(XDIFF_OBJ)
# Default target is making the executable
all : [.auto]config.h mmk_compat motif_env gtk_env perl_env python_env tcl_env ruby_env $(TARGET)
all : [.auto]config.h mmk_compat motif_env gtk_env perl_env python_env tcl_env ruby_env lua_env $(TARGET)
! $@
[.auto]config.h : $(CONFIG_H)
@@ -546,6 +559,7 @@ clean :
-@ if "''F$SEARCH("pathdef.c")'" .NES. "" then delete/noconfirm/nolog pathdef.c;*
-@ if "''F$SEARCH("if_perl.c")'" .NES. "" then delete/noconfirm/nolog if_perl.c;*
-@ if "''F$SEARCH("*.opt")'" .NES. "" then delete/noconfirm/nolog *.opt;*
-@ if "''F$SEARCH("*.dmp")'" .NES. "" then delete/noconfirm/nolog *.dmp;*
# Link the target
$(TARGET) : $(OBJ)
@@ -599,6 +613,18 @@ check_ccver :
motif_env :
.IFDEF XPM
-@ write sys$output "using DECW/Motif/XPM environment."
-@ write sys$output "creating OS_VMS_XPM.OPT file."
-@ open/write opt_file OS_VMS_XPM.OPT
.IFDEF MMSVAX
-@ write opt_file "[.xpm.vms.vax]libxpm.olb/lib"
.ENDIF
.IFDEF MMSALPHA
-@ write opt_file "[.xpm.vms.axp]libxpm.olb/lib"
.ENDIF
.IFDEF MMSIA64
-@ write opt_file "[.xpm.vms.ia64]libxpm.olb/lib"
.ENDIF
-@ close opt_file
.ELSE
-@ write sys$output "using DECW/Motif environment."
.ENDIF
@@ -695,11 +721,24 @@ ruby_env :
-@ !
.ENDIF
.IFDEF VIM_LUA
lua_env :
-@ write sys$output "using LUA environment:"
-@ write sys$output " include path: ""$(LUA_INC)"""
-@ write sys$output "creating OS_VMS_LUA.OPT file."
-@ open/write opt_file OS_VMS_LUA.OPT
-@ write opt_file "LUA$ROOT:[LIB]LUA$SHR.EXE /share"
-@ close opt_file
.ELSE
lua_env :
-@ !
.ENDIF
arabic.obj : arabic.c vim.h
arglist.obj : arglist.c vim.h [.auto]config.h feature.h os_unix.h
autocmd.obj : autocmd.c vim.h [.auto]config.h feature.h os_unix.h
blowfish.obj : blowfish.c vim.h [.auto]config.h feature.h os_unix.h
blob.obj : blob.c vim.h [.auto]config.h feature.h os_unix.h
blob.obj : blob.c vim.h [.auto]config.h feature.h os_unix.h
buffer.obj : buffer.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
@@ -859,7 +898,7 @@ if_xcmdsrv.obj : if_xcmdsrv.c vim.h [.auto]config.h feature.h os_unix.h \
if_mzsch.obj : if_mzsch.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h beval.h [.proto]gui_beval.pro ex_cmds.h proto.h \
errors.h globals.h if_mzsch.h
errors.h globals.h if_mzsch.h
indent.obj : indent.c vim.h [.auto]config.h feature.h os_unix.h
insexpand.obj : insexpand.c vim.h [.auto]config.h feature.h os_unix.h
json.obj : json.c vim.h [.auto]config.h feature.h os_unix.h \
@@ -1153,6 +1192,8 @@ if_ruby.obj : if_ruby.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
errors.h globals.h version.h
if_lua.obj : if_lua.c vim.h [.auto]config.h feature.h os_unix.h \
errors.h globals.h version.h
beval.obj : beval.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h \
gui.h beval.h option.h ex_cmds.h proto.h \
@@ -1172,4 +1213,4 @@ xemit.obj : [.xdiff]xemit.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h o
xprepare.obj : [.xdiff]xprepare.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
xutils.obj : [.xdiff]xutils.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
xhistogram.obj : [.xdiff]xhistogram.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
xpatience.obj : [.xdiff]xpatience.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
xpatience.obj : [.xdiff]xpatience.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h

View File

@@ -409,7 +409,7 @@ do_arglist(
p = file_pat_to_reg_pat(p, NULL, NULL, FALSE);
if (p == NULL)
break;
regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);
regmatch.regprog = vim_regcomp(p, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL)
{
vim_free(p);

9
src/auto/configure vendored
View File

@@ -5006,9 +5006,9 @@ esac
fi
if test "$zOSUnix" = "yes"; then
QUOTESED="sed -e 's/[\\\\\"]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
QUOTESED="sed -e 's/[\\\\\"]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
else
QUOTESED="sed -e 's/[\\\\\"]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
QUOTESED="sed -e 's/[\\\\\"]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
fi
@@ -5479,7 +5479,7 @@ $as_echo "no" >&6; }
inc_path="$vi_cv_path_lua_pfx/include"
for dir in "$inc_path"/moonjit-[0-9]* ; do
if test -d "$dir" ; then
lua_suf=`basename '$dir'`
lua_suf=`basename "$dir"`
lua_suf="/$lua_suf"
break
fi
@@ -7651,6 +7651,9 @@ $as_echo "$rubyhdrdir" >&6; }
RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
RUBY_LIBS=
fi
if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
$as_echo "not found; disabling Ruby" >&6; }

View File

@@ -55,9 +55,7 @@ typedef struct AutoCmd
char once; // "One shot": removed after execution
char nested; // If autocommands nest here.
char last; // last command in list
#ifdef FEAT_EVAL
sctx_T script_ctx; // script context where defined
#endif
struct AutoCmd *next; // next AutoCmd in list
} AutoCmd;
@@ -1249,8 +1247,8 @@ do_autocmd_event(
if (ac == NULL)
return FAIL;
ac->cmd = vim_strsave(cmd);
#ifdef FEAT_EVAL
ac->script_ctx = current_sctx;
#ifdef FEAT_EVAL
ac->script_ctx.sc_lnum += SOURCING_LNUM;
#endif
if (ac->cmd == NULL)
@@ -1819,8 +1817,8 @@ apply_autocmds_group(
static int nesting = 0;
AutoPatCmd patcmd;
AutoPat *ap;
#ifdef FEAT_EVAL
sctx_T save_current_sctx;
#ifdef FEAT_EVAL
funccal_entry_T funccal_entry;
char_u *save_cmdarg;
long save_cmdbang;
@@ -2029,9 +2027,9 @@ apply_autocmds_group(
estack_push(ETYPE_AUCMD, NULL, 0);
ESTACK_CHECK_SETUP
#ifdef FEAT_EVAL
save_current_sctx = current_sctx;
#ifdef FEAT_EVAL
# ifdef FEAT_PROFILE
if (do_profiling == PROF_YES)
prof_child_enter(&wait_time); // doesn't count for the caller itself
@@ -2138,8 +2136,8 @@ apply_autocmds_group(
autocmd_fname_full = save_autocmd_fname_full;
autocmd_bufnr = save_autocmd_bufnr;
autocmd_match = save_autocmd_match;
#ifdef FEAT_EVAL
current_sctx = save_current_sctx;
#ifdef FEAT_EVAL
restore_funccal();
# ifdef FEAT_PROFILE
if (do_profiling == PROF_YES)
@@ -2370,9 +2368,7 @@ getnextac(
if (ac->once)
au_del_cmd(ac);
autocmd_nested = ac->nested;
#ifdef FEAT_EVAL
current_sctx = ac->script_ctx;
#endif
if (ac->last)
acp->nextcmd = NULL;
else

View File

@@ -2605,7 +2605,7 @@ buflist_findpat(
p = pat;
if (*p == '^' && !(attempt & 1)) // add/remove '^'
++p;
regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);
regmatch.regprog = vim_regcomp(p, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL)
{
vim_free(pat);
@@ -5371,9 +5371,8 @@ chk_modeline(
int vers;
int end;
int retval = OK;
#ifdef FEAT_EVAL
sctx_T save_current_sctx;
#endif
ESTACK_CHECK_DECLARATION
prev = -1;
@@ -5457,22 +5456,22 @@ chk_modeline(
if (*s != NUL) // skip over an empty "::"
{
int secure_save = secure;
#ifdef FEAT_EVAL
save_current_sctx = current_sctx;
current_sctx.sc_version = 1;
#ifdef FEAT_EVAL
current_sctx.sc_sid = SID_MODELINE;
current_sctx.sc_seq = 0;
current_sctx.sc_lnum = lnum;
current_sctx.sc_version = 1;
#endif
// Make sure no risky things are executed as a side effect.
secure = 1;
retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
secure = secure_save;
#ifdef FEAT_EVAL
current_sctx = save_current_sctx;
#endif
if (retval == FAIL) // stop if error found
break;
}

View File

@@ -2031,7 +2031,7 @@ restore_backup:
if (end == 0
|| (lnum == end
&& (write_bin || !buf->b_p_fixeol)
&& (lnum == buf->b_no_eol_lnum
&& ((write_bin && lnum == buf->b_no_eol_lnum)
|| (lnum == buf->b_ml.ml_line_count
&& !buf->b_p_eol))))
{
@@ -2138,7 +2138,7 @@ restore_backup:
if (!checking_conversion)
{
#if defined(UNIX) && defined(HAVE_FSYNC)
// On many journalling file systems there is a bug that causes both the
// On many journaling file systems there is a bug that causes both the
// original and the backup file to be lost when halting the system
// right after writing the file. That's because only the meta-data is
// journalled. Syncing the file slows down the system, but assures it

View File

@@ -1594,6 +1594,12 @@ vim_isbdigit(int c)
return (c == '0' || c == '1');
}
static int
vim_isodigit(int c)
{
return (c >= '0' && c <= '7');
}
/*
* Vim's own character class functions. These exist because many library
* islower()/toupper() etc. do not work properly: they crash when used with
@@ -1831,7 +1837,7 @@ vim_str2nr(
// binary
ptr += 2;
else if ((what & STR2NR_OOCT)
&& (pre == 'O' || pre == 'o') && vim_isbdigit(ptr[2])
&& (pre == 'O' || pre == 'o') && vim_isodigit(ptr[2])
&& (maxlen == 0 || maxlen > 2))
// octal with prefix "0o"
ptr += 2;

View File

@@ -2121,7 +2121,7 @@ get_c_indent(void)
}
// #defines and so on go at the left when included in 'cinkeys',
// exluding pragmas when customized in 'cinoptions'
// excluding pragmas when customized in 'cinoptions'
if (*theline == '#' && (*linecopy == '#' || in_cinkeys('#', ' ', TRUE)))
{
char_u *directive = skipwhite(theline + 1);

View File

@@ -2047,6 +2047,8 @@ clip_get_selection(Clipboard_T *cbd)
ca.count1 = 1;
ca.retval = CA_NO_ADJ_OP_END;
do_pending_operator(&ca, 0, TRUE);
// restore things
set_y_previous(old_y_previous);
set_y_current(old_y_current);
curwin->w_cursor = old_cursor;

View File

@@ -1049,7 +1049,7 @@ set_one_cmd_context(
++p;
}
// If the cursor is touching the command, and it ends in an alpha-numeric
// If the cursor is touching the command, and it ends in an alphanumeric
// character, complete the command name.
if (*p == NUL && ASCII_ISALNUM(p[-1]))
return NULL;
@@ -1391,7 +1391,7 @@ set_one_cmd_context(
if (*arg != NUL)
{
xp->xp_context = EXPAND_NOTHING;
arg = skip_regexp(arg + 1, *arg, p_magic);
arg = skip_regexp(arg + 1, *arg, magic_isset());
}
}
return find_nextcmd(arg);
@@ -1429,7 +1429,7 @@ set_one_cmd_context(
{
// skip "from" part
++arg;
arg = skip_regexp(arg, delim, p_magic);
arg = skip_regexp(arg, delim, magic_isset());
}
// skip "to" part
while (arg[0] != NUL && arg[0] != delim)
@@ -2077,7 +2077,7 @@ ExpandFromContext(
pat = tofree;
}
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL)
return FAIL;
@@ -2680,7 +2680,10 @@ wildmenu_process_key(cmdline_info_T *cclp, int key, expand_T *xp)
// Hitting <Down> after "emenu Name.": complete submenu
if (c == K_DOWN && cclp->cmdpos > 0
&& cclp->cmdbuff[cclp->cmdpos - 1] == '.')
{
c = p_wc;
KeyTyped = TRUE; // in case the key was mapped
}
else if (c == K_UP)
{
// Hitting <Up>: Remove one submenu name in front of the
@@ -2714,6 +2717,7 @@ wildmenu_process_key(cmdline_info_T *cclp, int key, expand_T *xp)
if (i > 0)
cmdline_del(cclp, i);
c = p_wc;
KeyTyped = TRUE; // in case the key was mapped
xp->xp_context = EXPAND_NOTHING;
}
}
@@ -2738,6 +2742,7 @@ wildmenu_process_key(cmdline_info_T *cclp, int key, expand_T *xp)
{
// go down a directory
c = p_wc;
KeyTyped = TRUE; // in case the key was mapped
}
else if (STRNCMP(xp->xp_pattern, upseg + 1, 3) == 0 && c == K_DOWN)
{
@@ -2763,6 +2768,7 @@ wildmenu_process_key(cmdline_info_T *cclp, int key, expand_T *xp)
{
cmdline_del(cclp, j - 2);
c = p_wc;
KeyTyped = TRUE; // in case the key was mapped
}
}
else if (c == K_UP)

View File

@@ -437,9 +437,9 @@ fi
dnl Set QUOTESED. Needs additional backslashes on zOS
if test "$zOSUnix" = "yes"; then
QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/'"
QUOTESED="sed -e 's/[[\\\\\"]]/\\\\\\\\&/g' -e 's/\\\\\\\\\"/\"/' -e 's/\\\\\\\\\";\$\$/\";/' -e 's/ */ /g'"
else
QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/'"
QUOTESED="sed -e 's/[[\\\\\"]]/\\\\&/g' -e 's/\\\\\"/\"/' -e 's/\\\\\";\$\$/\";/' -e 's/ */ /g'"
fi
AC_SUBST(QUOTESED)
@@ -632,7 +632,7 @@ if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
inc_path="$vi_cv_path_lua_pfx/include"
for dir in "$inc_path"/moonjit-[[0-9]]* ; do
if test -d "$dir" ; then
lua_suf=`basename '$dir'`
lua_suf=`basename "$dir"`
lua_suf="/$lua_suf"
break
fi
@@ -2001,6 +2001,9 @@ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" $RUBY_CFLAGS"
RUBY_LIBS=
fi
if test "X$CLANG_VERSION" != "X" -a "$rubyversion" -ge 30; then
RUBY_CFLAGS="$RUBY_CFLAGS -fdeclspec"
fi
else
AC_MSG_RESULT(not found; disabling Ruby)
fi

View File

@@ -107,6 +107,8 @@ rettv_dict_set(typval_T *rettv, dict_T *d)
dict_free_contents(dict_T *d)
{
hashtab_free_contents(&d->dv_hashtab);
free_type(d->dv_type);
d->dv_type = NULL;
}
/*
@@ -1057,6 +1059,12 @@ dict_extend(dict_T *d1, dict_T *d2, char_u *action)
hashitem_T *hi2;
int todo;
char_u *arg_errmsg = (char_u *)N_("extend() argument");
type_T *type;
if (d1->dv_type != NULL && d1->dv_type->tt_member != NULL)
type = d1->dv_type->tt_member;
else
type = NULL;
todo = (int)d2->dv_hashtab.ht_used;
for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
@@ -1073,9 +1081,14 @@ dict_extend(dict_T *d1, dict_T *d2, char_u *action)
&& HI2DI(hi2)->di_tv.v_type == VAR_FUNC
&& var_wrong_func_name(hi2->hi_key, di1 == NULL))
break;
if (!valid_varname(hi2->hi_key))
if (!valid_varname(hi2->hi_key, TRUE))
break;
}
if (type != NULL
&& check_typval_type(type, &HI2DI(hi2)->di_tv, 0) == FAIL)
break;
if (di1 == NULL)
{
di1 = dictitem_copy(HI2DI(hi2));

View File

@@ -16,6 +16,8 @@ EXTERN char e_undefined_variable_str[]
EXTERN char e_undefined_variable_char_str[]
INIT(= N_("E121: Undefined variable: %c:%s"));
#endif
EXTERN char e_ambiguous_use_of_user_defined_command[]
INIT(= N_("E464: Ambiguous use of user-defined command"));
EXTERN char e_invalid_command[]
INIT(= N_("E476: Invalid command"));
#ifdef FEAT_EVAL
@@ -31,16 +33,18 @@ EXTERN char e_assert_fails_second_arg[]
INIT(= N_("E856: \"assert_fails()\" second argument must be a string or a list with one or two strings"));
EXTERN char e_cannot_index_special_variable[]
INIT(= N_("E909: Cannot index a special variable"));
EXTERN char e_missing_var_str[]
INIT(= N_("E1100: Missing :var: %s"));
#endif
EXTERN char e_command_not_supported_in_vim9_script_missing_var_str[]
INIT(= N_("E1100: Command not supported in Vim9 script (missing :var?): %s"));
#ifdef FEAT_EVAL
EXTERN char e_variable_not_found_str[]
INIT(= N_("E1001: Variable not found: %s"));
EXTERN char e_syntax_error_at_str[]
INIT(= N_("E1002: Syntax error at %s"));
EXTERN char e_missing_return_value[]
INIT(= N_("E1003: Missing return value"));
EXTERN char e_white_space_required_before_and_after_str[]
INIT(= N_("E1004: White space required before and after '%s'"));
EXTERN char e_white_space_required_before_and_after_str_at_str[]
INIT(= N_("E1004: White space required before and after '%s' at \"%s\""));
EXTERN char e_too_many_argument_types[]
INIT(= N_("E1005: Too many argument types"));
EXTERN char e_str_is_used_as_argument[]
@@ -113,8 +117,10 @@ EXTERN char e_vim9script_can_only_be_used_in_script[]
INIT(= N_("E1038: \"vim9script\" can only be used in a script"));
EXTERN char e_vim9script_must_be_first_command_in_script[]
INIT(= N_("E1039: \"vim9script\" must be the first command in a script"));
#endif
EXTERN char e_cannot_use_scriptversion_after_vim9script[]
INIT(= N_("E1040: Cannot use :scriptversion after :vim9script"));
#ifdef FEAT_EVAL
EXTERN char e_redefining_script_item_str[]
INIT(= N_("E1041: Redefining script item %s"));
EXTERN char e_export_can_only_be_used_in_vim9script[]
@@ -133,8 +139,8 @@ EXTERN char e_item_not_found_in_script_str[]
INIT(= N_("E1048: Item not found in script: %s"));
EXTERN char e_item_not_exported_in_script_str[]
INIT(= N_("E1049: Item not exported in script: %s"));
EXTERN char e_colon_required_before_a_range[]
INIT(= N_("E1050: Colon required before a range"));
EXTERN char e_colon_required_before_range_str[]
INIT(= N_("E1050: Colon required before a range: %s"));
EXTERN char e_wrong_argument_type_for_plus[]
INIT(= N_("E1051: Wrong argument type for +"));
EXTERN char e_cannot_declare_an_option[]
@@ -321,3 +327,19 @@ EXTERN char e_command_not_followed_by_white_space_str[]
INIT(= N_("E1144: Command is not followed by white space: %s"));
EXTERN char e_missing_heredoc_end_marker_str[]
INIT(= N_("E1145: Missing heredoc end marker: %s"));
EXTERN char e_command_not_recognized_str[]
INIT(= N_("E1146: Command not recognized: %s"));
EXTERN char e_list_not_set[]
INIT(= N_("E1147: List not set"));
EXTERN char e_cannot_index_str[]
INIT(= N_("E1148: Cannot index a %s"));
EXTERN char e_script_variable_invalid_after_reload_in_function_str[]
INIT(= N_("E1149: Script variable is invalid after reload in function %s"));
EXTERN char e_script_variable_type_changed[]
INIT(= N_("E1150: Script variable type changed"));
EXTERN char e_mismatched_endfunction[]
INIT(= N_("E1151: Mismatched endfunction"));
EXTERN char e_mismatched_enddef[]
INIT(= N_("E1152: Mismatched enddef"));
EXTERN char e_invalid_operation_for_bool[]
INIT(= N_("E1153: Invalid operation for bool"));

View File

@@ -654,11 +654,28 @@ call_func_retnr(
return retval;
}
/*
* Call Vim script function like call_func_retnr() and drop the result.
* Returns FAIL when calling the function fails.
*/
int
call_func_noret(
char_u *func,
int argc,
typval_T *argv)
{
typval_T rettv;
if (call_vim_function(func, argc, argv, &rettv) == FAIL)
return FAIL;
clear_tv(&rettv);
return OK;
}
/*
* Call Vim script function "func" and return the result as a string.
* Uses "argv" and "argc" as call_func_retnr().
* Returns NULL when calling the function fails.
* Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
* have type VAR_UNKNOWN.
*/
void *
call_func_retstr(
@@ -679,8 +696,7 @@ call_func_retstr(
/*
* Call Vim script function "func" and return the result as a List.
* Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
* have type VAR_UNKNOWN.
* Uses "argv" and "argc" as call_func_retnr().
* Returns NULL when there is something wrong.
*/
void *
@@ -705,8 +721,10 @@ call_func_retlist(
#ifdef FEAT_FOLDING
/*
* Evaluate 'foldexpr'. Returns the foldlevel, and any character preceding
* it in "*cp". Doesn't give error messages.
* Evaluate "arg", which is 'foldexpr'.
* Note: caller must set "curwin" to match "arg".
* Returns the foldlevel, and any character preceding it in "*cp". Doesn't
* give error messages.
*/
int
eval_foldexpr(char_u *arg, int *cp)
@@ -793,13 +811,14 @@ get_lval(
int len;
hashtab_T *ht = NULL;
int quiet = flags & GLV_QUIET;
int writing;
// Clear everything in "lp".
CLEAR_POINTER(lp);
if (skip)
if (skip || (flags & GLV_COMPILING))
{
// When skipping just find the end of the name.
// When skipping or compiling just find the end of the name.
lp->ll_name = name;
lp->ll_name_end = find_name_end(name, NULL, NULL,
FNE_INCL_BR | fne_flags);
@@ -852,7 +871,9 @@ get_lval(
char_u *tp = skipwhite(p + 1);
// parse the type after the name
lp->ll_type = parse_type(&tp, &si->sn_type_list);
lp->ll_type = parse_type(&tp, &si->sn_type_list, !quiet);
if (lp->ll_type == NULL && !quiet)
return NULL;
lp->ll_name_end = tp;
}
}
@@ -864,16 +885,23 @@ get_lval(
cc = *p;
*p = NUL;
// Only pass &ht when we would write to the variable, it prevents autoload
// as well.
v = find_var(lp->ll_name, (flags & GLV_READ_ONLY) ? NULL : &ht,
flags & GLV_NO_AUTOLOAD);
// When we would write to the variable pass &ht and prevent autoload.
writing = !(flags & GLV_READ_ONLY);
v = find_var(lp->ll_name, writing ? &ht : NULL,
(flags & GLV_NO_AUTOLOAD) || writing);
if (v == NULL && !quiet)
semsg(_(e_undefined_variable_str), lp->ll_name);
*p = cc;
if (v == NULL)
return NULL;
if (in_vim9script() && (flags & GLV_NO_DECL) == 0)
{
if (!quiet)
semsg(_(e_variable_already_declared), lp->ll_name);
return NULL;
}
/*
* Loop until no more [idx] or .key is following.
*/
@@ -1049,7 +1077,7 @@ get_lval(
wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
&& rettv->v_type == VAR_FUNC
&& var_wrong_func_name(key, lp->ll_di == NULL))
|| !valid_varname(key);
|| !valid_varname(key, TRUE);
if (len != -1)
key[len] = prevval;
if (wrong)
@@ -1311,7 +1339,7 @@ set_var_lval(
{
typval_T tv;
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_(e_cannot_mod));
*endp = cc;
@@ -1349,7 +1377,7 @@ set_var_lval(
listitem_T *ll_li = lp->ll_li;
int ll_n1 = lp->ll_n1;
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_("E996: Cannot lock a range"));
return;
@@ -1408,7 +1436,7 @@ set_var_lval(
/*
* Assign to a List or Dictionary item.
*/
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_("E996: Cannot lock a list or dict"));
return;
@@ -1723,7 +1751,7 @@ next_for_item(void *fi_void, char_u *arg)
{
forinfo_T *fi = (forinfo_T *)fi_void;
int result;
int flag = in_vim9script() ? ASSIGN_NO_DECL : 0;
int flag = in_vim9script() ? ASSIGN_DECL : 0;
listitem_T *item;
if (fi->fi_blob != NULL)
@@ -1881,6 +1909,24 @@ set_context_for_expression(
while ((c = *++arg) != NUL && (c == ' ' || c == '\t'))
/* skip */ ;
}
// ":exe one two" completes "two"
if ((cmdidx == CMD_execute
|| cmdidx == CMD_echo
|| cmdidx == CMD_echon
|| cmdidx == CMD_echomsg)
&& xp->xp_context == EXPAND_EXPRESSION)
{
for (;;)
{
char_u *n = skiptowhite(arg);
if (n == arg || IS_WHITE_OR_NUL(*skipwhite(n)))
break;
arg = skipwhite(n);
}
}
xp->xp_pattern = arg;
}
@@ -1897,7 +1943,7 @@ pattern_match(char_u *pat, char_u *text, int ic)
// avoid 'l' flag in 'cpoptions'
save_cpo = p_cpo;
p_cpo = (char_u *)"";
p_cpo = empty_option;
regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
if (regmatch.regprog != NULL)
{
@@ -1929,13 +1975,15 @@ eval_func(
int len = name_len;
partial_T *partial;
int ret = OK;
type_T *type = NULL;
if (!evaluate)
check_vars(s, len);
// If "s" is the name of a variable of type VAR_FUNC
// use its contents.
s = deref_func_name(s, &len, &partial, !evaluate);
s = deref_func_name(s, &len, &partial,
in_vim9script() ? &type : NULL, !evaluate);
// Need to make a copy, in case evaluating the arguments makes
// the name invalid.
@@ -1953,6 +2001,7 @@ eval_func(
funcexe.evaluate = evaluate;
funcexe.partial = partial;
funcexe.basetv = basetv;
funcexe.check_type = type;
ret = get_func_tv(s, len, rettv, arg, evalarg, &funcexe);
}
vim_free(s);
@@ -2606,7 +2655,7 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
{
char_u *p;
int getnext;
exptype_T type = EXPR_UNKNOWN;
exprtype_T type = EXPR_UNKNOWN;
int len = 2;
int type_is = FALSE;
@@ -3145,6 +3194,28 @@ eval6(
return OK;
}
int
eval_leader(char_u **arg, int vim9)
{
char_u *s = *arg;
char_u *p = *arg;
while (*p == '!' || *p == '-' || *p == '+')
{
char_u *n = skipwhite(p + 1);
// ++, --, -+ and +- are not accepted in Vim9 script
if (vim9 && (*p == '-' || *p == '+') && (*n == '-' || *n == '+'))
{
semsg(_(e_invexpr2), s);
return FAIL;
}
p = n;
}
*arg = p;
return OK;
}
/*
* Handle sixth level expression:
* number number constant
@@ -3200,8 +3271,8 @@ eval7(
* Skip '!', '-' and '+' characters. They are handled later.
*/
start_leader = *arg;
while (**arg == '!' || **arg == '-' || **arg == '+')
*arg = skipwhite(*arg + 1);
if (eval_leader(arg, in_vim9script()) == FAIL)
return FAIL;
end_leader = *arg;
if (**arg == '.' && (!isdigit(*(*arg + 1))
@@ -3273,7 +3344,10 @@ eval7(
* Lambda: {arg, arg -> expr}
* Dictionary: {'key': val, 'key': val}
*/
case '{': ret = get_lambda_tv(arg, rettv, in_vim9script(), evalarg);
case '{': if (in_vim9script())
ret = NOTDONE;
else
ret = get_lambda_tv(arg, rettv, in_vim9script(), evalarg);
if (ret == NOTDONE)
ret = eval_dict(arg, rettv, evalarg, FALSE);
break;
@@ -3306,8 +3380,13 @@ eval7(
/*
* nested expression: (expression).
* lambda: (arg) => expr
*/
case '(': {
case '(': ret = NOTDONE;
if (in_vim9script())
ret = get_lambda_tv(arg, rettv, TRUE, evalarg);
if (ret == NOTDONE)
{
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
ret = eval1(arg, rettv, evalarg); // recursive!
@@ -3362,12 +3441,19 @@ eval7(
ret = OK;
}
else if (len == 5 && in_vim9script()
&& STRNCMP(s, "false", 4) == 0)
&& STRNCMP(s, "false", 5) == 0)
{
rettv->v_type = VAR_BOOL;
rettv->vval.v_number = VVAL_FALSE;
ret = OK;
}
else if (len == 4 && in_vim9script()
&& STRNCMP(s, "null", 4) == 0)
{
rettv->v_type = VAR_SPECIAL;
rettv->vval.v_number = VVAL_NULL;
ret = OK;
}
else
ret = eval_variable(s, len, rettv, NULL, TRUE, FALSE);
}
@@ -3569,7 +3655,24 @@ eval_lambda(
*arg += 2;
rettv->v_type = VAR_UNKNOWN;
ret = get_lambda_tv(arg, rettv, FALSE, evalarg);
if (**arg == '{')
{
// ->{lambda}()
ret = get_lambda_tv(arg, rettv, FALSE, evalarg);
}
else
{
// ->(lambda)()
++*arg;
ret = eval1(arg, rettv, evalarg);
*arg = skipwhite_and_linebreak(*arg, evalarg);
if (**arg != ')')
{
emsg(_(e_missing_close));
ret = FAIL;
}
++*arg;
}
if (ret != OK)
return FAIL;
else if (**arg != '(')
@@ -3677,6 +3780,7 @@ eval_index(
int range = FALSE;
char_u *key = NULL;
int keylen = -1;
int vim9 = in_vim9script();
if (check_can_index(rettv, evaluate, verbose) == FAIL)
return FAIL;
@@ -3707,6 +3811,13 @@ eval_index(
empty1 = TRUE;
else if (eval1(arg, &var1, evalarg) == FAIL) // recursive!
return FAIL;
else if (vim9 && **arg == ':')
{
semsg(_(e_white_space_required_before_and_after_str_at_str),
":", *arg);
clear_tv(&var1);
return FAIL;
}
else if (evaluate && tv_get_string_chk(&var1) == NULL)
{
// not a number or string
@@ -3721,7 +3832,16 @@ eval_index(
if (**arg == ':')
{
range = TRUE;
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
++*arg;
if (vim9 && !IS_WHITE_OR_NUL(**arg) && **arg != ']')
{
semsg(_(e_white_space_required_before_and_after_str_at_str),
":", *arg - 1);
if (!empty1)
clear_tv(&var1);
return FAIL;
}
*arg = skipwhite_and_linebreak(*arg, evalarg);
if (**arg == ']')
empty2 = TRUE;
else if (eval1(arg, &var2, evalarg) == FAIL) // recursive!
@@ -4631,7 +4751,7 @@ set_ref_in_item(
* "numbuf" is used for a number.
* When "copyID" is not NULL replace recursive lists and dicts with "...".
* When both "echo_style" and "composite_val" are FALSE, put quotes around
* stings as "string()", otherwise does not put quotes around strings, as
* strings as "string()", otherwise does not put quotes around strings, as
* ":echo" displays values.
* When "restore_copyID" is FALSE, repeated items in dictionaries and lists
* are replaced with "...".
@@ -4933,6 +5053,61 @@ string2float(
}
#endif
/*
* Convert the specified byte index of line 'lnum' in buffer 'buf' to a
* character index. Works only for loaded buffers. Returns -1 on failure.
* The index of the first character is one.
*/
int
buf_byteidx_to_charidx(buf_T *buf, int lnum, int byteidx)
{
char_u *str;
if (buf == NULL || buf->b_ml.ml_mfp == NULL)
return -1;
if (lnum > buf->b_ml.ml_line_count)
lnum = buf->b_ml.ml_line_count;
str = ml_get_buf(buf, lnum, FALSE);
if (str == NULL)
return -1;
if (*str == NUL)
return 1;
return mb_charlen_len(str, byteidx + 1);
}
/*
* Convert the specified character index of line 'lnum' in buffer 'buf' to a
* byte index. Works only for loaded buffers. Returns -1 on failure. The index
* of the first byte and the first character is one.
*/
int
buf_charidx_to_byteidx(buf_T *buf, int lnum, int charidx)
{
char_u *str;
char_u *t;
if (buf == NULL || buf->b_ml.ml_mfp == NULL)
return -1;
if (lnum > buf->b_ml.ml_line_count)
lnum = buf->b_ml.ml_line_count;
str = ml_get_buf(buf, lnum, FALSE);
if (str == NULL)
return -1;
// Convert the character offset to a byte offset
t = str;
while (*t != NUL && --charidx > 0)
t += mb_ptr2len(t);
return t - str + 1;
}
/*
* Translate a String variable into a position.
* Returns NULL when there is an error.
@@ -4941,7 +5116,8 @@ string2float(
var2fpos(
typval_T *varp,
int dollar_lnum, // TRUE when $ is last line
int *fnum) // set to fnum for '0, 'A, etc.
int *fnum, // set to fnum for '0, 'A, etc.
int charcol) // return character column
{
char_u *name;
static pos_T pos;
@@ -4963,7 +5139,10 @@ var2fpos(
pos.lnum = list_find_nr(l, 0L, &error);
if (error || pos.lnum <= 0 || pos.lnum > curbuf->b_ml.ml_line_count)
return NULL; // invalid line number
len = (long)STRLEN(ml_get(pos.lnum));
if (charcol)
len = (long)mb_charlen(ml_get(pos.lnum));
else
len = (long)STRLEN(ml_get(pos.lnum));
// Get the column number
// We accept "$" for the column number: last column.
@@ -4998,18 +5177,29 @@ var2fpos(
if (name == NULL)
return NULL;
if (name[0] == '.') // cursor
return &curwin->w_cursor;
{
pos = curwin->w_cursor;
if (charcol)
pos.col = buf_byteidx_to_charidx(curbuf, pos.lnum, pos.col) - 1;
return &pos;
}
if (name[0] == 'v' && name[1] == NUL) // Visual start
{
if (VIsual_active)
return &VIsual;
return &curwin->w_cursor;
pos = VIsual;
else
pos = curwin->w_cursor;
if (charcol)
pos.col = buf_byteidx_to_charidx(curbuf, pos.lnum, pos.col) - 1;
return &pos;
}
if (name[0] == '\'') // mark
{
pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0)
return NULL;
if (charcol)
pp->col = buf_byteidx_to_charidx(curbuf, pp->lnum, pp->col) - 1;
return pp;
}
@@ -5044,7 +5234,10 @@ var2fpos(
else
{
pos.lnum = curwin->w_cursor.lnum;
pos.col = (colnr_T)STRLEN(ml_get_curline());
if (charcol)
pos.col = (colnr_T)mb_charlen(ml_get_curline());
else
pos.col = (colnr_T)STRLEN(ml_get_curline());
}
return &pos;
}
@@ -5064,7 +5257,8 @@ list2fpos(
typval_T *arg,
pos_T *posp,
int *fnump,
colnr_T *curswantp)
colnr_T *curswantp,
int charcol)
{
list_T *l = arg->vval.v_list;
long i = 0;
@@ -5096,6 +5290,18 @@ list2fpos(
n = list_find_nr(l, i++, NULL); // col
if (n < 0)
return FAIL;
// If character position is specified, then convert to byte position
if (charcol)
{
buf_T *buf;
// Get the text for the specified line in a loaded buffer
buf = buflist_findnr(fnump == NULL ? curbuf->b_fnum : *fnump);
if (buf == NULL || buf->b_ml.ml_mfp == NULL)
return FAIL;
n = buf_charidx_to_byteidx(buf, posp->lnum, n);
}
posp->col = n;
n = list_find_nr(l, i, NULL); // off
@@ -5428,97 +5634,6 @@ eval_isdictc(int c)
return ASCII_ISALNUM(c) || c == '_';
}
/*
* Return the character "str[index]" where "index" is the character index. If
* "index" is out of range NULL is returned.
*/
char_u *
char_from_string(char_u *str, varnumber_T index)
{
size_t nbyte = 0;
varnumber_T nchar = index;
size_t slen;
if (str == NULL || index < 0)
return NULL;
slen = STRLEN(str);
while (nchar > 0 && nbyte < slen)
{
nbyte += MB_CPTR2LEN(str + nbyte);
--nchar;
}
if (nbyte >= slen)
return NULL;
return vim_strnsave(str + nbyte, MB_CPTR2LEN(str + nbyte));
}
/*
* Get the byte index for character index "idx" in string "str" with length
* "str_len".
* If going over the end return "str_len".
* If "idx" is negative count from the end, -1 is the last character.
* When going over the start return -1.
*/
static long
char_idx2byte(char_u *str, size_t str_len, varnumber_T idx)
{
varnumber_T nchar = idx;
size_t nbyte = 0;
if (nchar >= 0)
{
while (nchar > 0 && nbyte < str_len)
{
nbyte += MB_CPTR2LEN(str + nbyte);
--nchar;
}
}
else
{
nbyte = str_len;
while (nchar < 0 && nbyte > 0)
{
--nbyte;
nbyte -= mb_head_off(str, str + nbyte);
++nchar;
}
if (nchar < 0)
return -1;
}
return (long)nbyte;
}
/*
* Return the slice "str[first:last]" using character indexes.
* Return NULL when the result is empty.
*/
char_u *
string_slice(char_u *str, varnumber_T first, varnumber_T last)
{
long start_byte, end_byte;
size_t slen;
if (str == NULL)
return NULL;
slen = STRLEN(str);
start_byte = char_idx2byte(str, slen, first);
if (start_byte < 0)
start_byte = 0; // first index very negative: use zero
if (last == -1)
end_byte = (long)slen;
else
{
end_byte = char_idx2byte(str, slen, last);
if (end_byte >= 0 && end_byte < (long)slen)
// end index is inclusive
end_byte += MB_CPTR2LEN(str + end_byte);
}
if (start_byte >= (long)slen || end_byte <= start_byte)
return NULL;
return vim_strnsave(str + start_byte, end_byte - start_byte);
}
/*
* Handle:
* - expr[expr], expr[expr:expr] subscript
@@ -5582,8 +5697,8 @@ handle_subscript(
*arg = p;
if (ret == OK)
{
if ((*arg)[2] == '{')
// expr->{lambda}()
if (((*arg)[2] == '{' && !in_vim9script()) || (*arg)[2] == '(')
// expr->{lambda}() or expr->(lambda)()
ret = eval_lambda(arg, rettv, evalarg, verbose);
else
// expr->name()
@@ -6115,8 +6230,14 @@ do_string_sub(
if (p_cpo == empty_option)
p_cpo = save_cpo;
else
{
// Darn, evaluating {sub} expression or {expr} changed the value.
// If it's still empty it was changed and restored, need to restore in
// the complicated way.
if (*p_cpo == NUL)
set_option_value((char_u *)"cpo", 0L, save_cpo, 0);
free_string_option(save_cpo);
}
return ret;
}

View File

@@ -68,7 +68,7 @@ buflist_find_by_name(char_u *name, int curtab_only)
save_magic = p_magic;
p_magic = TRUE;
save_cpo = p_cpo;
p_cpo = (char_u *)"";
p_cpo = empty_option;
buf = buflist_findnr(buflist_findpat(name, name + STRLEN(name),
TRUE, FALSE, curtab_only));
@@ -807,6 +807,9 @@ f_setline(typval_T *argvars, typval_T *rettv)
switch_buffer(bufref_T *save_curbuf, buf_T *buf)
{
block_autocmds();
#ifdef FEAT_FOLDING
++disable_fold_update;
#endif
set_bufref(save_curbuf, curbuf);
--curbuf->b_nwindows;
curbuf = buf;
@@ -821,6 +824,9 @@ switch_buffer(bufref_T *save_curbuf, buf_T *buf)
restore_buffer(bufref_T *save_curbuf)
{
unblock_autocmds();
#ifdef FEAT_FOLDING
--disable_fold_update;
#endif
// Check for valid buffer, just in case.
if (bufref_valid(save_curbuf))
{

View File

@@ -47,6 +47,8 @@ static void f_ceil(typval_T *argvars, typval_T *rettv);
#endif
static void f_changenr(typval_T *argvars, typval_T *rettv);
static void f_char2nr(typval_T *argvars, typval_T *rettv);
static void f_charcol(typval_T *argvars, typval_T *rettv);
static void f_charidx(typval_T *argvars, typval_T *rettv);
static void f_col(typval_T *argvars, typval_T *rettv);
static void f_confirm(typval_T *argvars, typval_T *rettv);
static void f_copy(typval_T *argvars, typval_T *rettv);
@@ -86,12 +88,14 @@ static void f_function(typval_T *argvars, typval_T *rettv);
static void f_garbagecollect(typval_T *argvars, typval_T *rettv);
static void f_get(typval_T *argvars, typval_T *rettv);
static void f_getchangelist(typval_T *argvars, typval_T *rettv);
static void f_getcharpos(typval_T *argvars, typval_T *rettv);
static void f_getcharsearch(typval_T *argvars, typval_T *rettv);
static void f_getenv(typval_T *argvars, typval_T *rettv);
static void f_getfontname(typval_T *argvars, typval_T *rettv);
static void f_getjumplist(typval_T *argvars, typval_T *rettv);
static void f_getpid(typval_T *argvars, typval_T *rettv);
static void f_getcurpos(typval_T *argvars, typval_T *rettv);
static void f_getcursorcharpos(typval_T *argvars, typval_T *rettv);
static void f_getpos(typval_T *argvars, typval_T *rettv);
static void f_getreg(typval_T *argvars, typval_T *rettv);
static void f_getreginfo(typval_T *argvars, typval_T *rettv);
@@ -189,7 +193,9 @@ static void f_searchdecl(typval_T *argvars, typval_T *rettv);
static void f_searchpair(typval_T *argvars, typval_T *rettv);
static void f_searchpairpos(typval_T *argvars, typval_T *rettv);
static void f_searchpos(typval_T *argvars, typval_T *rettv);
static void f_setcharpos(typval_T *argvars, typval_T *rettv);
static void f_setcharsearch(typval_T *argvars, typval_T *rettv);
static void f_setcursorcharpos(typval_T *argvars, typval_T *rettv);
static void f_setenv(typval_T *argvars, typval_T *rettv);
static void f_setfperm(typval_T *argvars, typval_T *rettv);
static void f_setpos(typval_T *argvars, typval_T *rettv);
@@ -789,6 +795,10 @@ static funcentry_T global_functions[] =
ret_number, f_char2nr},
{"charclass", 1, 1, FEARG_1, NULL,
ret_number, f_charclass},
{"charcol", 1, 1, FEARG_1, NULL,
ret_number, f_charcol},
{"charidx", 2, 3, FEARG_1, NULL,
ret_number, f_charidx},
{"chdir", 1, 1, FEARG_1, NULL,
ret_string, f_chdir},
{"cindent", 1, 1, FEARG_1, NULL,
@@ -925,6 +935,8 @@ static funcentry_T global_functions[] =
ret_number, f_getchar},
{"getcharmod", 0, 0, 0, NULL,
ret_number, f_getcharmod},
{"getcharpos", 1, 1, FEARG_1, NULL,
ret_list_number, f_getcharpos},
{"getcharsearch", 0, 0, 0, NULL,
ret_dict_any, f_getcharsearch},
{"getcmdline", 0, 0, 0, NULL,
@@ -939,6 +951,8 @@ static funcentry_T global_functions[] =
ret_list_string, f_getcompletion},
{"getcurpos", 0, 1, FEARG_1, NULL,
ret_list_number, f_getcurpos},
{"getcursorcharpos", 0, 1, FEARG_1, NULL,
ret_list_number, f_getcursorcharpos},
{"getcwd", 0, 2, FEARG_1, NULL,
ret_string, f_getcwd},
{"getenv", 1, 1, FEARG_1, NULL,
@@ -1391,10 +1405,14 @@ static funcentry_T global_functions[] =
ret_void, f_setbufvar},
{"setcellwidths", 1, 1, FEARG_1, NULL,
ret_void, f_setcellwidths},
{"setcharpos", 2, 2, FEARG_2, NULL,
ret_number, f_setcharpos},
{"setcharsearch", 1, 1, FEARG_1, NULL,
ret_void, f_setcharsearch},
{"setcmdpos", 1, 1, FEARG_1, NULL,
ret_number, f_setcmdpos},
{"setcursorcharpos", 1, 3, FEARG_1, NULL,
ret_number, f_setcursorcharpos},
{"setenv", 2, 2, FEARG_2, NULL,
ret_void, f_setenv},
{"setfperm", 2, 2, FEARG_1, NULL,
@@ -1750,7 +1768,7 @@ static funcentry_T global_functions[] =
{"winrestview", 1, 1, FEARG_1, NULL,
ret_void, f_winrestview},
{"winsaveview", 0, 0, 0, NULL,
ret_dict_any, f_winsaveview},
ret_dict_number, f_winsaveview},
{"winwidth", 1, 1, FEARG_1, NULL,
ret_number, f_winwidth},
{"wordcount", 0, 0, 0, NULL,
@@ -1911,6 +1929,15 @@ internal_func_ret_type(int idx, int argcount, type_T **argtypes)
return global_functions[idx].f_retfunc(argcount, argtypes);
}
/*
* Return TRUE if "idx" is for the map() function.
*/
int
internal_func_is_map(int idx)
{
return global_functions[idx].f_func == f_map;
}
/*
* Check the argument count to use for internal function "idx".
* Returns -1 for failure, 0 if no method base accepted, 1 if method base is
@@ -2420,34 +2447,19 @@ f_char2nr(typval_T *argvars, typval_T *rettv)
rettv->vval.v_number = tv_get_string(&argvars[0])[0];
}
win_T *
get_optional_window(typval_T *argvars, int idx)
{
win_T *win = curwin;
if (argvars[idx].v_type != VAR_UNKNOWN)
{
win = find_win_by_nr_or_id(&argvars[idx]);
if (win == NULL)
{
emsg(_(e_invalwindow));
return NULL;
}
}
return win;
}
/*
* "col(string)" function
* Get the current cursor column and store it in 'rettv'. If 'charcol' is TRUE,
* returns the character index of the column. Otherwise, returns the byte index
* of the column.
*/
static void
f_col(typval_T *argvars, typval_T *rettv)
get_col(typval_T *argvars, typval_T *rettv, int charcol)
{
colnr_T col = 0;
pos_T *fp;
int fnum = curbuf->b_fnum;
fp = var2fpos(&argvars[0], FALSE, &fnum);
fp = var2fpos(&argvars[0], FALSE, &fnum, charcol);
if (fp != NULL && fnum == curbuf->b_fnum)
{
if (fp->col == MAXCOL)
@@ -2481,6 +2493,92 @@ f_col(typval_T *argvars, typval_T *rettv)
rettv->vval.v_number = col;
}
/*
* "charcol()" function
*/
static void
f_charcol(typval_T *argvars, typval_T *rettv)
{
get_col(argvars, rettv, TRUE);
}
/*
* "charidx()" function
*/
static void
f_charidx(typval_T *argvars, typval_T *rettv)
{
char_u *str;
varnumber_T idx;
int countcc = FALSE;
char_u *p;
int len;
int (*ptr2len)(char_u *);
rettv->vval.v_number = -1;
if (argvars[0].v_type != VAR_STRING || argvars[1].v_type != VAR_NUMBER
|| (argvars[2].v_type != VAR_UNKNOWN
&& argvars[2].v_type != VAR_NUMBER))
{
emsg(_(e_invarg));
return;
}
str = tv_get_string_chk(&argvars[0]);
idx = tv_get_number_chk(&argvars[1], NULL);
if (str == NULL || idx < 0)
return;
if (argvars[2].v_type != VAR_UNKNOWN)
countcc = (int)tv_get_bool(&argvars[2]);
if (countcc < 0 || countcc > 1)
{
semsg(_(e_using_number_as_bool_nr), countcc);
return;
}
if (enc_utf8 && countcc)
ptr2len = utf_ptr2len;
else
ptr2len = mb_ptr2len;
for (p = str, len = 0; p <= str + idx; len++)
{
if (*p == NUL)
return;
p += ptr2len(p);
}
rettv->vval.v_number = len > 0 ? len - 1 : 0;
}
win_T *
get_optional_window(typval_T *argvars, int idx)
{
win_T *win = curwin;
if (argvars[idx].v_type != VAR_UNKNOWN)
{
win = find_win_by_nr_or_id(&argvars[idx]);
if (win == NULL)
{
emsg(_(e_invalwindow));
return NULL;
}
}
return win;
}
/*
* "col(string)" function
*/
static void
f_col(typval_T *argvars, typval_T *rettv)
{
get_col(argvars, rettv, FALSE);
}
/*
* "confirm(message, buttons[, default [, type]])" function
*/
@@ -2579,26 +2677,24 @@ f_cosh(typval_T *argvars, typval_T *rettv)
#endif
/*
* "cursor(lnum, col)" function, or
* "cursor(list)"
*
* Moves the cursor to the specified line and column.
* Returns 0 when the position could be set, -1 otherwise.
* Set the cursor position.
* If 'charcol' is TRUE, then use the column number as a character offet.
* Otherwise use the column number as a byte offset.
*/
static void
f_cursor(typval_T *argvars, typval_T *rettv)
set_cursorpos(typval_T *argvars, typval_T *rettv, int charcol)
{
long line, col;
long coladd = 0;
int set_curswant = TRUE;
rettv->vval.v_number = -1;
if (argvars[1].v_type == VAR_UNKNOWN)
if (argvars[0].v_type == VAR_LIST)
{
pos_T pos;
colnr_T curswant = -1;
if (list2fpos(argvars, &pos, NULL, &curswant) == FAIL)
if (list2fpos(argvars, &pos, NULL, &curswant, charcol) == FAIL)
{
emsg(_(e_invarg));
return;
@@ -2612,13 +2708,24 @@ f_cursor(typval_T *argvars, typval_T *rettv)
set_curswant = FALSE;
}
}
else
else if ((argvars[0].v_type == VAR_NUMBER ||
argvars[0].v_type == VAR_STRING)
&& argvars[1].v_type == VAR_NUMBER)
{
line = tv_get_lnum(argvars);
if (line < 0)
semsg(_(e_invarg2), tv_get_string(&argvars[0]));
col = (long)tv_get_number_chk(&argvars[1], NULL);
if (charcol)
col = buf_charidx_to_byteidx(curbuf, line, col);
if (argvars[2].v_type != VAR_UNKNOWN)
coladd = (long)tv_get_number_chk(&argvars[2], NULL);
}
else
{
emsg(_(e_invarg));
return;
}
if (line < 0 || col < 0 || coladd < 0)
return; // type error; errmsg already given
if (line > 0)
@@ -2637,6 +2744,19 @@ f_cursor(typval_T *argvars, typval_T *rettv)
rettv->vval.v_number = 0;
}
/*
* "cursor(lnum, col)" function, or
* "cursor(list)"
*
* Moves the cursor to the specified line and column.
* Returns 0 when the position could be set, -1 otherwise.
*/
static void
f_cursor(typval_T *argvars, typval_T *rettv)
{
set_cursorpos(argvars, rettv, FALSE);
}
#ifdef MSWIN
/*
* "debugbreak()" function
@@ -3441,7 +3561,8 @@ common_function(typval_T *argvars, typval_T *rettv, int is_funcref)
{
name = s;
trans_name = trans_function_name(&name, &is_global, FALSE,
TFN_INT | TFN_QUIET | TFN_NO_AUTOLOAD | TFN_NO_DEREF, NULL, NULL);
TFN_INT | TFN_QUIET | TFN_NO_AUTOLOAD | TFN_NO_DEREF,
NULL, NULL, NULL);
if (*name != NUL)
s = NULL;
}
@@ -3830,6 +3951,88 @@ f_getchangelist(typval_T *argvars, typval_T *rettv)
#endif
}
static void
getpos_both(
typval_T *argvars,
typval_T *rettv,
int getcurpos,
int charcol)
{
pos_T *fp = NULL;
pos_T pos;
win_T *wp = curwin;
list_T *l;
int fnum = -1;
if (rettv_list_alloc(rettv) == OK)
{
l = rettv->vval.v_list;
if (getcurpos)
{
if (argvars[0].v_type != VAR_UNKNOWN)
{
wp = find_win_by_nr_or_id(&argvars[0]);
if (wp != NULL)
fp = &wp->w_cursor;
}
else
fp = &curwin->w_cursor;
if (fp != NULL && charcol)
{
pos = *fp;
pos.col = buf_byteidx_to_charidx(wp->w_buffer, pos.lnum,
pos.col) - 1;
fp = &pos;
}
}
else
fp = var2fpos(&argvars[0], TRUE, &fnum, charcol);
if (fnum != -1)
list_append_number(l, (varnumber_T)fnum);
else
list_append_number(l, (varnumber_T)0);
list_append_number(l, (fp != NULL) ? (varnumber_T)fp->lnum
: (varnumber_T)0);
list_append_number(l, (fp != NULL)
? (varnumber_T)(fp->col == MAXCOL ? MAXCOL : fp->col + 1)
: (varnumber_T)0);
list_append_number(l, (fp != NULL) ? (varnumber_T)fp->coladd :
(varnumber_T)0);
if (getcurpos)
{
int save_set_curswant = curwin->w_set_curswant;
colnr_T save_curswant = curwin->w_curswant;
colnr_T save_virtcol = curwin->w_virtcol;
if (wp == curwin)
update_curswant();
list_append_number(l, wp == NULL ? 0 : wp->w_curswant == MAXCOL
? (varnumber_T)MAXCOL : (varnumber_T)wp->w_curswant + 1);
// Do not change "curswant", as it is unexpected that a get
// function has a side effect.
if (wp == curwin && save_set_curswant)
{
curwin->w_set_curswant = save_set_curswant;
curwin->w_curswant = save_curswant;
curwin->w_virtcol = save_virtcol;
curwin->w_valid &= ~VALID_VIRTCOL;
}
}
}
else
rettv->vval.v_number = FALSE;
}
/*
* "getcharpos()" function
*/
static void
f_getcharpos(typval_T *argvars UNUSED, typval_T *rettv)
{
getpos_both(argvars, rettv, FALSE, TRUE);
}
/*
* "getcharsearch()" function
*/
@@ -3962,77 +4165,19 @@ f_getpid(typval_T *argvars UNUSED, typval_T *rettv)
rettv->vval.v_number = mch_get_pid();
}
static void
getpos_both(
typval_T *argvars,
typval_T *rettv,
int getcurpos)
{
pos_T *fp = NULL;
win_T *wp = curwin;
list_T *l;
int fnum = -1;
if (rettv_list_alloc(rettv) == OK)
{
l = rettv->vval.v_list;
if (getcurpos)
{
if (argvars[0].v_type != VAR_UNKNOWN)
{
wp = find_win_by_nr_or_id(&argvars[0]);
if (wp != NULL)
fp = &wp->w_cursor;
}
else
fp = &curwin->w_cursor;
}
else
fp = var2fpos(&argvars[0], TRUE, &fnum);
if (fnum != -1)
list_append_number(l, (varnumber_T)fnum);
else
list_append_number(l, (varnumber_T)0);
list_append_number(l, (fp != NULL) ? (varnumber_T)fp->lnum
: (varnumber_T)0);
list_append_number(l, (fp != NULL)
? (varnumber_T)(fp->col == MAXCOL ? MAXCOL : fp->col + 1)
: (varnumber_T)0);
list_append_number(l, (fp != NULL) ? (varnumber_T)fp->coladd :
(varnumber_T)0);
if (getcurpos)
{
int save_set_curswant = curwin->w_set_curswant;
colnr_T save_curswant = curwin->w_curswant;
colnr_T save_virtcol = curwin->w_virtcol;
if (wp == curwin)
update_curswant();
list_append_number(l, wp == NULL ? 0 : wp->w_curswant == MAXCOL
? (varnumber_T)MAXCOL : (varnumber_T)wp->w_curswant + 1);
// Do not change "curswant", as it is unexpected that a get
// function has a side effect.
if (wp == curwin && save_set_curswant)
{
curwin->w_set_curswant = save_set_curswant;
curwin->w_curswant = save_curswant;
curwin->w_virtcol = save_virtcol;
curwin->w_valid &= ~VALID_VIRTCOL;
}
}
}
else
rettv->vval.v_number = FALSE;
}
/*
* "getcurpos()" function
*/
static void
f_getcurpos(typval_T *argvars, typval_T *rettv)
{
getpos_both(argvars, rettv, TRUE);
getpos_both(argvars, rettv, TRUE, FALSE);
}
static void
f_getcursorcharpos(typval_T *argvars, typval_T *rettv)
{
getpos_both(argvars, rettv, TRUE, TRUE);
}
/*
@@ -4041,7 +4186,7 @@ f_getcurpos(typval_T *argvars, typval_T *rettv)
static void
f_getpos(typval_T *argvars, typval_T *rettv)
{
getpos_both(argvars, rettv, FALSE);
getpos_both(argvars, rettv, FALSE, FALSE);
}
/*
@@ -6126,14 +6271,14 @@ f_line(typval_T *argvars, typval_T *rettv)
== OK)
{
check_cursor();
fp = var2fpos(&argvars[0], TRUE, &fnum);
fp = var2fpos(&argvars[0], TRUE, &fnum, FALSE);
}
restore_win_noblock(save_curwin, save_curtab, TRUE);
}
}
else
// use current window
fp = var2fpos(&argvars[0], TRUE, &fnum);
fp = var2fpos(&argvars[0], TRUE, &fnum, FALSE);
if (fp != NULL)
lnum = fp->lnum;
@@ -6260,7 +6405,7 @@ find_some_match(typval_T *argvars, typval_T *rettv, matchtype_T type)
// Make 'cpoptions' empty, the 'l' flag should not be used here.
save_cpo = p_cpo;
p_cpo = (char_u *)"";
p_cpo = empty_option;
rettv->vval.v_number = -1;
if (type == MATCH_LIST || type == MATCH_POS)
@@ -7968,8 +8113,14 @@ theend:
if (p_cpo == empty_option)
p_cpo = save_cpo;
else
{
// Darn, evaluating the {skip} expression changed the value.
// If it's still empty it was changed and restored, need to restore in
// the complicated way.
if (*p_cpo == NUL)
set_option_value((char_u *)"cpo", 0L, save_cpo, 0);
free_string_option(save_cpo);
}
return retval;
}
@@ -8002,6 +8153,60 @@ f_searchpos(typval_T *argvars, typval_T *rettv)
list_append_number(rettv->vval.v_list, (varnumber_T)n);
}
/*
* Set the cursor or mark position.
* If 'charpos' is TRUE, then use the column number as a character offet.
* Otherwise use the column number as a byte offset.
*/
static void
set_position(typval_T *argvars, typval_T *rettv, int charpos)
{
pos_T pos;
int fnum;
char_u *name;
colnr_T curswant = -1;
rettv->vval.v_number = -1;
name = tv_get_string_chk(argvars);
if (name != NULL)
{
if (list2fpos(&argvars[1], &pos, &fnum, &curswant, charpos) == OK)
{
if (pos.col != MAXCOL && --pos.col < 0)
pos.col = 0;
if ((name[0] == '.' && name[1] == NUL))
{
// set cursor; "fnum" is ignored
curwin->w_cursor = pos;
if (curswant >= 0)
{
curwin->w_curswant = curswant - 1;
curwin->w_set_curswant = FALSE;
}
check_cursor();
rettv->vval.v_number = 0;
}
else if (name[0] == '\'' && name[1] != NUL && name[2] == NUL)
{
// set mark
if (setmark_pos(name[1], &pos, fnum) == OK)
rettv->vval.v_number = 0;
}
else
emsg(_(e_invarg));
}
}
}
/*
* "setcharpos()" function
*/
static void
f_setcharpos(typval_T *argvars, typval_T *rettv)
{
set_position(argvars, rettv, TRUE);
}
static void
f_setcharsearch(typval_T *argvars, typval_T *rettv UNUSED)
{
@@ -8043,6 +8248,15 @@ f_setcharsearch(typval_T *argvars, typval_T *rettv UNUSED)
}
}
/*
* "setcursorcharpos" function
*/
static void
f_setcursorcharpos(typval_T *argvars, typval_T *rettv UNUSED)
{
set_cursorpos(argvars, rettv, TRUE);
}
/*
* "setenv()" function
*/
@@ -8102,41 +8316,7 @@ f_setfperm(typval_T *argvars, typval_T *rettv)
static void
f_setpos(typval_T *argvars, typval_T *rettv)
{
pos_T pos;
int fnum;
char_u *name;
colnr_T curswant = -1;
rettv->vval.v_number = -1;
name = tv_get_string_chk(argvars);
if (name != NULL)
{
if (list2fpos(&argvars[1], &pos, &fnum, &curswant) == OK)
{
if (pos.col != MAXCOL && --pos.col < 0)
pos.col = 0;
if (name[0] == '.' && name[1] == NUL)
{
// set cursor; "fnum" is ignored
curwin->w_cursor = pos;
if (curswant >= 0)
{
curwin->w_curswant = curswant - 1;
curwin->w_set_curswant = FALSE;
}
check_cursor();
rettv->vval.v_number = 0;
}
else if (name[0] == '\'' && name[1] != NUL && name[2] == NUL)
{
// set mark
if (setmark_pos(name[1], &pos, fnum) == OK)
rettv->vval.v_number = 0;
}
else
emsg(_(e_invarg));
}
}
set_position(argvars, rettv, FALSE);
}
/*
@@ -8667,7 +8847,7 @@ f_split(typval_T *argvars, typval_T *rettv)
// Make 'cpoptions' empty, the 'l' flag should not be used here.
save_cpo = p_cpo;
p_cpo = (char_u *)"";
p_cpo = empty_option;
str = tv_get_string(&argvars[0]);
if (argvars[1].v_type != VAR_UNKNOWN)
@@ -9884,7 +10064,7 @@ f_virtcol(typval_T *argvars, typval_T *rettv)
int fnum = curbuf->b_fnum;
int len;
fp = var2fpos(&argvars[0], FALSE, &fnum);
fp = var2fpos(&argvars[0], FALSE, &fnum, FALSE);
if (fp != NULL && fp->lnum <= curbuf->b_ml.ml_line_count
&& fnum == curbuf->b_fnum)
{

View File

@@ -738,25 +738,27 @@ ex_let(exarg_T *eap)
int first = TRUE;
int concat;
int has_assign;
int flags = eap->cmdidx == CMD_const ? ASSIGN_CONST : 0;
int flags = 0;
int vim9script = in_vim9script();
if (eap->cmdidx == CMD_final && !vim9script)
{
// In legacy Vim script ":final" is short for ":finally".
ex_finally(eap);
return;
// In legacy Vim script ":final" is short for ":finally".
ex_finally(eap);
return;
}
if (eap->cmdidx == CMD_let && vim9script)
{
emsg(_(e_cannot_use_let_in_vim9_script));
return;
}
if (eap->cmdidx == CMD_const && !vim9script && !eap->forceit)
// In legacy Vim script ":const" works like ":final".
eap->cmdidx = CMD_final;
// detect Vim9 assignment without ":let" or ":const"
if (eap->cmdidx == CMD_const)
flags |= ASSIGN_CONST;
else if (eap->cmdidx == CMD_final)
flags |= ASSIGN_FINAL;
// Vim9 assignment without ":let", ":const" or ":final"
if (eap->arg == eap->cmd)
flags |= ASSIGN_NO_DECL;
@@ -782,7 +784,7 @@ ex_let(exarg_T *eap)
{
if (vim9script)
{
// Vim9 declaration ":let var: type"
// Vim9 declaration ":var name: type"
arg = vim9_declare_scriptvar(eap, arg);
}
else
@@ -861,7 +863,8 @@ ex_let(exarg_T *eap)
|| !IS_WHITE_OR_NUL(*expr)))
{
vim_strncpy(op, expr - len, len);
semsg(_(e_white_space_required_before_and_after_str), op);
semsg(_(e_white_space_required_before_and_after_str_at_str),
op, argend);
i = FAIL;
}
@@ -909,7 +912,7 @@ ex_let_vars(
int copy, // copy values from "tv", don't move
int semicolon, // from skip_var_list()
int var_count, // from skip_var_list()
int flags, // ASSIGN_CONST, ASSIGN_NO_DECL
int flags, // ASSIGN_FINAL, ASSIGN_CONST, etc.
char_u *op)
{
char_u *arg = arg_start;
@@ -1264,7 +1267,7 @@ ex_let_one(
char_u *arg, // points to variable name
typval_T *tv, // value to assign to variable
int copy, // copy value from "tv"
int flags, // ASSIGN_CONST, ASSIGN_NO_DECL
int flags, // ASSIGN_CONST, ASSIGN_FINAL, etc.
char_u *endchars, // valid chars after variable name or NULL
char_u *op) // "+", "-", "." or NULL
{
@@ -1276,7 +1279,8 @@ ex_let_one(
int opt_flags;
char_u *tofree = NULL;
if (in_vim9script() && (flags & ASSIGN_NO_DECL) == 0
if (in_vim9script() && (flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0
&& (flags & (ASSIGN_CONST | ASSIGN_FINAL)) == 0
&& vim_strchr((char_u *)"$@&", *arg) != NULL)
{
vim9_declare_error(arg);
@@ -1286,7 +1290,7 @@ ex_let_one(
// ":let $VAR = expr": Set environment variable.
if (*arg == '$')
{
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_("E996: Cannot lock an environment variable"));
return NULL;
@@ -1338,7 +1342,7 @@ ex_let_one(
// ":let &g:option = expr": Set global option value.
else if (*arg == '&')
{
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_(e_const_option));
return NULL;
@@ -1351,7 +1355,7 @@ ex_let_one(
else
{
long n = 0;
int opt_type;
getoption_T opt_type;
long numval;
char_u *stringval = NULL;
char_u *s = NULL;
@@ -1361,10 +1365,19 @@ ex_let_one(
*p = NUL;
opt_type = get_option_value(arg, &numval, &stringval, opt_flags);
if ((opt_type == 1 || opt_type == -1)
if ((opt_type == gov_bool
|| opt_type == gov_number
|| opt_type == gov_hidden_bool
|| opt_type == gov_hidden_number)
&& (tv->v_type != VAR_STRING || !in_vim9script()))
// number, possibly hidden
n = (long)tv_get_number(tv);
{
if (opt_type == gov_bool || opt_type == gov_hidden_bool)
// bool, possibly hidden
n = (long)tv_get_bool(tv);
else
// number, possibly hidden
n = (long)tv_get_number(tv);
}
// Avoid setting a string option to the text "v:false" or similar.
// In Vim9 script also don't convert a number to string.
@@ -1374,8 +1387,9 @@ ex_let_one(
if (op != NULL && *op != '=')
{
if ((opt_type == 1 && *op == '.')
|| (opt_type == 0 && *op != '.'))
if (((opt_type == gov_bool || opt_type == gov_number)
&& *op == '.')
|| (opt_type == gov_string && *op != '.'))
{
semsg(_(e_letwrong), op);
failed = TRUE; // don't set the value
@@ -1383,7 +1397,9 @@ ex_let_one(
}
else
{
if (opt_type == 1) // number
// number, in legacy script also bool
if (opt_type == gov_number
|| (opt_type == gov_bool && !in_vim9script()))
{
switch (*op)
{
@@ -1394,7 +1410,8 @@ ex_let_one(
case '%': n = (long)num_modulus(numval, n); break;
}
}
else if (opt_type == 0 && stringval != NULL && s != NULL)
else if (opt_type == gov_string
&& stringval != NULL && s != NULL)
{
// string
s = concat_str(stringval, s);
@@ -1406,7 +1423,7 @@ ex_let_one(
if (!failed)
{
if (opt_type != 0 || s != NULL)
if (opt_type != gov_string || s != NULL)
{
set_option_value(arg, n, s, opt_flags);
arg_end = p;
@@ -1422,7 +1439,7 @@ ex_let_one(
// ":let @r = expr": Set register contents.
else if (*arg == '@')
{
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_("E996: Cannot lock a register"));
return NULL;
@@ -1464,7 +1481,9 @@ ex_let_one(
{
lval_T lv;
p = get_lval(arg, tv, &lv, FALSE, FALSE, 0, FNE_CHECK_START);
p = get_lval(arg, tv, &lv, FALSE, FALSE,
(flags & (ASSIGN_NO_DECL | ASSIGN_DECL))
? GLV_NO_DECL : 0, FNE_CHECK_START);
if (p != NULL && lv.ll_name != NULL)
{
if (endchars != NULL && vim_strchr(endchars,
@@ -1554,7 +1573,7 @@ ex_unletlock(
{
// Parse the name and find the end.
name_end = get_lval(arg, NULL, &lv, TRUE, eap->skip || error,
glv_flags, FNE_CHECK_START);
glv_flags | GLV_NO_DECL, FNE_CHECK_START);
if (lv.ll_name == NULL)
error = TRUE; // error but continue parsing
if (name_end == NULL || (!VIM_ISWHITE(*name_end)
@@ -1663,10 +1682,20 @@ do_unlet(char_u *name, int forceit)
dict_T *d;
dictitem_T *di;
// can't :unlet a script variable in Vim9 script
if (in_vim9script() && check_vim9_unlet(name) == FAIL)
return FAIL;
ht = find_var_ht(name, &varname);
// can't :unlet a script variable in Vim9 script from a function
if (ht == get_script_local_ht()
&& SCRIPT_ID_VALID(current_sctx.sc_sid)
&& SCRIPT_ITEM(current_sctx.sc_sid)->sn_version
== SCRIPT_VERSION_VIM9
&& check_vim9_unlet(name) == FAIL)
return FAIL;
if (ht != NULL && *varname != NUL)
{
d = get_current_funccal_dict(ht);
@@ -2047,10 +2076,10 @@ get_var_special_name(int nr)
{
switch (nr)
{
case VVAL_FALSE: return "v:false";
case VVAL_TRUE: return "v:true";
case VVAL_FALSE: return in_vim9script() ? "false" : "v:false";
case VVAL_TRUE: return in_vim9script() ? "true" : "v:true";
case VVAL_NULL: return in_vim9script() ? "null" : "v:null";
case VVAL_NONE: return "v:none";
case VVAL_NULL: return "v:null";
}
internal_error("get_var_special_name()");
return "42";
@@ -2517,7 +2546,7 @@ eval_variable(
rettv->vval.v_string = vim_strsave(import->imp_funcname);
}
}
else if (import->imp_all)
else if (import->imp_flags & IMP_FLAGS_STAR)
{
emsg("Sorry, 'import * as X' not implemented yet");
ret = FAIL;
@@ -2610,8 +2639,7 @@ check_vars(char_u *name, int len)
* Find variable "name" in the list of variables.
* Return a pointer to it if found, NULL if not found.
* Careful: "a:0" variables don't have a name.
* When "htp" is not NULL we are writing to the variable, set "htp" to the
* hashtab_T used.
* When "htp" is not NULL set "htp" to the hashtab_T used.
*/
dictitem_T *
find_var(char_u *name, hashtab_T **htp, int no_autoload)
@@ -2625,12 +2653,12 @@ find_var(char_u *name, hashtab_T **htp, int no_autoload)
*htp = ht;
if (ht == NULL)
return NULL;
ret = find_var_in_ht(ht, *name, varname, no_autoload || htp != NULL);
ret = find_var_in_ht(ht, *name, varname, no_autoload);
if (ret != NULL)
return ret;
// Search in parent scope for lambda
ret = find_var_in_scoped_ht(name, no_autoload || htp != NULL);
ret = find_var_in_scoped_ht(name, no_autoload);
if (ret != NULL)
return ret;
@@ -2640,8 +2668,7 @@ find_var(char_u *name, hashtab_T **htp, int no_autoload)
ht = get_script_local_ht();
if (ht != NULL)
{
ret = find_var_in_ht(ht, *name, varname,
no_autoload || htp != NULL);
ret = find_var_in_ht(ht, *name, varname, no_autoload);
if (ret != NULL)
{
if (htp != NULL)
@@ -3031,7 +3058,7 @@ set_var(
typval_T *tv,
int copy) // make copy of value in "tv"
{
set_var_const(name, NULL, tv, copy, ASSIGN_NO_DECL);
set_var_const(name, NULL, tv, copy, ASSIGN_DECL);
}
/*
@@ -3045,7 +3072,7 @@ set_var_const(
type_T *type,
typval_T *tv_arg,
int copy, // make copy of value in "tv"
int flags) // ASSIGN_CONST, ASSIGN_NO_DECL
int flags) // ASSIGN_CONST, ASSIGN_FINAL, etc.
{
typval_T *tv = tv_arg;
typval_T bool_tv;
@@ -3065,7 +3092,8 @@ set_var_const(
if (vim9script
&& !is_script_local
&& (flags & ASSIGN_NO_DECL) == 0
&& (flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0
&& (flags & (ASSIGN_CONST | ASSIGN_FINAL)) == 0
&& name[1] == ':')
{
vim9_declare_error(name);
@@ -3095,7 +3123,7 @@ set_var_const(
{
if ((di->di_flags & DI_FLAGS_RELOAD) == 0)
{
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
{
emsg(_(e_cannot_mod));
goto failed;
@@ -3103,7 +3131,7 @@ set_var_const(
if (is_script_local && vim9script)
{
if ((flags & ASSIGN_NO_DECL) == 0)
if ((flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0)
{
semsg(_(e_redefining_script_item_str), name);
goto failed;
@@ -3114,19 +3142,20 @@ set_var_const(
goto failed;
}
// Check in this order for backwards compatibility:
// - Whether the variable is read-only
// - Whether the variable value is locked
// - Whether the variable is locked
if (var_check_ro(di->di_flags, name, FALSE)
|| value_check_lock(di->di_tv.v_lock, name, FALSE)
|| var_check_lock(di->di_flags, name, FALSE))
if (var_check_permission(di, name) == FAIL)
goto failed;
}
else
{
// can only redefine once
di->di_flags &= ~DI_FLAGS_RELOAD;
// A Vim9 script-local variable is also present in sn_all_vars and
// sn_var_vals. It may set "type" from "tv".
if (is_script_local && vim9script)
update_vim9_script_var(FALSE, di, flags, tv, &type);
}
// existing variable, need to clear the value
// Handle setting internal di: variables separately where needed to
@@ -3176,8 +3205,15 @@ set_var_const(
clear_tv(&di->di_tv);
}
else // add a new variable
else
{
// add a new variable
if (vim9script && is_script_local && (flags & ASSIGN_NO_DECL))
{
semsg(_(e_unknown_variable_str), name);
goto failed;
}
// Can't add "v:" or "a:" variable.
if (ht == &vimvarht || ht == get_funccal_args_ht())
{
@@ -3185,8 +3221,10 @@ set_var_const(
goto failed;
}
// Make sure the variable name is valid.
if (!valid_varname(varname))
// Make sure the variable name is valid. In Vim9 script an autoload
// variable must be prefixed with "g:".
if (!valid_varname(varname, !vim9script
|| STRNCMP(name, "g:", 2) == 0))
goto failed;
di = alloc(sizeof(dictitem_T) + STRLEN(varname));
@@ -3199,13 +3237,13 @@ set_var_const(
goto failed;
}
di->di_flags = DI_FLAGS_ALLOC;
if (flags & ASSIGN_CONST)
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
di->di_flags |= DI_FLAGS_LOCK;
// A Vim9 script-local variable is also added to sn_all_vars and
// sn_var_vals.
// sn_var_vals. It may set "type" from "tv".
if (is_script_local && vim9script)
add_vim9_script_var(di, tv, type);
update_vim9_script_var(TRUE, di, flags, tv, &type);
}
if (copy || tv->v_type == VAR_NUMBER || tv->v_type == VAR_FLOAT)
@@ -3217,7 +3255,16 @@ set_var_const(
init_tv(tv);
}
// ":const var = val" locks the value
if (vim9script && type != NULL)
{
if (type->tt_type == VAR_DICT && di->di_tv.vval.v_dict != NULL)
di->di_tv.vval.v_dict->dv_type = alloc_type(type);
else if (type->tt_type == VAR_LIST && di->di_tv.vval.v_list != NULL)
di->di_tv.vval.v_list->lv_type = alloc_type(type);
}
// ":const var = value" locks the value
// ":final var = value" locks "var"
if (flags & ASSIGN_CONST)
// Like :lockvar! name: lock the value and what it contains, but only
// if the reference count is up to one. That locks only literal
@@ -3229,6 +3276,22 @@ failed:
clear_tv(tv_arg);
}
/*
* Check in this order for backwards compatibility:
* - Whether the variable is read-only
* - Whether the variable value is locked
* - Whether the variable is locked
*/
int
var_check_permission(dictitem_T *di, char_u *name)
{
if (var_check_ro(di->di_flags, name, FALSE)
|| value_check_lock(di->di_tv.v_lock, name, FALSE)
|| var_check_lock(di->di_flags, name, FALSE))
return FAIL;
return OK;
}
/*
* Return TRUE if di_flags "flags" indicates variable "name" is read-only.
* Also give an error message.
@@ -3339,17 +3402,17 @@ value_check_lock(int lock, char_u *name, int use_gettext)
}
/*
* Check if a variable name is valid.
* Check if a variable name is valid. When "autoload" is true "#" is allowed.
* Return FALSE and give an error if not.
*/
int
valid_varname(char_u *varname)
valid_varname(char_u *varname, int autoload)
{
char_u *p;
for (p = varname; *p != NUL; ++p)
if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
&& *p != AUTOLOAD_CHAR)
&& !(autoload && *p == AUTOLOAD_CHAR))
{
semsg(_(e_illvar), varname);
return FALSE;
@@ -3449,9 +3512,17 @@ set_option_from_tv(char_u *varname, typval_T *varp)
char_u nbuf[NUMBUFLEN];
int error = FALSE;
if (!in_vim9script() || varp->v_type != VAR_STRING)
numval = (long)tv_get_number_chk(varp, &error);
strval = tv_get_string_buf_chk(varp, nbuf);
if (varp->v_type == VAR_BOOL)
{
numval = (long)varp->vval.v_number;
strval = (char_u *)"0"; // avoid using "false"
}
else
{
if (!in_vim9script() || varp->v_type != VAR_STRING)
numval = (long)tv_get_number_chk(varp, &error);
strval = tv_get_string_buf_chk(varp, nbuf);
}
if (!error && strval != NULL)
set_option_value(varname, numval, strval, OPT_LOCAL);
}

View File

@@ -1010,9 +1010,9 @@ f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv)
ga_init2(&ga, (int)sizeof(char), 70);
FOR_ALL_WINDOWS(wp)
{
sprintf((char *)buf, "%dresize %d|", winnr, wp->w_height);
sprintf((char *)buf, ":%dresize %d|", winnr, wp->w_height);
ga_concat(&ga, buf);
sprintf((char *)buf, "vert %dresize %d|", winnr, wp->w_width);
sprintf((char *)buf, "vert :%dresize %d|", winnr, wp->w_width);
ga_concat(&ga, buf);
++winnr;
}

View File

@@ -1360,8 +1360,8 @@ do_shell(
#endif
#ifdef MSWIN
int winstart = FALSE;
int keep_termcap = FALSE;
#endif
int keep_termcap = !termcap_active;
/*
* Disallow shell commands for "rvim".
@@ -1395,9 +1395,7 @@ do_shell(
msg_putchar('\r'); // put cursor at start of line
if (!autocmd_busy)
{
#ifdef MSWIN
if (!keep_termcap)
#endif
stoptermcap();
}
#ifdef MSWIN
@@ -1488,9 +1486,7 @@ do_shell(
}
#endif // FEAT_GUI_MSWIN
#ifdef MSWIN
if (!keep_termcap) // if keep_termcap is TRUE didn't stop termcap
#endif
starttermcap(); // start termcap if not done by wait_return()
/*
@@ -2660,7 +2656,7 @@ do_ecmd(
if (tlnum <= 0)
tlnum = 1L;
}
// Add BLN_NOCURWIN to avoid a new wininfo items are assocated
// Add BLN_NOCURWIN to avoid a new wininfo items are associated
// with the current window.
newbuf = buflist_new(ffname, sfname, tlnum,
BLN_LISTED | BLN_NOCURWIN);
@@ -3671,7 +3667,8 @@ ex_substitute(exarg_T *eap)
which_pat = RE_LAST; // use last used regexp
delimiter = *cmd++; // remember delimiter character
pat = cmd; // remember start of search pat
cmd = skip_regexp_ex(cmd, delimiter, p_magic, &eap->arg, NULL);
cmd = skip_regexp_ex(cmd, delimiter, magic_isset(),
&eap->arg, NULL, NULL);
if (cmd[0] == delimiter) // end delimiter found
*cmd++ = NUL; // replace it with a NUL
}
@@ -3763,7 +3760,7 @@ ex_substitute(exarg_T *eap)
}
if ((cmdmod.cmod_flags & CMOD_KEEPPATTERNS) == 0)
save_re_pat(RE_SUBST, pat, p_magic);
save_re_pat(RE_SUBST, pat, magic_isset());
// put pattern in history
add_to_history(HIST_SEARCH, pat, TRUE, NUL);
@@ -3777,6 +3774,15 @@ ex_substitute(exarg_T *eap)
++cmd;
else
{
#ifdef FEAT_EVAL
if (in_vim9script())
{
// ignore 'gdefault' and 'edcompatible'
subflags.do_all = FALSE;
subflags.do_ask = FALSE;
}
else
#endif
if (!p_ed)
{
if (p_gd) // default is global on
@@ -3897,7 +3903,7 @@ ex_substitute(exarg_T *eap)
* But don't do it when it starts with "\=", then it's an expression.
*/
if (!(sub[0] == '\\' && sub[1] == '='))
sub = regtilde(sub, p_magic);
sub = regtilde(sub, magic_isset());
/*
* Check for a match on each line.
@@ -4309,7 +4315,7 @@ ex_substitute(exarg_T *eap)
// get length of substitution part
sublen = vim_regsub_multi(&regmatch,
sub_firstlnum - regmatch.startpos[0].lnum,
sub, sub_firstline, FALSE, p_magic, TRUE);
sub, sub_firstline, FALSE, magic_isset(), TRUE);
#ifdef FEAT_EVAL
// If getting the substitute string caused an error, don't do
// the replacement.
@@ -4413,7 +4419,7 @@ ex_substitute(exarg_T *eap)
(void)vim_regsub_multi(&regmatch,
sub_firstlnum - regmatch.startpos[0].lnum,
sub, new_end, TRUE, p_magic, TRUE);
sub, new_end, TRUE, magic_isset(), TRUE);
sub_nsubs++;
did_sub = TRUE;
@@ -4846,7 +4852,7 @@ ex_global(exarg_T *eap)
if (delim)
++cmd; // skip delimiter if there is one
pat = cmd; // remember start of pattern
cmd = skip_regexp_ex(cmd, delim, p_magic, &eap->arg, NULL);
cmd = skip_regexp_ex(cmd, delim, magic_isset(), &eap->arg, NULL, NULL);
if (cmd[0] == delim) // end delimiter found
*cmd++ = NUL; // replace it with a NUL
}
@@ -5161,6 +5167,15 @@ ex_drop(exarg_T *eap)
{
goto_tabpage_win(tp, wp);
curwin->w_arg_idx = 0;
if (!bufIsChanged(curbuf))
{
int save_ar = curbuf->b_p_ar;
// reload the file if it is newer
curbuf->b_p_ar = TRUE;
buf_check_timestamp(curbuf, FALSE);
curbuf->b_p_ar = save_ar;
}
return;
}
}

View File

@@ -1371,7 +1371,7 @@ EXCMD(CMD_slast, "slast", ex_last,
EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
ADDR_NONE),
EXCMD(CMD_smagic, "smagic", ex_submagic,
EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
ADDR_LINES),
EXCMD(CMD_smap, "smap", ex_map,
EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
@@ -1386,7 +1386,7 @@ EXCMD(CMD_snext, "snext", ex_next,
EX_RANGE|EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
ADDR_OTHER),
EXCMD(CMD_snomagic, "snomagic", ex_submagic,
EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
ADDR_LINES),
EXCMD(CMD_snoremap, "snoremap", ex_map,
EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
@@ -1680,7 +1680,7 @@ EXCMD(CMD_vimgrepadd, "vimgrepadd", ex_vimgrep,
EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE|EX_LOCK_OK,
ADDR_OTHER),
EXCMD(CMD_vim9script, "vim9script", ex_vim9script,
EX_CMDWIN|EX_LOCK_OK,
EX_WORD1|EX_CMDWIN|EX_LOCK_OK,
ADDR_NONE),
EXCMD(CMD_viusage, "viusage", ex_viusage,
EX_TRLBAR,

View File

@@ -304,7 +304,6 @@ static void ex_tag_cmd(exarg_T *eap, char_u *name);
# define ex_try ex_ni
# define ex_unlet ex_ni
# define ex_unlockvar ex_ni
# define ex_vim9script ex_ni
# define ex_while ex_ni
# define ex_import ex_ni
# define ex_export ex_ni
@@ -890,7 +889,8 @@ do_cmdline(
#else
0
#endif
, TRUE)) == NULL)
, in_vim9script() ? GETLINE_CONCAT_CONTBAR
: GETLINE_CONCAT_CONT)) == NULL)
{
// Don't call wait_return for aborted command line. The NULL
// returned for the end of a sourced file or executed function
@@ -1839,7 +1839,7 @@ do_one_cmd(
// message.
if (ar > ea.cmd)
{
emsg(_(e_colon_required_before_a_range));
semsg(_(e_colon_required_before_range_str), ea.cmd);
goto doend;
}
}
@@ -2025,7 +2025,7 @@ do_one_cmd(
if (p == NULL)
{
if (!ea.skip)
errormsg = _("E464: Ambiguous use of user-defined command");
errormsg = _(e_ambiguous_use_of_user_defined_command);
goto doend;
}
// Check for wrong commands.
@@ -2594,7 +2594,7 @@ do_one_cmd(
// Set flag that any command was executed, used by ex_vim9script().
if (getline_equal(ea.getline, ea.cookie, getsourceline)
&& current_sctx.sc_sid > 0)
SCRIPT_ITEM(current_sctx.sc_sid)->sn_had_command = TRUE;
SCRIPT_ITEM(current_sctx.sc_sid)->sn_state = SN_STATE_HAD_COMMAND;
/*
* If the command just executed called do_cmdline(), any throw or ":return"
@@ -2738,6 +2738,28 @@ parse_command_modifiers(
}
p = skip_range(eap->cmd, TRUE, NULL);
// In Vim9 script a variable can shadow a command modifier:
// verbose = 123
// verbose += 123
// silent! verbose = func()
// verbose.member = 2
// verbose[expr] = 2
// But not:
// verbose [a, b] = list
if (in_vim9script())
{
char_u *s, *n;
for (s = p; ASCII_ISALPHA(*s); ++s)
;
n = skipwhite(s);
if (vim_strchr((char_u *)".=", *n) != NULL
|| *s == '['
|| (*n != NUL && n[1] == '='))
break;
}
switch (*p)
{
// When adding an entry, also modify cmd_exists().
@@ -3332,6 +3354,8 @@ find_ex_command(
// When followed by "=" or "+=" then it is an assignment.
++emsg_silent;
if (*after == '.')
after = skipwhite(after + 1);
if (skip_expr(&after, NULL) == OK)
after = skipwhite(after);
else
@@ -3529,9 +3553,11 @@ find_ex_command(
eap->cmdidx = CMD_finally;
#ifdef FEAT_EVAL
if (eap->cmdidx != CMD_SIZE && in_vim9script()
&& !IS_WHITE_OR_NUL(*p) && !ends_excmd(*p) && *p != '!'
&& (cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0)
if (eap->cmdidx < CMD_SIZE
&& in_vim9script()
&& !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!'
&& (eap->cmdidx < 0 ||
(cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
{
semsg(_(e_command_not_followed_by_white_space_str), eap->cmd);
eap->cmdidx = CMD_SIZE;
@@ -3949,7 +3975,7 @@ get_address(
}
if (skip) // skip "/pat/"
{
cmd = skip_regexp(cmd, c, (int)p_magic);
cmd = skip_regexp(cmd, c, magic_isset());
if (*cmd == c)
++cmd;
}
@@ -6533,9 +6559,9 @@ ex_open(exarg_T *eap)
{
// ":open /pattern/": put cursor in column found with pattern
++eap->arg;
p = skip_regexp(eap->arg, '/', p_magic);
p = skip_regexp(eap->arg, '/', magic_isset());
*p = NUL;
regmatch.regprog = vim_regcomp(eap->arg, p_magic ? RE_MAGIC : 0);
regmatch.regprog = vim_regcomp(eap->arg, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog != NULL)
{
regmatch.rm_ic = p_ic;
@@ -7527,11 +7553,12 @@ ex_may_print(exarg_T *eap)
static void
ex_submagic(exarg_T *eap)
{
int magic_save = p_magic;
optmagic_T saved = magic_overruled;
p_magic = (eap->cmdidx == CMD_smagic);
magic_overruled = eap->cmdidx == CMD_smagic
? OPTION_MAGIC_ON : OPTION_MAGIC_OFF;
ex_substitute(eap);
p_magic = magic_save;
magic_overruled = saved;
}
/*
@@ -8009,10 +8036,9 @@ save_current_state(save_state_T *sst)
msg_scroll = FALSE; // no msg scrolling in Normal mode
restart_edit = 0; // don't go to Insert mode
p_im = FALSE; // don't use 'insertmode'
#ifdef FEAT_EVAL
sst->save_script_version = current_sctx.sc_version;
current_sctx.sc_version = 1; // not in Vim9 script
#endif
/*
* Save the current typeahead. This is required to allow using ":normal"
@@ -8036,9 +8062,7 @@ restore_current_state(save_state_T *sst)
opcount = sst->save_opcount;
reg_executing = sst->save_reg_executing;
msg_didout |= sst->save_msg_didout; // don't reset msg_didout now
#ifdef FEAT_EVAL
current_sctx.sc_version = sst->save_script_version;
#endif
// Restore the state (needed when called from a function executed for
// 'indentexpr'). Update the mouse and cursor, they may have changed.
@@ -8331,7 +8355,7 @@ ex_findpat(exarg_T *eap)
{
whole = FALSE;
++eap->arg;
p = skip_regexp(eap->arg, '/', p_magic);
p = skip_regexp(eap->arg, '/', magic_isset());
if (*p)
{
*p++ = NUL;
@@ -8533,18 +8557,19 @@ find_cmdline_var(char_u *src, int *usedlen)
/*
* Evaluate cmdline variables.
*
* change '%' to curbuf->b_ffname
* '#' to curwin->w_alt_fnum
* '<cword>' to word under the cursor
* '<cWORD>' to WORD under the cursor
* '<cexpr>' to C-expression under the cursor
* '<cfile>' to path name under the cursor
* '<sfile>' to sourced file name
* '<stack>' to call stack
* '<slnum>' to sourced file line number
* '<afile>' to file name for autocommand
* '<abuf>' to buffer number for autocommand
* '<amatch>' to matching name for autocommand
* change "%" to curbuf->b_ffname
* "#" to curwin->w_alt_fnum
* "%%" to curwin->w_alt_fnum in Vim9 script
* "<cword>" to word under the cursor
* "<cWORD>" to WORD under the cursor
* "<cexpr>" to C-expression under the cursor
* "<cfile>" to path name under the cursor
* "<sfile>" to sourced file name
* "<stack>" to call stack
* "<slnum>" to sourced file line number
* "<afile>" to file name for autocommand
* "<abuf>" to buffer number for autocommand
* "<amatch>" to matching name for autocommand
*
* When an error is detected, "errormsg" is set to a non-NULL pointer (may be
* "" for error without a message) and NULL is returned.
@@ -8625,47 +8650,60 @@ eval_vars(
*/
else
{
int off = 0;
switch (spec_idx)
{
case SPEC_PERC: // '%': current file
if (curbuf->b_fname == NULL)
case SPEC_PERC:
#ifdef FEAT_EVAL
if (!in_vim9script() || src[1] != '%')
#endif
{
result = (char_u *)"";
valid = 0; // Must have ":p:h" to be valid
// '%': current file
if (curbuf->b_fname == NULL)
{
result = (char_u *)"";
valid = 0; // Must have ":p:h" to be valid
}
else
{
result = curbuf->b_fname;
tilde_file = STRCMP(result, "~") == 0;
}
break;
}
else
{
result = curbuf->b_fname;
tilde_file = STRCMP(result, "~") == 0;
}
break;
#ifdef FEAT_EVAL
// "%%" alternate file
off = 1;
#endif
// FALLTHROUGH
case SPEC_HASH: // '#' or "#99": alternate file
if (src[1] == '#') // "##": the argument list
if (off == 0 ? src[1] == '#' : src[2] == '%')
{
// "##" or "%%%": the argument list
result = arg_all();
resultbuf = result;
*usedlen = 2;
*usedlen = off + 2;
if (escaped != NULL)
*escaped = TRUE;
skip_mod = TRUE;
break;
}
s = src + 1;
s = src + off + 1;
if (*s == '<') // "#<99" uses v:oldfiles
++s;
i = (int)getdigits(&s);
if (s == src + 2 && src[1] == '-')
if (s == src + off + 2 && src[off + 1] == '-')
// just a minus sign, don't skip over it
s--;
*usedlen = (int)(s - src); // length of what we expand
if (src[1] == '<' && i != 0)
if (src[off + 1] == '<' && i != 0)
{
if (*usedlen < 2)
if (*usedlen < off + 2)
{
// Should we give an error message for #<text?
*usedlen = 1;
*usedlen = off + 1;
return NULL;
}
#ifdef FEAT_EVAL
@@ -8683,8 +8721,8 @@ eval_vars(
}
else
{
if (i == 0 && src[1] == '<' && *usedlen > 1)
*usedlen = 1;
if (i == 0 && src[off + 1] == '<' && *usedlen > off + 1)
*usedlen = off + 1;
buf = buflist_findnr(i);
if (buf == NULL)
{

View File

@@ -606,6 +606,8 @@ discard_exception(except_T *excp, int was_finished)
{
char_u *saved_IObuff;
if (current_exception == excp)
current_exception = NULL;
if (excp == NULL)
{
internal_error("discard_exception()");
@@ -654,10 +656,7 @@ discard_exception(except_T *excp, int was_finished)
discard_current_exception(void)
{
if (current_exception != NULL)
{
discard_exception(current_exception, FALSE);
current_exception = NULL;
}
did_throw = FALSE;
need_rethrow = FALSE;
}
@@ -1696,7 +1695,7 @@ ex_catch(exarg_T *eap)
*end = NUL;
}
save_cpo = p_cpo;
p_cpo = (char_u *)"";
p_cpo = empty_option;
// Disable error messages, it will make current_exception
// invalid.
++emsg_off;
@@ -2284,8 +2283,8 @@ cleanup_conditionals(
// Cancel the pending exception. This is in the
// finally clause, so that the stack of the
// caught exceptions is not involved.
discard_exception((except_T *)
cstack->cs_exception[idx],
discard_exception(
(except_T *)cstack->cs_exception[idx],
FALSE);
}
else

View File

@@ -52,6 +52,9 @@ static void restore_cmdline(cmdline_info_T *ccp);
static int cmdline_paste(int regname, int literally, int remcr);
static void redrawcmdprompt(void);
static int ccheck_abbr(int);
#ifdef FEAT_SEARCH_EXTRA
static int empty_pattern_magic(char_u *pat, size_t len, magic_T magic_val);
#endif
#ifdef FEAT_CMDWIN
static int open_cmdwin(void);
@@ -89,15 +92,34 @@ abandon_cmdline(void)
* as a trailing \|, which can happen while typing a pattern.
*/
static int
empty_pattern(char_u *p)
empty_pattern(char_u *p, int delim)
{
size_t n = STRLEN(p);
size_t n = STRLEN(p);
magic_T magic_val = MAGIC_ON;
if (n > 0)
(void) skip_regexp_ex(p, delim, magic_isset(), NULL, NULL, &magic_val);
else
return TRUE;
return empty_pattern_magic(p, n, magic_val);
}
static int
empty_pattern_magic(char_u *p, size_t len, magic_T magic_val)
{
// remove trailing \v and the like
while (n >= 2 && p[n - 2] == '\\'
&& vim_strchr((char_u *)"mMvVcCZ", p[n - 1]) != NULL)
n -= 2;
return n == 0 || (n >= 2 && p[n - 2] == '\\' && p[n - 1] == '|');
while (len >= 2 && p[len - 2] == '\\'
&& vim_strchr((char_u *)"mMvVcCZ", p[len - 1]) != NULL)
len -= 2;
// true, if the pattern is empty, or the pattern ends with \| and magic is
// set (or it ends with '|' and very magic is set)
return len == 0 || (len > 1
&& ((p[len - 2] == '\\'
&& p[len - 1] == '|' && magic_val == MAGIC_ON)
|| (p[len - 2] != '\\'
&& p[len - 1] == '|' && magic_val == MAGIC_ALL)));
}
// Struct to store the viewstate during 'incsearch' highlighting.
@@ -149,7 +171,7 @@ typedef struct {
pos_T match_end;
int did_incsearch;
int incsearch_postponed;
int magic_save;
optmagic_T magic_overruled_save;
} incsearch_state_T;
static void
@@ -159,7 +181,7 @@ init_incsearch_state(incsearch_state_T *is_state)
is_state->match_start = curwin->w_cursor;
is_state->did_incsearch = FALSE;
is_state->incsearch_postponed = FALSE;
is_state->magic_save = p_magic;
is_state->magic_overruled_save = magic_overruled;
CLEAR_POS(&is_state->match_end);
is_state->save_cursor = curwin->w_cursor; // may be restored later
is_state->search_start = curwin->w_cursor;
@@ -207,6 +229,7 @@ do_incsearch_highlighting(
pos_T save_cursor;
int use_last_pat;
int retval = FALSE;
magic_T magic = 0;
*skiplen = 0;
*patlen = ccline.cmdlen;
@@ -252,9 +275,9 @@ do_incsearch_highlighting(
|| STRNCMP(cmd, "vglobal", p - cmd) == 0)
{
if (*cmd == 's' && cmd[1] == 'm')
p_magic = TRUE;
magic_overruled = OPTION_MAGIC_ON;
else if (*cmd == 's' && cmd[1] == 'n')
p_magic = FALSE;
magic_overruled = OPTION_MAGIC_OFF;
}
else if (STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0)
{
@@ -288,7 +311,7 @@ do_incsearch_highlighting(
p = skipwhite(p);
delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
*search_delim = delim;
end = skip_regexp(p, delim, p_magic);
end = skip_regexp_ex(p, delim, magic_isset(), NULL, NULL, &magic);
use_last_pat = end == p && *end == delim;
@@ -302,7 +325,7 @@ do_incsearch_highlighting(
int empty;
*end = NUL;
empty = empty_pattern(p);
empty = empty_pattern_magic(p, STRLEN(p), magic);
*end = c;
if (empty)
goto theend;
@@ -372,7 +395,7 @@ finish_incsearch_highlighting(
search_first_line = 0;
search_last_line = MAXLNUM;
p_magic = is_state->magic_save;
magic_overruled = is_state->magic_overruled_save;
validate_cursor(); // needed for TAB
redraw_all_later(SOME_VALID);
@@ -535,7 +558,8 @@ may_do_incsearch_highlighting(
{
next_char = ccline.cmdbuff[skiplen + patlen];
ccline.cmdbuff[skiplen + patlen] = NUL;
if (empty_pattern(ccline.cmdbuff) && !no_hlsearch)
if (empty_pattern(ccline.cmdbuff + skiplen, search_delim)
&& !no_hlsearch)
{
redraw_all_later(SOME_VALID);
set_no_hlsearch(TRUE);
@@ -713,7 +737,7 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff + skiplen))
*c = MB_TOLOWER(*c);
if (*c == search_delim || vim_strchr((char_u *)(
p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL)
magic_isset() ? "\\~^$.*[" : "\\^$"), *c) != NULL)
{
// put a backslash before special characters
stuffcharReadbuff(*c);

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