Compare commits

...

76 Commits

Author SHA1 Message Date
Bram Moolenaar
df36514a64 patch 8.2.2829: some comments are not correct or clear
Problem:    Some comments are not correct or clear.
Solution:   Adjust the comments.  Add test for cursor position.
2021-05-03 20:01:45 +02:00
Bram Moolenaar
97a6c6a1fb patch 8.2.2828: Coverity complains about not checking rename() return value
Problem:    Coverity complains about not checking the rename() return value.
Solution:   Add "(void)", can't do anything in case of a failure.
2021-05-03 19:49:51 +02:00
Dominique Pelle
5f8ed7408a patch 8.2.2827: test file was not deleted
Problem:    Test file was not deleted.
Solution:   Uncomment the delete() call. (Dominique Pellé, closes #8172)
2021-05-03 19:08:37 +02:00
Bram Moolenaar
551c1aed65 patch 8.2.2826: compiler warnings for int to size_t conversion
Problem:    Compiler warnings for int to size_t conversion. (Randall W.
            Morris)
Solution:   Add type casts.
2021-05-03 18:57:05 +02:00
Dominique Pelle
2bf6034e5c patch 8.2.2825: code in checkreadonly() not fully tested
Problem:    Code in checkreadonly() not fully tested.
Solution:   Add more tests. (Dominique Pellé, closes #8169)
2021-05-02 20:16:24 +02:00
Bram Moolenaar
1bb0da25a6 patch 8.2.2824: MS-Windows: build failure with MSVC
Problem:    MS-Windows: build failure with MSVC.
Solution:   Adjust the list of distributed files.  Add hint about python.
            Adjust path for reading runtime files.
2021-05-02 19:15:05 +02:00
Bram Moolenaar
4c295027a4 Update runtime files 2021-05-02 17:19:11 +02:00
Bram Moolenaar
5f628a12e5 patch 8.2.2823: MS-Windows: launching Vim from installer doesn't open README
Problem:    MS-Windows: launching Vim from installer doesn't open README.
Solution:   Adjust the quotes.
2021-05-02 13:59:46 +02:00
Bram Moolenaar
4a22897591 patch 8.2.2822: MS-Windows: unnessarily loading libraries when unregistering
Problem:    MS-Windows: unnessarily loading libraries when unregistering OLE.
Solution:   Also skip loading libraries when invoked with "-unregister".  Run
            Vim for README.txt with user privileges.
2021-05-01 22:41:39 +02:00
Bram Moolenaar
3d0e7a956a patch 8.2.2821: MS-Windows: unnessarily loading libraries when registering OLE
Problem:    MS-Windows: unnessarily loading libraries when registering OLE.
Solution:   Skip loading libraries when invoked with "-register".
2021-05-01 17:46:03 +02:00
Bram Moolenaar
b6c2e9a010 patch 8.2.2820: session file may divide by zero
Problem:    Session file may divide by zero.
Solution:   Avoid writing difide by zero. (closes #8162)
2021-04-30 21:37:51 +02:00
Bram Moolenaar
4934ed34c3 patch 8.2.2819: finishing an abbreviation with multi-byte char may not work
Problem:    Finishing an abbreviation with a multi-byte char may not work.
Solution:   Escape K_SPECIAL in the typed character. (closes #8160)
2021-04-30 19:43:11 +02:00
Bram Moolenaar
aeed2a6359 patch 8.2.2818: no jump added when opening terminal in current window
Problem:    No jump added to jumplist when opening terminal in current window.
Solution:   Call setpcmark(). (closes #8158)
2021-04-29 20:18:45 +02:00
Bram Moolenaar
227c58a486 patch 8.2.2817: Vim9: script sourcing continues after an error
Problem:    Vim9: script sourcing continues after an error.
Solution:   Make an error in any command in "vim9script" abort sourcing.
2021-04-28 20:40:44 +02:00
Bram Moolenaar
03717bf6a2 patch 8.2.2816: Vim9: comment below expression in lambda causes problems
Problem:    Vim9: comment below expression in lambda causes problems.
Solution:   Use a single space for empty and comment lines. (closes #8156)
2021-04-28 20:00:40 +02:00
Bram Moolenaar
b80d2fb0e7 patch 8.2.2815: status line flickers when redrawing popup menu info
Problem:    Status line flickers when redrawing popup menu info.
Solution:   Do not redraw the status line when the focus is in the popup
            window. (issue #8144)
2021-04-27 20:06:57 +02:00
Bram Moolenaar
b06b50dfa0 patch 8.2.2814: Vim9: unused variable
Problem:    Vim9: unused variable. (John Marriott)
Solution:   Adjust #ifdef.
2021-04-26 21:39:25 +02:00
Yegappan Lakshmanan
bb01a1ef3a patch 8.2.2813: cannot grep using fuzzy matching
Problem:    Cannot grep using fuzzy matching.
Solution:   Add the "f" flag to :vimgrep. (Yegappan Lakshmanan, closes #8152)
2021-04-26 21:17:52 +02:00
Bram Moolenaar
5930ddcd25 patch 8.2.2812: Vim9: still crash when using substitute expression
Problem:    Vim9: still crash when using substitute expression.
Solution:   Put the instruction list in the stack frame. (closes #8154)
2021-04-26 20:32:59 +02:00
Bram Moolenaar
b98cec28d9 patch 8.2.2811: Vim9: error for missing white space doesn't say where
Problem:    Vim9: error for missing white space doesn't say where it is
            missing
Solution:   Mention the command. (closes #8149)
2021-04-25 16:35:55 +02:00
Bram Moolenaar
d386e923c7 patch 8.2.2810: Vim9: crash when calling a function in a substitute expression
Problem:    Vim9: crash when calling a function in a substitute expression.
Solution:   Set the instructions back to the substitute expression
            instrunctions. (closes #8148)
2021-04-25 14:48:49 +02:00
Bram Moolenaar
dc4c2309f2 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Problem:    Vim9: :def function compilation fails when using :legacy.
Solution:   Reset CMOD_LEGACY when compiling a function. (closes #8137)
2021-04-25 13:54:42 +02:00
Bram Moolenaar
730bf30020 patch 8.2.2808: Vim9: increment and decrement not sufficiently tested
Problem:    Vim9: increment and decrement not sufficiently tested.
Solution:   Add assertions.
2021-04-24 20:43:56 +02:00
Bram Moolenaar
340c59ec6f patch 8.2.2807: build fails with tiny features
Problem:    Build fails with tiny features.
Solution:   Use a dummy function for ex_incdec().
2021-04-24 20:37:03 +02:00
Bram Moolenaar
bdc0f1c698 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Problem:    Vim9: using "++nr" as a command might not work.
Solution:   Do not recognize "++" and "--" in a following line as addition or
            subtraction.
2021-04-24 19:08:24 +02:00
Bram Moolenaar
96cf4ba8fb patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Problem:    Vim9: cannot use legacy syntax in Vim9 script.
Solution:   Add the :legacy command.
2021-04-24 14:15:41 +02:00
Bram Moolenaar
7ba1e4d363 patch 8.2.2804: setting buffer local mapping with mapset() changes global
Problem:    Setting buffer local mapping with mapset() changes global mapping.
Solution:   Only set the local mapping. (closes #8143)
2021-04-24 13:12:38 +02:00
Bram Moolenaar
e0c03c8e10 patch 8.2.2803: flicker when the popup menu has an info popup
Problem:    Flicker when the popup menu has an info popup.
Solution:   Avoid drawing over the popup when it's going to be redrawn in the
            same position. (closes #8131)  Also avoid redrawing the scrollbar.
2021-04-23 21:01:34 +02:00
Bram Moolenaar
a6aa16423f patch 8.2.2802: Vim9: illegal memory access
Problem:    Vim9: illegal memory access.
Solution:   Check for comment before checking for white space. (closes #8142)
2021-04-23 19:32:23 +02:00
Bram Moolenaar
f6d9935a13 patch 8.2.2801: free Pascal makefile not recognized
Problem:    Free Pascal makefile not recognized.
Solution:   Add the fpcmake filetype. (Doug Kearns)
2021-04-23 18:06:48 +02:00
Bram Moolenaar
9f28416e54 patch 8.2.2800: after a timer displays text a hit-enter prompt is given
Problem:    After a timer displays text a hit-enter prompt is given.
Solution:   Reset msg_didany and need_wait_return. (closes #8136)
2021-04-22 21:39:30 +02:00
Bram Moolenaar
11e3c5ba82 Update runtime files 2021-04-21 18:09:37 +02:00
Bram Moolenaar
459fbdbf92 patch 8.2.2799: Vim9: type casts don't fully work at the script level
Problem:    Vim9: type casts don't fully work at the script level.
Solution:   Implement the missing piece.
2021-04-21 17:57:26 +02:00
Bram Moolenaar
a369c3d9c1 patch 8.2.2798: Vim9: redir to variable with append does not accept an index
Problem:    Vim9: redir to variable with append does not accept an index.
Solution:   Make the appending work.
2021-04-21 16:00:10 +02:00
Bram Moolenaar
2d5f385cee patch 8.2.2797: Search highlight disappears in the Visual area
Problem:    Search highlight disappears in the Visual area.
Solution:   Combine the search attributes. (closes #8134)
2021-04-21 15:11:42 +02:00
Bram Moolenaar
753bcf8c7d patch 8.2.2796: Vim9: redir to variable does not accept an index
Problem:    Vim9: redir to variable does not accept an index.
Solution:   Make the index work.
2021-04-21 14:24:24 +02:00
Bram Moolenaar
169502fb0b patch 8.2.2795: Coverity warns for not using return value
Problem:    Coverity warns for not using return value.
Solution:   Check the return value of compiling the substitute expression.
2021-04-21 12:19:35 +02:00
Bram Moolenaar
16678eb50f patch 8.2.2794: Linux users don't know how to get ncurses
Problem:    Linux users don't know how to get ncurses.
Solution:   Add the name of the package. (closes #8132)
2021-04-21 11:57:59 +02:00
Bram Moolenaar
d23f8bde5c patch 8.2.2793: MS-Windows: string literals are writable with MSVC
Problem:    MS-Windows: string literals are writable with MSVC.
Solution:   Add the /GF compiler flag.  Make mch_write() safer. (Ken Takata,
            closes #8133)
2021-04-21 11:30:48 +02:00
Bram Moolenaar
9ce47ec0b6 patch 8.2.2792: Vim9: :disas shows instructions for default args but no text
Problem:    Vim9: :disas shows instructions for default args but no text.
Solution:   Show the expression test above the default argument instructions.
            (closes #8129)
2021-04-20 22:16:39 +02:00
Bram Moolenaar
5c787fb792 patch 8.2.2791: Vim9: memory leak when using \=expr in :substitute
Problem:    Vim9: memory leak when using \=expr in :substitute.
Solution:   Do not allocate a new instruction list.
2021-04-20 21:49:35 +02:00
Bram Moolenaar
63276685f9 patch 8.2.2790: filetype test fails
Problem:    filetype test fails
Solution:   Also update the scripts detection
2021-04-20 21:14:09 +02:00
Bram Moolenaar
8238f08838 patch 8.2.2789: Vim9: using \=expr in :substitute does not handle jumps
Problem:    Vim9: using \=expr in :substitute does not handle jumps.
Solution:   Start with instruction count zero. (closes #8128)
2021-04-20 21:10:48 +02:00
Bram Moolenaar
3f88e71fa2 patch 8.2.2788: Raku is now the only name what once was called perl6
Problem:    Raku is now the only name what once was called perl6.
Solution:   Adjust the filetype detection. (closes #8120)
2021-04-20 20:21:23 +02:00
Bram Moolenaar
6d4c1c7ba8 patch 8.2.2787: MS-Windows: crash when using :echoconsole
Problem:    MS-Windows: crash when using :echoconsole.
Solution:   Do not write a NUL when it's already there.
2021-04-20 10:33:28 +02:00
Bram Moolenaar
4f2df37a0d patch 8.2.2786: Vim9: memory leak when using :s with expression
Problem:    Vim9: memory leak when using :s with expression.
Solution:   Clean up the instruction list.
2021-04-19 21:06:31 +02:00
Bram Moolenaar
2d1c57ed3d patch 8.2.2785: Vim9: cannot redirect to local variable
Problem:    Vim9: cannot redirect to local variable.
Solution:   Compile :redir when redirecting to a variable.
2021-04-19 20:50:03 +02:00
Bram Moolenaar
4c13721482 patch 8.2.2784: Vim9: cannot use \=expr in :substitute
Problem:    Vim9: cannot use \=expr in :substitute.
Solution:   Compile the expression into instructions and execute them when
            invoked.
2021-04-19 16:48:48 +02:00
Bram Moolenaar
e8209b91b9 patch 8.2.2783: duplicate code for setting byte in blob, blob test may fail
Problem:    Duplicate code for setting byte in blob, blob test may fail.
Solution:   Call blob_set_append().  Test sort failure with "N".
2021-04-18 16:08:52 +02:00
Bram Moolenaar
39211cba72 patch 8.2.2782: Vim9: blob operations not fully tested
Problem:    Vim9: blob operations not fully tested.
Solution:   Make more blob tests run in Vim9 script.  Fix filter().  Make
            insert() give an error for a null blob, like add().
2021-04-18 15:48:04 +02:00
Bram Moolenaar
b7c21afef1 patch 8.2.2781: add() silently skips when adding to null list or blob
Problem:    Add() silently skips when adding to null list or blob.
Solution:   Give an error in Vim9 script.  Allocate blob when it is NULL like
            with list and dict.
2021-04-18 14:12:31 +02:00
Bram Moolenaar
d551d6c268 patch 8.2.2780: Vim9: for loop over blob doesn't work
Problem:    Vim9: for loop over blob doesn't work.
Solution:   Make it work.
2021-04-18 13:15:58 +02:00
Bram Moolenaar
f7e92aae15 patch 8.2.2779: memory access error in remove() for blob
Problem:    Memory access error in remove() for blob.
Solution:   Adjust length for memmove().
2021-04-17 21:22:49 +02:00
Bram Moolenaar
d23b714d8b patch 8.2.2778: problem restoring 'packpath' in session
Problem:    Problem restoring 'packpath' in session.
Solution:   Let "skiprtp" also apply to 'packpath'.
2021-04-17 21:04:34 +02:00
Bram Moolenaar
51e933261b patch 8.2.2777: Vim9: blob operations not tested in all ways
Problem:    Vim9: blob operations not tested in all ways.
Solution:   Run tests with CheckLegacyAndVim9Success().  Make blob assign with
            index work.
2021-04-17 20:44:56 +02:00
Bram Moolenaar
0995c81f2f patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Problem:    :mksession uses current value of 'splitbelow' and 'splitright'
            even though "options" is not in 'sessionoptions'. (Maxim Kim)
Solution:   Save and restore the values, instead of setting to the current
            value. (closes #8119)
2021-04-17 18:38:54 +02:00
Bram Moolenaar
c70fe460b0 patch 8.2.2775: Vim9: wrong line number used for some commands
Problem:    Vim9: wrong line number used for some commands.
Solution:   For :exe, :echo and the like use the line number of the start of
            the command.  When calling a function set the line number in the
            script context.
2021-04-17 17:59:19 +02:00
Bram Moolenaar
6c7cc347af patch 8.2.2774: Vim9: cannot import an existing name even when using "as"
Problem:    Vim9: cannot import an existing name even when using "as".
Solution:   Do not check for an existing name when using "as". (closes #8113)
2021-04-17 16:38:50 +02:00
Bram Moolenaar
56994d2158 Update runtime files. 2021-04-17 16:31:09 +02:00
Bram Moolenaar
112a006417 patch 8.2.2773: PSL filetype not recognized
Problem:    PSL filetype not recognized.
Solution:   Add a filetype pattern. (Daniel Kho, closes #8117)
2021-04-17 14:06:39 +02:00
Bram Moolenaar
635bd60804 patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Problem:    Problems when restoring 'runtimepath' from a session file.
Solution:   Add the "skiprtp" item in 'sessionoptions'.
2021-04-16 19:58:22 +02:00
Bram Moolenaar
aa1959bd5e patch 8.2.2771: Vim9: assignment not recognized if declaration was skipped
Problem:    Vim9: assignment not recognized if declaration was skipped.
Solution:   Also recognized an assignment if the variable does not exist.
            (closes #8108)
2021-04-15 22:13:39 +02:00
Bram Moolenaar
fe090eb58f patch 8.2.2770: Vim9: type of loop variable is not used
Problem:    Vim9: type of loop variable is not used.
Solution:   Parse and check the variable type. (closes #8107)
2021-04-15 21:48:32 +02:00
Bram Moolenaar
6bc00699c5 patch 8.2.2769: Modula-3 config files are not recognized
Problem:    Modula-3 config files are not recognized.
Solution:   Add filetype patterns. (Doug Kearns)
2021-04-15 14:29:17 +02:00
Bram Moolenaar
f387f5dfbc patch 8.2.2768: Vim9: memory leak with blob range error
Problem:    Vim9: memory leak with blob range error.
Solution:   Jump to end instead of returning.
2021-04-15 13:42:21 +02:00
Bram Moolenaar
bd6406f15d patch 8.2.2767: compiler warning for unused argument
Problem:    Compiler warning for unused argument.
Solution:   Remove the argument.
2021-04-14 21:30:06 +02:00
Bram Moolenaar
b141926890 patch 8.2.2766: test failure
Problem:    Test failure.
Solution:   Add change to Vim9 compilation error message.
2021-04-14 20:54:07 +02:00
Bram Moolenaar
0e3ff19196 patch 8.2.2765: Vim9: not all blob operations work
Problem:    Vim9: not all blob operations work.
Solution:   Run more tests also with Vim9 script and :def functions.  Fix what
            doesn't work.
2021-04-14 20:35:23 +02:00
Bram Moolenaar
b47bed2f7a patch 8.2.2764: memory leak when default function argument is allocated
Problem:    Memory leak when default function argument is allocated.
Solution:   Free the expression result.
2021-04-14 17:06:43 +02:00
Bram Moolenaar
a3589a0d6c patch 8.2.2763: Vim9: cannot use type in for loop unpack at script level
Problem:    Vim9: cannot use type in for loop unpack at script level.
Solution:   Advance over the type name.
2021-04-14 13:30:46 +02:00
Bram Moolenaar
f62d73933a patch 8.2.2762: Vim9: function line truncated when compiling
Problem:    Vim9: function line truncated when compiling.
Solution:   Copy the line before processing it. (closes #8101)
2021-04-14 12:40:00 +02:00
Bram Moolenaar
2e240bd428 patch 8.2.2761: using "syn include" does not work properly
Problem:    Using "syn include" does not work properly.
Solution:   Don't add current_syn_inc_tag to topgrp. (Jaehwang Jerry Jung,
            closes #8104)
2021-04-14 11:15:08 +02:00
Bram Moolenaar
f6a8d420a8 patch 8.2.2760: Vim9: no error for changing a for loop variable
Problem:    Vim9: no error for changing a for loop variable.
Solution:   Make the loop variable read-only. (issue #8102)
2021-04-13 21:48:03 +02:00
Bram Moolenaar
f2253963c2 patch 8.2.2759: Vim9: for loop infers type of loop variable
Problem:    Vim9: for loop infers type of loop variable.
Solution:   Do not get the member type. (closes #8102)
2021-04-13 20:53:13 +02:00
Bram Moolenaar
f48b2fa33c patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Problem:    Vim9: wrong line number for autoload function with wrong name.
Solution:   Set and restore SOURCING_LNUM. (closes #8100)
2021-04-12 22:02:36 +02:00
Bram Moolenaar
68452177ca patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Problem:    Vim9: blob tests for legacy and Vim9 script are separate.
Solution:   Add CheckLegacyAndVim9Success().  Make blob index assign work.
2021-04-12 21:21:02 +02:00
142 changed files with 8038 additions and 4773 deletions

11
.github/CODEOWNERS vendored
View File

@@ -22,6 +22,7 @@ runtime/autoload/vimball.vim @cecamp
runtime/autoload/xmlformat.vim @chrisbra
runtime/autoload/zip.vim @cecamp
runtime/compiler/checkstyle.vim @dkearns
runtime/compiler/cm3.vim @dkearns
runtime/compiler/cucumber.vim @tpope
runtime/compiler/dart.vim @dkearns
runtime/compiler/dart2js.vim @dkearns
@@ -77,6 +78,7 @@ runtime/ftplugin/css.vim @dkearns
runtime/ftplugin/cucumber.vim @tpope
runtime/ftplugin/eiffel.vim @dkearns
runtime/ftplugin/eruby.vim @tpope @dkearns
runtime/ftplugin/fpcmake.vim @dkearns
runtime/ftplugin/freebasic.vim @dkearns
runtime/ftplugin/git.vim @tpope
runtime/ftplugin/gitcommit.vim @tpope
@@ -90,10 +92,14 @@ runtime/ftplugin/javascript.vim @dkearns
runtime/ftplugin/javascriptreact.vim @dkearns
runtime/ftplugin/kconfig.vim @chrisbra
runtime/ftplugin/liquid.vim @tpope
runtime/ftplugin/m3build.vim @dkearns
runtime/ftplugin/m3quake.vim @dkearns
runtime/ftplugin/markdown.vim @tpope
runtime/ftplugin/matlab.vim @cecamp
runtime/ftplugin/modula3.vim @dkearns
runtime/ftplugin/nroff.vim @a-vrma
runtime/ftplugin/nsis.vim @k-takata
runtime/ftplugin/pascal.vim @dkearns
runtime/ftplugin/pdf.vim @tpope
runtime/ftplugin/ps1.vim @heaths
runtime/ftplugin/ps1xml.vim @heaths
@@ -153,6 +159,7 @@ runtime/syntax/dtd.vim @chrisbra
runtime/syntax/elmfilt.vim @cecamp
runtime/syntax/eruby.vim @tpope @dkearns
runtime/syntax/exports.vim @cecamp
runtime/syntax/fpcmake.vim @dkearns
runtime/syntax/git.vim @tpope
runtime/syntax/gitcommit.vim @tpope
runtime/syntax/gitconfig.vim @tpope
@@ -167,13 +174,17 @@ runtime/syntax/lex.vim @cecamp
runtime/syntax/liquid.vim @tpope
runtime/syntax/lisp.vim @cecamp
runtime/syntax/lynx.vim @dkearns
runtime/syntax/m3build.vim @dkearns
runtime/syntax/m3quake.vim @dkearns
runtime/syntax/mailcap.vim @dkearns
runtime/syntax/make.vim @rohieb
runtime/syntax/maple.vim @cecamp
runtime/syntax/markdown.vim @tpope
runtime/syntax/modula3.vim @dkearns
runtime/syntax/netrw.vim @cecamp
runtime/syntax/nroff.vim @jmarshall
runtime/syntax/nsis.vim @k-takata
runtime/syntax/pascal.vim @dkearns
runtime/syntax/pdf.vim @tpope
runtime/syntax/php.vim @TysonAndre
runtime/syntax/privoxy.vim @dkearns

View File

@@ -437,7 +437,6 @@ SRC_UNIX = \
src/gui_gtk_x11.c \
src/gui_gtk_res.xml \
src/gui_motif.c \
src/gui_xim.c \
src/gui_xmdlg.c \
src/gui_xmebw.c \
src/gui_xmebw.h \
@@ -461,7 +460,6 @@ SRC_UNIX = \
src/proto/gui_gtk_x11.pro \
src/proto/gui_gtk_gresources.pro \
src/proto/gui_motif.pro \
src/proto/gui_xim.pro \
src/proto/gui_xmdlg.pro \
src/proto/gui_x11.pro \
src/proto/if_xcmdsrv.pro \
@@ -481,6 +479,7 @@ SRC_UNIX = \
# source files for both DOS and Unix
SRC_DOS_UNIX = \
src/gui_xim.c \
src/if_cscope.c \
src/if_cscope.h \
src/if_lua.c \
@@ -493,6 +492,7 @@ SRC_DOS_UNIX = \
src/if_py_both.h \
src/if_ruby.c \
src/if_tcl.c \
src/proto/gui_xim.pro \
src/proto/if_cscope.pro \
src/proto/if_lua.pro \
src/proto/if_mzsch.pro \

View File

@@ -7,12 +7,14 @@
## What is Vim? ##
Vim is a greatly improved version of the good old UNIX editor Vi. Many new
Vim is a greatly improved version of the good old UNIX editor
[Vi](https://en.wikipedia.org/wiki/Vi). Many new
features have been added: multi-level undo, syntax highlighting, command line
history, on-line help, spell checking, filename completion, block operations,
script language, etc. There is also a Graphical User Interface (GUI)
available. Still, Vi compatibility is maintained, those who have Vi "in the
fingers" will feel at home. See `runtime/doc/vi_diff.txt` for differences with
fingers" will feel at home.
See [`runtime/doc/vi_diff.txt`](runtime/doc/vi_diff.txt) for differences with
Vi.
This editor is very useful for editing programs and other plain text files.
@@ -42,7 +44,7 @@ want or must compile it yourself. Check http://www.vim.org/download.php for
an overview of currently available distributions.
Some popular places to get the latest Vim:
* Check out the git repository from [github](https://github.com/vim/vim).
* Check out the git repository from [GitHub](https://github.com/vim/vim).
* Get the source code as an [archive](https://github.com/vim/vim/releases).
* Get a Windows executable from the
[vim-win32-installer](https://github.com/vim/vim-win32-installer/releases) repository.
@@ -53,14 +55,14 @@ Some popular places to get the latest Vim:
If you obtained a binary distribution you don't need to compile Vim. If you
obtained a source distribution, all the stuff for compiling Vim is in the
`src` directory. See `src/INSTALL` for instructions.
[`src`](/src) directory. See [`src/INSTALL`](src/INSTALL) for instructions.
## Installation ##
See one of these files for system-specific instructions. Either in the
READMEdir directory (in the repository) or the top directory (if you unpack an
archive):
[READMEdir directory](./READMEdir/) (in the repository) or
the top directory (if you unpack an archive):
README_ami.txt Amiga
README_unix.txt Unix
@@ -78,8 +80,9 @@ The Vim tutor is a one hour training course for beginners. Often it can be
started as `vimtutor`. See `:help tutor` for more information.
The best is to use `:help` in Vim. If you don't have an executable yet, read
`runtime/doc/help.txt`. It contains pointers to the other documentation
files. The User Manual reads like a book and is recommended to learn to use
[`runtime/doc/help.txt`](/runtime/doc/help.txt).
It contains pointers to the other documentation files.
The User Manual reads like a book and is recommended to learn to use
Vim. See `:help user-manual`.
@@ -87,7 +90,8 @@ Vim. See `:help user-manual`.
Vim is Charityware. You can use and copy it as much as you like, but you are
encouraged to make a donation to help orphans in Uganda. Please read the file
`runtime/doc/uganda.txt` for details (do `:help uganda` inside Vim).
[`runtime/doc/uganda.txt`](runtime/doc/uganda.txt)
for details (do `:help uganda` inside Vim).
Summary of the license: There are no restrictions on using or distributing an
unmodified copy of Vim. Parts of Vim may also be distributed, but the license
@@ -103,8 +107,8 @@ your appreciation for the work and motivate Bram and others to continue
working on Vim please send a donation.
Since Bram is back to a paid job the money will now be used to help children
in Uganda. See `runtime/doc/uganda.txt`. But at the same time donations
increase Bram's motivation to keep working on Vim!
in Uganda. See [`runtime/doc/uganda.txt`](runtime/doc/uganda.txt). But
at the same time donations increase Bram's motivation to keep working on Vim!
For the most recent information about sponsoring look on the Vim web site:
http://www.vim.org/sponsor/
@@ -112,7 +116,8 @@ For the most recent information about sponsoring look on the Vim web site:
## Contributing ##
If you would like to help making Vim better, see the [CONTRIBUTING.md](https://github.com/vim/vim/blob/master/CONTRIBUTING.md) file.
If you would like to help making Vim better, see the
[CONTRIBUTING.md](/CONTRIBUTING.md) file.
## Information ##

View File

@@ -1,28 +1,12 @@
README_mac.txt for version 8.2 of Vim: Vi IMproved.
This file explains the installation of Vim on Macintosh systems.
This file explains the installation of Vim on MacOS systems.
See "README.txt" for general information about Vim.
To build from source get the files with git from https://github.com/vim/vim.
The find the instructions in src/INSTALLmac.txt.
To build from sources, like on Unix
1. Get the build tools: "clang" and "make". These can be installed with the
"CommandLineTools" package. If you don't have one, do
xcode-select --install
Just like for any software development with OS X.
2. Get the source code. Best is to use git (which you need to install first),
see http://www.vim.org/git.php
Or you can download and unpack the Unix tar archive, see
http://www.vim.org/download.php
3. Go to the top directory of the source tree, do
make
sudo make install
A newly built vim will be installed under "/usr/local".
If you can't manage to make this work, there is a fallback using Homebrew:
Installing Vim using Homebrew:
1. Install Homebrew from http://brew.sh/
2. Install latest Vim with: brew install vim
2. Install the latest Vim with:
brew install vim

View File

@@ -66,6 +66,9 @@ To build the installable .exe:
Install NSIS if you didn't do that already.
Also install UPX, if you want a compressed file.
Download and include the ShellExecAsUser.dll Unicode version which can be
sourced from: https://nsis.sourceforge.io/ShellExecAsUser_plug-in
Unpack the images:
cd nsis

View File

@@ -119,9 +119,9 @@ RequestExecutionLevel highest
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_FINISHPAGE_RUN "$0\gvim.exe"
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication
!define MUI_FINISHPAGE_RUN_TEXT $(str_show_readme)
!define MUI_FINISHPAGE_RUN_PARAMETERS "-R $\"$0\README.txt$\""
# This adds '\Vim' to the user choice automagically. The actual value is
# obtained below with CheckOldVim.
@@ -300,6 +300,11 @@ Function CheckOldVim
Exch $0 # put $0 on top of stack, restore $0 to original value
FunctionEnd
Function LaunchApplication
SetOutPath $0
ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" '-R "$0\README.txt"'
FunctionEnd
##########################################################
Section "$(str_section_old_ver)" id_section_old_ver
SectionIn 1 2 3 RO

View File

@@ -24,7 +24,7 @@ LangString ^UninstallCaption ${LANG_ENGLISH} \
# "Destination Folder (Must end with $\"vim$\")"
LangString str_show_readme ${LANG_ENGLISH} \
"Show README after installation finish"
"Show README after installation finished"
# Install types:
LangString str_type_typical ${LANG_ENGLISH} \

View File

@@ -1,12 +1,16 @@
" Vim completion script
" Language: All languages, uses existing syntax highlighting rules
" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
" Version: 14.0
" Last Change: 2020 Dec 30
" Version: 15.0
" Last Change: 2021 Apr 27
" Usage: For detailed help, ":help ft-syntax-omni"
" History
"
" Version 15.0
" - SyntaxComplete ignored all buffer specific overrides, always used global
" https://github.com/vim/vim/issues/8153
"
" Version 14.0
" - Fixed issue with single quotes and is_keyword
" https://github.com/vim/vim/issues/7463
@@ -42,7 +46,7 @@
" let g:omni_syntax_use_single_byte = 1
" - This by default will only allow single byte ASCII
" characters to be added and an additional check to ensure
" the charater is printable (see documentation for isprint).
" the character is printable (see documentation for isprint).
"
" Version 9.0
" - Add the check for cpo.
@@ -90,7 +94,7 @@ endif
if exists('g:loaded_syntax_completion')
finish
endif
let g:loaded_syntax_completion = 130
let g:loaded_syntax_completion = 150
" Turn on support for line continuations when creating the script
let s:cpo_save = &cpo
@@ -145,14 +149,10 @@ let s:prepended = ''
" This function is used for the 'omnifunc' option.
function! syntaxcomplete#Complete(findstart, base)
" Only display items in the completion window that are at least
" this many characters in length
if !exists('b:omni_syntax_ignorecase')
if exists('g:omni_syntax_ignorecase')
let b:omni_syntax_ignorecase = g:omni_syntax_ignorecase
else
let b:omni_syntax_ignorecase = &ignorecase
endif
" Allow user to override ignorecase per buffer
let l:omni_syntax_ignorecase = g:omni_syntax_ignorecase
if exists('b:omni_syntax_ignorecase')
let l:omni_syntax_ignorecase = b:omni_syntax_ignorecase
endif
if a:findstart
@@ -183,7 +183,6 @@ function! syntaxcomplete#Complete(findstart, base)
endif
" let base = s:prepended . a:base
" let base = s:prepended
let base = substitute(s:prepended, "'", "''", 'g')
let filetype = substitute(&filetype, '\.', '_', 'g')
@@ -200,13 +199,13 @@ function! syntaxcomplete#Complete(findstart, base)
if base != ''
" let compstr = join(compl_list, ' ')
" let expr = (b:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
" let expr = (l:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
" let compstr = substitute(compstr, expr, '', 'g')
" let compl_list = split(compstr, '\s\+')
" Filter the list based on the first few characters the user
" entered
let expr = 'v:val '.(g:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'"
let expr = 'v:val '.(l:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'"
let compl_list = filter(deepcopy(compl_list), expr)
endif
@@ -227,6 +226,26 @@ function! syntaxcomplete#OmniSyntaxList(...)
endif
endfunc
function! syntaxcomplete#OmniSyntaxClearCache()
let s:cache_name = []
let s:cache_list = []
endfunction
" To retrieve all syntax items regardless of syntax group:
" echo OmniSyntaxList( [] )
"
" To retrieve only the syntax items for the sqlOperator syntax group:
" echo OmniSyntaxList( ['sqlOperator'] )
"
" To retrieve all syntax items for both the sqlOperator and sqlType groups:
" echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
"
" A regular expression can also be used:
" echo OmniSyntaxList( ['sql\w\+'] )
"
" From within a plugin, you would typically assign the output to a List: >
" let myKeywords = []
" let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
function! OmniSyntaxList(...)
let list_parms = []
if a:0 > 0
@@ -244,37 +263,25 @@ function! OmniSyntaxList(...)
" let use_dictionary = a:1
" endif
" Only display items in the completion window that are at least
" this many characters in length
if !exists('b:omni_syntax_use_iskeyword')
if exists('g:omni_syntax_use_iskeyword')
let b:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword
else
let b:omni_syntax_use_iskeyword = 1
endif
endif
" Only display items in the completion window that are at least
" this many characters in length
if !exists('b:omni_syntax_minimum_length')
if exists('g:omni_syntax_minimum_length')
let b:omni_syntax_minimum_length = g:omni_syntax_minimum_length
else
let b:omni_syntax_minimum_length = 0
endif
endif
let saveL = @l
let filetype = substitute(&filetype, '\.', '_', 'g')
if empty(list_parms)
" Allow user to override per buffer
if exists('g:omni_syntax_group_include_'.filetype)
let l:omni_syntax_group_include_{filetype} = g:omni_syntax_group_include_{filetype}
endif
if exists('b:omni_syntax_group_include_'.filetype)
let l:omni_syntax_group_include_{filetype} = b:omni_syntax_group_include_{filetype}
endif
" Default the include group to include the requested syntax group
let syntax_group_include_{filetype} = ''
" Check if there are any overrides specified for this filetype
if exists('g:omni_syntax_group_include_'.filetype)
if exists('l:omni_syntax_group_include_'.filetype)
let syntax_group_include_{filetype} =
\ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g')
let list_parms = split(g:omni_syntax_group_include_{filetype}, ',')
\ substitute( l:omni_syntax_group_include_{filetype},'\s\+','','g')
let list_parms = split(l:omni_syntax_group_include_{filetype}, ',')
if syntax_group_include_{filetype} =~ '\w'
let syntax_group_include_{filetype} =
\ substitute( syntax_group_include_{filetype},
@@ -329,11 +336,20 @@ function! OmniSyntaxList(...)
else
" Default the exclude group to nothing
let syntax_group_exclude_{filetype} = ''
" Check if there are any overrides specified for this filetype
" Allow user to override per buffer
if exists('g:omni_syntax_group_exclude_'.filetype)
let l:omni_syntax_group_exclude_{filetype} = g:omni_syntax_group_exclude_{filetype}
endif
if exists('b:omni_syntax_group_exclude_'.filetype)
let l:omni_syntax_group_exclude_{filetype} = b:omni_syntax_group_exclude_{filetype}
endif
" Check if there are any overrides specified for this filetype
if exists('l:omni_syntax_group_exclude_'.filetype)
let syntax_group_exclude_{filetype} =
\ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g')
let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',')
\ substitute( l:omni_syntax_group_exclude_{filetype},'\s\+','','g')
let list_exclude_groups = split(l:omni_syntax_group_exclude_{filetype}, ',')
if syntax_group_exclude_{filetype} =~ '\w'
let syntax_group_exclude_{filetype} =
\ substitute( syntax_group_exclude_{filetype},
@@ -529,6 +545,30 @@ endfunction
function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
" Allow user to override iskeyword per buffer
let l:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword
if exists('b:omni_syntax_use_iskeyword')
let l:omni_syntax_use_iskeyword = b:omni_syntax_use_iskeyword
endif
" Allow user to override iskeyword_numeric per buffer
let l:omni_syntax_use_iskeyword_numeric = g:omni_syntax_use_iskeyword_numeric
if exists('b:omni_syntax_use_iskeyword_numeric')
let l:omni_syntax_use_iskeyword_numeric = b:omni_syntax_use_iskeyword_numeric
endif
" Allow user to override iskeyword_numeric per buffer
let l:omni_syntax_use_single_byte = g:omni_syntax_use_single_byte
if exists('b:omni_syntax_use_single_byte')
let l:omni_syntax_use_single_byte = b:omni_syntax_use_single_byte
endif
" Allow user to override minimum_length per buffer
let l:omni_syntax_minimum_length = g:omni_syntax_minimum_length
if exists('b:omni_syntax_minimum_length')
let l:omni_syntax_minimum_length = b:omni_syntax_minimum_length
endif
let syn_list = ""
" From the full syntax listing, strip out the portion for the
@@ -647,14 +687,23 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
\ syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)'
\ , "", 'g'
\ )
if b:omni_syntax_use_iskeyword == 0
if l:omni_syntax_use_iskeyword == 0
" There are a number of items which have non-word characters in
" them, *'T_F1'*. vim.vim is one such file.
" This will replace non-word characters with spaces.
" setlocal filetype=forth
" let g:omni_syntax_use_iskeyword = 1
" let g:omni_syntax_use_iskeyword_numeric = 1
" You will see entries like
" #>>
" (.local)
" These were found doing a grep in vim82\syntax
" grep iskeyword *
" forth.vim:setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
else
if g:omni_syntax_use_iskeyword_numeric == 1
if l:omni_syntax_use_iskeyword_numeric == 1
" iskeyword can contain value like this
" 38,42,43,45,47-58,60-62,64-90,97-122,_,+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
" Numeric values convert to their ASCII equivalent using the
@@ -674,7 +723,7 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
" cycle through each character within the range
let [b:start, b:end] = split(item, '-')
for range_item in range( b:start, b:end )
if range_item <= 127 || g:omni_syntax_use_single_byte == 0
if range_item <= 127 || l:omni_syntax_use_single_byte == 0
if nr2char(range_item) =~ '\p'
let accepted_chars = accepted_chars . nr2char(range_item)
endif
@@ -682,13 +731,13 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
endfor
elseif item =~ '^\d\+$'
" Only numeric, translate to a character
if item < 127 || g:omni_syntax_use_single_byte == 0
if item < 127 || l:omni_syntax_use_single_byte == 0
if nr2char(item) =~ '\p'
let accepted_chars = accepted_chars . nr2char(item)
endif
endif
else
if char2nr(item) < 127 || g:omni_syntax_use_single_byte == 0
if char2nr(item) < 127 || l:omni_syntax_use_single_byte == 0
if item =~ '\p'
let accepted_chars = accepted_chars . item
endif
@@ -724,9 +773,9 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
endif
endif
if b:omni_syntax_minimum_length > 0
if l:omni_syntax_minimum_length > 0
" If the user specified a minimum length, enforce it
let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.b:omni_syntax_minimum_length.'}\ze ', ' ', 'g')
let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.l:omni_syntax_minimum_length.'}\ze ', ' ', 'g')
endif
else
let syn_list = ''
@@ -756,5 +805,6 @@ function! OmniSyntaxShowChars(spec)
endfor
return join(map(result, 'nr2char(v:val)'), ', ')
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save

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

@@ -0,0 +1,26 @@
" Vim compiler file
" Compiler: Critical Mass Modula-3 Compiler
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Apr 08
if exists("current_compiler")
finish
endif
let current_compiler = "cm3"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo&vim
" TODO: better handling of Quake errors
CompilerSet makeprg=cm3
CompilerSet errorformat=%D---\ building\ in\ %f\ ---,
\%W\"%f\"\\,\ line\ %l:\ warning:\ %m,
\%E\"%f\"\\,\ line\ %l:\ %m,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -31,6 +31,7 @@ DOCS = \
fold.txt \
ft_ada.txt \
ft_ps1.txt \
ft_raku.txt \
ft_rust.txt \
ft_sql.txt \
gui.txt \
@@ -175,6 +176,7 @@ HTMLS = \
fold.html \
ft_ada.html \
ft_ps1.html \
ft_raku.html \
ft_rust.html \
ft_sql.html \
gui.html \

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.2. Last change: 2021 Mar 13
*autocmd.txt* For Vim version 8.2. Last change: 2021 Apr 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1522,7 +1522,14 @@ option will not cause any commands to be executed.
loaded buffer. The current buffer is done last.
Note that [fname] is used to select the autocommands,
not the buffers to which they are applied.
not the buffers to which they are applied. Example: >
augroup mine
autocmd!
autocmd FileType * echo expand('<amatch>')
augroup END
doautoall mine FileType Loaded-Buffer
< Sourcing this script, you'll see as many
"Loaded-Buffer" echoed as there are loaded buffers.
Careful: Don't use this for autocommands that delete a
buffer, change to another buffer or change the

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.2. Last change: 2021 Apr 07
*eval.txt* For Vim version 8.2. Last change: 2021 Apr 24
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1962,6 +1962,9 @@ v:fcs_choice What should happen after a |FileChangedShell| event was
The default is empty. If another (invalid) value is used then
Vim behaves like it is empty, there is no warning message.
*v:fname* *fname-variable*
v:fname The file name set by 'includeexpr'. Empty otherwise.
*v:fname_in* *fname_in-variable*
v:fname_in The name of the input file. Valid while evaluating:
option used for ~
@@ -5775,7 +5778,6 @@ getmousepos() *getmousepos()*
If the mouse is over a popup window then that window is used.
When using |getchar()| the Vim variables |v:mouse_lnum|,
|v:mouse_col| and |v:mouse_winid| also provide these values.
@@ -6721,6 +6723,7 @@ islocked({expr}) *islocked()* *E786*
< When {expr} is a variable that does not exist you get an error
message. Use |exists()| to check for existence.
In Vim9 script it does not work for local variables.
Can also be used as a |method|: >
GetName()->islocked()

126
runtime/doc/ft_raku.txt Normal file
View File

@@ -0,0 +1,126 @@
*vim-raku.txt* The Raku programming language filetype
*vim-raku*
Vim-raku provides syntax highlighting, indentation, and other support for
editing Raku programs.
1. Using Unicode in your Raku files |raku-unicode|
==============================================================================
1. Using Unicode in your Raku files *raku-unicode*
Defining new operators using Unicode symbols is a good way to make your
Raku program easy to read. See:
https://perl6advent.wordpress.com/2012/12/18/day-18-formulas-resistance-is-futile/
While Raku does define ASCII alternatives for some common operators (see
https://docs.raku.org/language/unicode_ascii), using the full range of
Unicode operators is highly desirable. Your operating system provides input
facilities, but using the features built in to Vim may be preferable.
The natural way to produce these symbols in Vim is to use digraph shortcuts
(:help |digraphs-use|). Many of them are defined; type `:digraphs` to get
the list. A convenient way to read the list of digraphs is to save them in a
file. From the shell: >
vim +'redir >/tmp/vim-digraphs-listing.txt' +digraphs +'redir END' +q
Some of them are available with standard Vim digraphs:
<< « /0 ∅ !< ≮ ~
>> » Ob ∘ !> ≯ ~
., … 00 ∞ (C ⊂ ~
(U ∩ -: ÷ )C ⊃ ~
)U ∪ (_ ⊆ >= ≥ ~
?= ≅ )_ ⊇ =< ≤ ~
(- ∈ ?= ≅ != ≠ ~
-) ∋ ?- ≃ ~
The Greek alphabet is available with '*' followed by a similar Latin symbol:
*p π ~
*t τ ~
*X × ~
Numbers, subscripts and superscripts are available with 's' and 'S':
0s ₀ 0S ⁰ ~
1s ₁ 1S ¹ ~
2s ₂ 9S ⁹ ~
But some don´t come defined by default. Those are digraph definitions you can
add in your ~/.vimrc file. >
exec 'digraph \\ '.char2nr('∖')
exec 'digraph \< '.char2nr('≼')
exec 'digraph \> '.char2nr('≽')
exec 'digraph (L '.char2nr('⊈')
exec 'digraph )L '.char2nr('⊉')
exec 'digraph (/ '.char2nr('⊄')
exec 'digraph )/ '.char2nr('⊅')
exec 'digraph )/ '.char2nr('⊅')
exec 'digraph U+ '.char2nr('⊎')
exec 'digraph 0- '.char2nr('⊖')
" Euler's constant
exec 'digraph ne '.char2nr('𝑒')
" Raku's atomic operations marker
exec 'digraph @@ '.char2nr('⚛')
Alternatively, you can write Insert mode abbreviations that convert ASCII-
based operators into their single-character Unicode equivalent. >
iabbrev <buffer> !(<) ⊄
iabbrev <buffer> !(<=) ⊈
iabbrev <buffer> !(>) ⊅
iabbrev <buffer> !(>=) ⊉
iabbrev <buffer> !(cont) ∌
iabbrev <buffer> !(elem) ∉
iabbrev <buffer> != ≠
iabbrev <buffer> (&) ∩
iabbrev <buffer> (+) ⊎
iabbrev <buffer> (-) ∖
iabbrev <buffer> (.) ⊍
iabbrev <buffer> (<) ⊂
iabbrev <buffer> (<+) ≼
iabbrev <buffer> (<=) ⊆
iabbrev <buffer> (>) ⊃
iabbrev <buffer> (>+) ≽
iabbrev <buffer> (>=) ⊇
iabbrev <buffer> (\|) ∪
iabbrev <buffer> (^) ⊖
iabbrev <buffer> (atomic) ⚛
iabbrev <buffer> (cont) ∋
iabbrev <buffer> (elem) ∈
iabbrev <buffer> * ×
iabbrev <buffer> **0 ⁰
iabbrev <buffer> **1 ¹
iabbrev <buffer> **2 ²
iabbrev <buffer> **3 ³
iabbrev <buffer> **4 ⁴
iabbrev <buffer> **5 ⁵
iabbrev <buffer> **6 ⁶
iabbrev <buffer> **7 ⁷
iabbrev <buffer> **8 ⁸
iabbrev <buffer> **9 ⁹
iabbrev <buffer> ... …
iabbrev <buffer> / ÷
iabbrev <buffer> << «
iabbrev <buffer> <<[=]<< «=«
iabbrev <buffer> <<[=]>> «=»
iabbrev <buffer> <= ≤
iabbrev <buffer> =~= ≅
iabbrev <buffer> >= ≥
iabbrev <buffer> >> »
iabbrev <buffer> >>[=]<< »=«
iabbrev <buffer> >>[=]>> »=»
iabbrev <buffer> Inf ∞
iabbrev <buffer> atomic-add-fetch ⚛+=
iabbrev <buffer> atomic-assign ⚛=
iabbrev <buffer> atomic-fetch ⚛
iabbrev <buffer> atomic-dec-fetch --⚛
iabbrev <buffer> atomic-fetch-dec ⚛--
iabbrev <buffer> atomic-fetch-inc ⚛++
iabbrev <buffer> atomic-inc-fetch ++⚛
iabbrev <buffer> atomic-sub-fetch ⚛−=
iabbrev <buffer> e 𝑒
iabbrev <buffer> o ∘
iabbrev <buffer> pi π
iabbrev <buffer> set() ∅
iabbrev <buffer> tau τ
<
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*gui.txt* For Vim version 8.2. Last change: 2020 Sep 28
*gui.txt* For Vim version 8.2. Last change: 2021 May 01
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -620,6 +620,11 @@ expression register: >
:amenu Insert.foobar "='foobar'<CR>P
The special text <Cmd> begins a "command menu", it executes the command
directly without changing modes. Where you might use ":...<CR>" you can
instead use "<Cmd>...<CR>". See |<Cmd>| for more info. Example: >
anoremenu File.Next <Cmd>next<CR>
Note that the '<' and 'k' flags in 'cpoptions' also apply here (when
included they make the <> form and raw key codes not being recognized).

View File

@@ -1,4 +1,4 @@
*index.txt* For Vim version 8.2. Last change: 2021 Mar 22
*index.txt* For Vim version 8.2. Last change: 2021 Apr 24
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1396,6 +1396,7 @@ tag command action ~
|:lfdo| :lfd[o] execute command in each file in location list
|:left| :le[ft] left align lines
|:leftabove| :lefta[bove] make split window appear left or above
|:legacy| :leg[acy] make following command use legacy script syntax
|:let| :let assign a value to a variable or option
|:lexpr| :lex[pr] read locations from expr and jump to first
|:lfile| :lf[ile] read file with locations and jump to first

View File

@@ -1,4 +1,4 @@
*map.txt* For Vim version 8.2. Last change: 2021 Mar 17
*map.txt* For Vim version 8.2. Last change: 2021 Apr 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -244,9 +244,12 @@ have a look at |maparg()|.
If the first argument to one of these commands is "<expr>" and it is used to
define a new mapping or abbreviation, the argument is an expression. The
expression is evaluated to obtain the {rhs} that is used. Example: >
:inoremap <expr> . InsertDot()
The result of the InsertDot() function will be inserted. It could check the
:inoremap <expr> . <SID>InsertDot()
The result of the s:InsertDot() function will be inserted. It could check the
text before the cursor and start omni completion when some condition is met.
Using a script-local function is preferred, to avoid polluting the global
namespace. Use <SID> in the RHS so that the script that the mapping was
defined in can be found.
For abbreviations |v:char| is set to the character that was typed to trigger
the abbreviation. You can use this to decide how to expand the {lhs}. You
@@ -261,7 +264,7 @@ input. Example: >
call popup_create(... arguments ...)
return "\<Ignore>"
endfunc
nnoremap <expr> <F3> <Sid>OpenPopup()
nnoremap <expr> <F3> <SID>OpenPopup()
Also, keep in mind that the expression may be evaluated when looking for
typeahead, before the previous command has been executed. For example: >

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2021 Apr 07
*options.txt* For Vim version 8.2. Last change: 2021 Apr 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -4564,7 +4564,8 @@ A jump table for the options with a short description can be found at |Q_op|.
Keywords are used in searching and recognizing with many commands:
"w", "*", "[i", etc. It is also used for "\k" in a |pattern|. See
'isfname' for a description of the format of this option. For '@'
characters above 255 check the "word" character class.
characters above 255 check the "word" character class (any character
that is not white space or punctuation).
For C programs you could use "a-z,A-Z,48-57,_,.,-,>".
For a help file it is set to all non-blank printable characters except
'*', '"' and '|' (so that CTRL-] on a command finds the help for that
@@ -6511,6 +6512,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global values for local options)
options all options and mappings (also global values for local
options)
skiprtp exclude 'runtimepath' and 'packpath' from the options
resize size of the Vim window: 'lines' and 'columns'
sesdir the directory in which the session file is located
will become the current directory (useful with

View File

@@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 8.2. Last change: 2021 Feb 05
*quickfix.txt* For Vim version 8.2. Last change: 2021 Apr 30
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1008,13 +1008,11 @@ commands can be combined to create a NewGrep command: >
5.1 using Vim's internal grep
*:vim* *:vimgrep* *E682* *E683*
:vim[grep][!] /{pattern}/[g][j] {file} ...
:vim[grep][!] /{pattern}/[g][j][f] {file} ...
Search for {pattern} in the files {file} ... and set
the error list to the matches. Files matching
'wildignore' are ignored; files in 'suffixes' are
searched last.
Without the 'g' flag each line is added only once.
With 'g' every match is added.
{pattern} is a Vim search pattern. Instead of
enclosing it in / any non-ID character (see
@@ -1026,6 +1024,22 @@ commands can be combined to create a NewGrep command: >
If {pattern} is empty (e.g. // is specified), the last
used search pattern is used. |last-pattern|
Flags:
'g' Without the 'g' flag each line is added only
once. With 'g' every match is added.
'j' Without the 'j' flag Vim jumps to the first
match. With 'j' only the quickfix list is
updated. With the [!] any changes in the current
buffer are abandoned.
'f' When the 'f' flag is specified, fuzzy string
matching is used to find matching lines. In this
case, {pattern} is treated as a literal string
instead of a regular expression. See
|matchfuzzy()| for more info about fuzzy
matching.
|QuickFixCmdPre| and |QuickFixCmdPost| are triggered.
A file that is opened for matching may use a buffer
number, but it is reused if possible to avoid
@@ -1038,11 +1052,6 @@ commands can be combined to create a NewGrep command: >
Useful if you only want to check if there is a match
and quit quickly when it's found.
Without the 'j' flag Vim jumps to the first match.
With 'j' only the quickfix list is updated.
With the [!] any changes in the current buffer are
abandoned.
Every second or so the searched file name is displayed
to give you an idea of the progress made.
Examples: >
@@ -1059,20 +1068,20 @@ commands can be combined to create a NewGrep command: >
:vimgrep Error *.c
<
*:lv* *:lvimgrep*
:lv[imgrep][!] /{pattern}/[g][j] {file} ...
:lv[imgrep][!] /{pattern}/[g][j][f] {file} ...
:lv[imgrep][!] {pattern} {file} ...
Same as ":vimgrep", except the location list for the
current window is used instead of the quickfix list.
*:vimgrepa* *:vimgrepadd*
:vimgrepa[dd][!] /{pattern}/[g][j] {file} ...
:vimgrepa[dd][!] /{pattern}/[g][j][f] {file} ...
:vimgrepa[dd][!] {pattern} {file} ...
Just like ":vimgrep", but instead of making a new list
of errors the matches are appended to the current
list.
*:lvimgrepa* *:lvimgrepadd*
:lvimgrepa[dd][!] /{pattern}/[g][j] {file} ...
:lvimgrepa[dd][!] /{pattern}/[g][j][f] {file} ...
:lvimgrepa[dd][!] {pattern} {file} ...
Same as ":vimgrepadd", except the location list for
the current window is used instead of the quickfix

View File

@@ -2630,6 +2630,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
:left change.txt /*:left*
:lefta windows.txt /*:lefta*
:leftabove windows.txt /*:leftabove*
:leg vim9.txt /*:leg*
:legacy vim9.txt /*:legacy*
:let eval.txt /*:let*
:let%= eval.txt /*:let%=*
:let+= eval.txt /*:let+=*
@@ -3936,6 +3938,7 @@ E1050 vim9.txt /*E1050*
E107 eval.txt /*E107*
E108 eval.txt /*E108*
E109 eval.txt /*E109*
E1091 vim9.txt /*E1091*
E1092 vim9.txt /*E1092*
E1094 vim9.txt /*E1094*
E11 cmdline.txt /*E11*
@@ -6438,6 +6441,7 @@ floating-point-format eval.txt /*floating-point-format*
floating-point-precision eval.txt /*floating-point-precision*
floor() eval.txt /*floor()*
fmod() eval.txt /*fmod()*
fname-variable eval.txt /*fname-variable*
fname_diff-variable eval.txt /*fname_diff-variable*
fname_in-variable eval.txt /*fname_in-variable*
fname_new-variable eval.txt /*fname_new-variable*
@@ -8717,6 +8721,7 @@ quotestar gui.txt /*quotestar*
quote~ change.txt /*quote~*
r change.txt /*r*
r.vim syntax.txt /*r.vim*
raku-unicode ft_raku.txt /*raku-unicode*
rand() eval.txt /*rand()*
random eval.txt /*random*
range() eval.txt /*range()*
@@ -9873,6 +9878,7 @@ v:exiting eval.txt /*v:exiting*
v:false eval.txt /*v:false*
v:fcs_choice eval.txt /*v:fcs_choice*
v:fcs_reason eval.txt /*v:fcs_reason*
v:fname eval.txt /*v:fname*
v:fname_diff eval.txt /*v:fname_diff*
v:fname_in eval.txt /*v:fname_in*
v:fname_new eval.txt /*v:fname_new*
@@ -10128,6 +10134,8 @@ vim-dev intro.txt /*vim-dev*
vim-mac intro.txt /*vim-mac*
vim-modes intro.txt /*vim-modes*
vim-modes-intro intro.txt /*vim-modes-intro*
vim-raku ft_raku.txt /*vim-raku*
vim-raku.txt ft_raku.txt /*vim-raku.txt*
vim-script-intro usr_41.txt /*vim-script-intro*
vim-use intro.txt /*vim-use*
vim-variable eval.txt /*vim-variable*
@@ -10144,8 +10152,10 @@ vim9-differences vim9.txt /*vim9-differences*
vim9-export vim9.txt /*vim9-export*
vim9-final vim9.txt /*vim9-final*
vim9-gotchas vim9.txt /*vim9-gotchas*
vim9-ignored-argument vim9.txt /*vim9-ignored-argument*
vim9-import vim9.txt /*vim9-import*
vim9-lambda vim9.txt /*vim9-lambda*
vim9-lambda-arguments vim9.txt /*vim9-lambda-arguments*
vim9-mix vim9.txt /*vim9-mix*
vim9-namespace vim9.txt /*vim9-namespace*
vim9-rationale vim9.txt /*vim9-rationale*
@@ -10153,7 +10163,9 @@ vim9-reload vim9.txt /*vim9-reload*
vim9-scopes vim9.txt /*vim9-scopes*
vim9-script-intro usr_46.txt /*vim9-script-intro*
vim9-types vim9.txt /*vim9-types*
vim9-unpack-ignore vim9.txt /*vim9-unpack-ignore*
vim9-user-command vim9.txt /*vim9-user-command*
vim9-variable-arguments vim9.txt /*vim9-variable-arguments*
vim9.txt vim9.txt /*vim9.txt*
vim9script vim9.txt /*vim9script*
vim: options.txt /*vim:*

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2021 Apr 05
*todo.txt* For Vim version 8.2. Last change: 2021 Apr 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -39,38 +39,35 @@ browser use: https://github.com/vim/vim/issues/1234
-------------------- Known bugs and current work -----------------------
Vim9 - Make everything work:
- For builtin functions using tv_get_string*() use check_for_string() to be
more strict about the argument type (not a bool).
done: balloon_()
- Check many more builtin function arguments at compile time.
- Using ".." at script level doesn't convert arguments to a string.
- This fails in a :def function but not at the script level:
var s = 'asdf'->((a) => a)('x')
Disallow passing more arguments to lambda than expected?
- Implement blob index and slice, also with assignment?
- 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:
has('asdf'), len('string')
eval_variable(). Should pass the ".xxx" that follows and return that.
- 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()
- compile_member() guesses the type, should figure out at runtime.
- 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.
- Using "windo echo expr" does not accept a line break inside "expr" (in a
:def function and at script level in a not executed block). #7681
- "assert_fails()" cannot access local variables. Perhaps add this:
assertfails
... cmd ...
endassertfails /E99:.*cmd/
Similar to try/catch/endtry but without the boilerplate.
- use CheckLegacyAndVim9Success(lines) in many more places
- For builtin functions using tv_get_string*() use check_for_string() to be
more strict about the argument type (not a bool).
done: balloon_()
- Check many more builtin function arguments at compile time.
map() could check that the return type of the function argument matches
the type of the list or dict member. (#8092)
- Allow for using an autoload function name without quotes. It is then loaded
(and compiled) right away. #8124
- Test more expressions in legacy and Vim9 script, using
CheckLegacyAndVim9Success()
- Test try/catch and throw better, also nested.
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.
- 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?
- Reserve command for future use: :type, :class, :enum
Once Vim9 is stable:
- Change the help to prefer Vim9 syntax where appropriate
@@ -80,34 +77,17 @@ Once Vim9 is stable:
- Use Vim9 for runtime files.
PR #7497 for autoload/ccomplete.vim
Also for Vim9:
Further Vim9 improvements, possibly after launch:
- 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 try/catch and throw better, also nested.
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.
- compile options that are an expression, e.g. "expr:" in 'spellsuggest',
- 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.
- implement :type, import type declaration.
- implement enum, import enum.
- Future work: See |vim9-classes|
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?
- List commands when 'verbose' is set or :verbose is used.
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()
@@ -115,6 +95,9 @@ Further Vim9 improvements, possibly after launch:
- Make accessing varargs faster: arg[expr]
EVAL expr
LOADVARARG (varargs idx)
- When evaluating constants for script variables, some functions could work:
has(featureName), len(someString)
- Implement as part of an expression: ++expr, --expr, expr++, expr--.
Popup windows:
@@ -126,6 +109,8 @@ Popup windows:
- Add a termcap entry for changing the cursor when it goes under the popup and
back. like t_SI and t_EI (t_SU and t_EU, where "U" means under?)
- With terminal in popup, allow for popup_hide() to temporarily hide it.?
- Make it possible to scroll horizontally when 'wrap' is off. Does this
require an ascii scrollbar, like with the vertical one?
- Fire some autocommand event after a new popup window was created and
positioned? PopupNew? Could be used to set some options or move it out of
the way. (#5737)
@@ -495,6 +480,9 @@ Assuming the files are text, print the line with the difference.
Result of synID() sometimes wrong in help files. (#5252)
When a help file is opened that doesn't have "ft=help" in the modeline then
the FileType is first set to "text" before it is set to "help". (#8099)
Problem showing a line if the number column width changes when using "o".
(Mateusz Morusiewicz, #4245)
@@ -1013,8 +1001,7 @@ for a path separator. (xtal8, #2201)
Would be nice for Insert mode completion to highlight the text that was added
(and may change when picking another completion).
Test runtime files.
Start with filetype detection: testdir/test_filetype.vim
Test more runtime files.
Window not closed when deleting buffer. (Harm te Hennepe, 2017 Aug 27, #2029)
@@ -1407,9 +1394,6 @@ Patch to make tests pass with EBCDIC. (Owen Leibman, 2016 Apr 10)
Add ":read :command", to insert the output of an Ex command?
Can already do it with ":$put =execute('command')".
When repeating the 'confirm' dialog one needs to press Enter. (ds26gte, 2016
Apr 17) #762
exists(":tearoff") does not tell you if the command is implemented. (Tony
Mechelynck) Perhaps use exists("::tearoff") to check?
@@ -1987,6 +1971,10 @@ Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30)
Problem with "syn sync grouphere". (Gustavo Niemeyer, 2011 Jan 27)
Using "syn sync breaklines=2" works for when text is changed, but not when
scrolling or redrawing. Should start search for syntax patterns above the
first drawn line. (#8103)
Loading autoload script even when usage is inside "if 0". (Christian Brabandt,
2010 Dec 18)

View File

@@ -1,4 +1,4 @@
*usr_02.txt* For Vim version 8.2. Last change: 2019 Nov 21
*usr_02.txt* For Vim version 8.2. Last change: 2021 Apr 24
VIM USER MANUAL - by Bram Moolenaar
@@ -532,7 +532,7 @@ Summary: *help-summary* >
< for the corresponding flag of the 'cpoptions' settings, substitute <letter>
by a specific flag, e.g.: >
:help cpo-;
< And for the guioption flags: >
< And for the 'guioptions' flags: >
:help go-<letter>
4) Normal mode commands do not have a prefix. To go to the help page for the

View File

@@ -1,4 +1,4 @@
*usr_12.txt* For Vim version 8.2. Last change: 2017 Aug 11
*usr_12.txt* For Vim version 8.2. Last change: 2021 Apr 19
VIM USER MANUAL - by Bram Moolenaar
@@ -180,14 +180,14 @@ after it. That way you don't have this problem again.
The |:global| command can be combined with the |:move| command to move all the
lines before the first line, resulting in a reversed file. The command is: >
:global/^/m 0
:global/^/move 0
Abbreviated: >
:g/^/m 0
The "^" regular expression matches the beginning of the line (even if the line
is blank). The |:move| command moves the matching line to after the mythical
is blank). The |:move| command moves the matching line to after the imaginary
zeroth line, so the current matching line becomes the first line of the file.
As the |:global| command is not confused by the changing line numbering,
|:global| proceeds to match all remaining lines of the file and puts each as

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 8.2. Last change: 2021 Mar 14
*usr_41.txt* For Vim version 8.2. Last change: 2021 Apr 19
VIM USER MANUAL - by Bram Moolenaar
@@ -115,12 +115,20 @@ if you are impatient.
FOUR KINDS OF NUMBERS
Numbers can be decimal, hexadecimal, octal or binary. A hexadecimal number
starts with "0x" or "0X". For example "0x1f" is decimal 31. An octal number
starts with a zero. "017" is decimal 15. A binary number starts with "0b" or
"0B". For example "0b101" is decimal 5. Careful: don't put a zero before a
decimal number, it will be interpreted as an octal number!
The ":echo" command always prints decimal numbers. Example: >
Numbers can be decimal, hexadecimal, octal or binary.
A hexadecimal number starts with "0x" or "0X". For example "0x1f" is decimal
31.
An octal number starts with "0o", "0O" or a zero and another digit. "0o17" is
decimal 15. Using just a zero prefix is not supported in Vim9 script.
A binary number starts with "0b" or "0B". For example "0b101" is decimal 5.
A decimal number is just digits. Careful: don't put a zero before a decimal
number, it will be interpreted as an octal number in legacy script!
The ":echo" command always prints decimal numbers. Example: >
:echo 0x7f 0o36
< 127 30 ~

View File

@@ -416,6 +416,10 @@ Denotes the end of the options.
Arguments after this will be handled as a file name.
This can be used to edit a filename that starts with a '\-'.
.TP
\-\-clean
Do not use any personal configuration (vimrc, plugins, etc.). Useful to see if
a problem reproduces with a clean Vim setup.
.TP
\-\-echo\-wid
GTK GUI only: Echo the Window ID on stdout.
.TP

View File

@@ -300,6 +300,10 @@ OPTIONS
be handled as a file name. This can be used to edit a
filename that starts with a '-'.
--clean Do not use any personal configuration (vimrc, plugins,
etc.). Useful to see if a problem reproduces with a clean
Vim setup.
--echo-wid GTK GUI only: Echo the Window ID on stdout.
--help Give a help message and exit, just like "-h".

View File

@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2021 Apr 06
*vim9.txt* For Vim version 8.2. Last change: 2021 Apr 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -61,12 +61,17 @@ Vim9 script and legacy Vim script can be mixed. There is no requirement to
rewrite old scripts, they keep working as before. You may want to use a few
`:def` functions for code that needs to be fast.
*:vim9* *:vim9cmd*
:vim9[cmd] {cmd}
:vim9[cmd] {cmd} *:vim9* *:vim9cmd*
Execute {cmd} using Vim9 script syntax and semantics.
Useful when typing a command and in a legacy script or
function.
:leg[acy] {cmd} *:leg* *:legacy*
Execute {cmd} using legacy script syntax and semantics. Only
useful in a Vim9 script or a :def function.
Note that {cmd} cannot use local variables, since it is parsed
with legacy expression syntax.
==============================================================================
2. Differences from legacy Vim script *vim9-differences*
@@ -152,6 +157,11 @@ Compilation is done when any of these is encountered:
*E1091*
If compilation fails it is not tried again on the next call, instead this
error is given: "E1091: Function is not compiled: {name}".
Compilation will fail when encountering a user command that has not been
created yet. In this case you can call `execute()` to invoke it at runtime. >
def MyFunc()
execute('DefinedLater')
enddef
`:def` has no options like `:function` does: "range", "abort", "dict" or
"closure". A `:def` function always aborts on an error (unless `:silent!` was
@@ -334,10 +344,11 @@ The "g:" prefix is not needed for auto-load functions.
Since `&opt = value` is now assigning a value to option "opt", ":&" cannot be
used to repeat a `:substitute` command.
*vim9-unpack-ignore*
For an unpack assignment the underscore can be used to ignore a list item,
similar to how a function argument can be ignored: >
[a, _, c] = theList
To ignore any remaining items: >
[a, b; _] = longList
< *E1092*
@@ -599,6 +610,44 @@ Notes:
echo [1, 2]
[3, 4]
White space ~
Vim9 script enforces proper use of white space. This is no longer allowed: >
var name=234 # Error!
var name= 234 # Error!
var name =234 # Error!
There must be white space before and after the "=": >
var name = 234 # OK
White space must also be put before the # that starts a comment after a
command: >
var name = 234# Error!
var name = 234 # OK
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 "(": >
Func (arg) # Error!
Func
\ (arg) # Error!
Func
(arg) # Error!
Func(arg) # OK
Func(
arg) # OK
Func(
arg # OK
)
No curly braces expansion ~
|curly-braces-names| cannot be used.
@@ -650,6 +699,17 @@ Comparators ~
The 'ignorecase' option is not used for comparators that use strings.
Abort after error ~
In legacy script, when an error is encountered, Vim continues to execute
following lines. This can lead to a long sequence of errors and need to type
CTRL-C to stop it. In Vim9 script execution of commands stops at the first
error. Example: >
vim9script
var x = does-not-exist
echo 'not executed'
For loop ~
Legacy Vim script has some tricks to make a for loop over a list handle
@@ -673,43 +733,6 @@ Generally, you should not change the list that is iterated over. Make a copy
first if needed.
White space ~
Vim9 script enforces proper use of white space. This is no longer allowed: >
var name=234 # Error!
var name= 234 # Error!
var name =234 # Error!
There must be white space before and after the "=": >
var name = 234 # OK
White space must also be put before the # that starts a comment after a
command: >
var name = 234# Error!
var name = 234 # OK
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 "(": >
Func (arg) # Error!
Func
\ (arg) # Error!
Func
(arg) # Error!
Func(arg) # OK
Func(
arg) # OK
Func(
arg # OK
)
Conditions and expressions ~
Conditions and expressions are mostly working like they do in other languages.

View File

@@ -1,4 +1,4 @@
*windows.txt* For Vim version 8.2. Last change: 2021 Mar 21
*windows.txt* For Vim version 8.2. Last change: 2021 Apr 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -521,14 +521,14 @@ CTRL-W J Move the current window to be at the very bottom, using the
CTRL-W H Move the current window to be at the far left, using the
full height of the screen. This works like closing the
current window and then creating another one with
":vert topleft split", except that the current window contents
`:vert topleft split`, except that the current window contents
is used for the new window.
*CTRL-W_L*
CTRL-W L Move the current window to be at the far right, using the full
height of the screen. This works like closing the
current window and then creating another one with
":vert botright split", except that the current window
`:vert botright split`, except that the current window
contents is used for the new window.
*CTRL-W_T*
@@ -571,7 +571,7 @@ CTRL-W < Decrease current window width by N (default 1).
*CTRL-W_>*
CTRL-W > Increase current window width by N (default 1).
:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
:vert[ical] res[ize] [N] *:vertical-resize* *CTRL-W_bar*
CTRL-W | Set current window width to N (default: widest possible).
You can also resize a window by dragging a status line up or down with the

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Apr 05
" Last Change: 2021 Apr 17
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -417,6 +417,10 @@ endif
" Lynx config files
au BufNewFile,BufRead lynx.cfg setf lynx
" Modula-3 configuration language (must be before *.cfg and *makefile)
au BufNewFile,BufRead *.quake,cm3.cfg setf m3quake
au BufNewFile,BufRead m3makefile,m3overrides setf m3build
" Quake
au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg setf quake
au BufNewFile,BufRead *quake[1-3]/*.cfg setf quake
@@ -596,7 +600,7 @@ au BufNewFile,BufRead *.fan,*.fwt setf fan
au BufNewFile,BufRead *.factor setf factor
" Fennel
autocmd BufRead,BufNewFile *.fnl setf fennel
autocmd BufRead,BufNewFile *.fnl setf fennel
" Fetchmail RC file
au BufNewFile,BufRead .fetchmailrc setf fetchmail
@@ -640,7 +644,7 @@ au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
" Gift (Moodle)
autocmd BufRead,BufNewFile *.gift setf gift
autocmd BufRead,BufNewFile *.gift setf gift
" Git
au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
@@ -711,7 +715,7 @@ au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
au BufNewFile,BufRead *.haml setf haml
" Hamster Classic | Playground files
au BufNewFile,BufRead *.hsm setf hamster
au BufNewFile,BufRead *.hsm setf hamster
" Haskell
au BufNewFile,BufRead *.hs,*.hsc,*.hs-boot setf haskell
@@ -1045,10 +1049,10 @@ au BufNewFile,BufRead *.mod
\ setf modsim3 |
\ endif
" Modula 2 (.md removed in favor of Markdown)
" Modula-2 (.md removed in favor of Markdown)
au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.mi setf modula2
" Modula 3 (.m3, .i3, .mg, .ig)
" Modula-3 (.m3, .i3, .mg, .ig)
au BufNewFile,BufRead *.[mi][3g] setf modula3
" Monk
@@ -1191,6 +1195,9 @@ au BufNewFile,BufRead *.pp call dist#ft#FTpp()
" Delphi or Lazarus program file
au BufNewFile,BufRead *.dpr,*.lpr setf pascal
" Free Pascal makefile definition file
au BufNewFile,BufRead *.fpc setf fpcmake
" PDF
au BufNewFile,BufRead *.pdf setf pdf
@@ -1204,8 +1211,6 @@ else
au BufNewFile,BufRead *.pl call dist#ft#FTpl()
endif
au BufNewFile,BufRead *.plx,*.al,*.psgi setf perl
au BufNewFile,BufRead *.p6,*.pm6,*.pl6 setf perl6
au BufNewFile,BufRead *.raku,*.rakumod setf perl6
" Perl, XPM or XPM2
au BufNewFile,BufRead *.pm
@@ -1219,7 +1224,6 @@ au BufNewFile,BufRead *.pm
" Perl POD
au BufNewFile,BufRead *.pod setf pod
au BufNewFile,BufRead *.pod6 setf pod6
" Php, php3, php4, etc.
" Also Phtml (was used for PHP 2 in the past)
@@ -1338,12 +1342,15 @@ au BufNewFile,BufRead *.pdb setf prolog
" Promela
au BufNewFile,BufRead *.pml setf promela
" Property Specification Language (PSL)
au BufNewFile,BufRead *.psl setf psl
" Google protocol buffers
au BufNewFile,BufRead *.proto setf proto
au BufNewFile,BufRead *.pbtxt setf pbtxt
" Poke
au BufNewFile,BufRead *.pk setf poke
au BufNewFile,BufRead *.pk setf poke
" Protocols
au BufNewFile,BufRead */etc/protocols setf protocols
@@ -1359,6 +1366,9 @@ au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python
" Radiance
au BufNewFile,BufRead *.rad,*.mat setf radiance
" Raku (formelly Perl6)
au BufNewFile,BufRead *.pm6,*.p6,*.t6,*.pod6,*.raku,*.rakumod,*.rakudoc,*.rakutest setf raku
" Ratpoison config/command files
au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison

View File

@@ -0,0 +1,25 @@
" Vim filetype plugin file
" Language: Free Pascal Makefile Generator
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Apr 23
if exists("b:did_ftplugin")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
runtime! ftplugin/make.vim
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Free Pascal Makefile Definition Files (*.fpc)\t*.fpc\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = b:undo_ftplugin .. " | unlet! b:browsefilter"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -1,6 +1,6 @@
" Language: gprof
" Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
" Last Change: 2013 Jun 09
" Last Change: 2021 Apr 08
" When cursor is on one line of the gprof call graph,
" calling this function jumps to this function in the call graph.
@@ -16,7 +16,7 @@ fun! <SID>GprofJumpToFunctionIndex()
norm! $y%
call search('^' . escape(@", '[]'), 'sw')
norm! zz
elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+'
elseif l:line =~ '^\(\s*[0-9\.]\+\)\{3}\s\+'
" We're in line in the flat profile.
norm! 55|eby$
call search('^\[\d\+\].*\d\s\+' . escape(@", '[]*.') . '\>', 'sW')

View File

@@ -0,0 +1,24 @@
" Vim filetype plugin file
" Language: Modula-3 Makefile
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 April 15
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
runtime! ftplugin/m3quake.vim
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Modula-3 Makefile (m3makefile m3overrides)\tm3makefile;m3overrides\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -0,0 +1,33 @@
" Vim filetype plugin file
" Language: Modula-3 Quake
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 April 15
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal comments=s1:/*,mb:*,ex:*/,:%
setlocal commentstring=%\ %s
setlocal formatoptions-=t formatoptions+=croql
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_words = '\<\%(proc\|if\|foreach\)\>:\<else\>:\<end\>'
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Modula-3 Quake Source Files (*.quake)\t*.quake\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = "setl fo< com< cms< " ..
\ "| unlet! b:browsefilter b:match_words"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -0,0 +1,39 @@
" Vim filetype plugin file
" Language: Modula-2
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Apr 08
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal comments=s0:(*,mb:\ ,ex:*)
setlocal commentstring=(*%s*)
setlocal formatoptions-=t formatoptions+=croql
if exists("loaded_matchit") && !exists("b:match_words")
" The second branch of the middle pattern is intended to match CASE labels
let b:match_words = '\<REPEAT\>:\<UNTIL\>,' ..
\ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOOP\|WHILE\|WITH\)\>' ..
\ ':' ..
\ '\<\%(ELSIF\|ELSE\)\>\|\%(^\s*\)\@<=\w\+\%(\s*\,\s*\w\+\)\=\s*\:=\@!' ..
\ ':' ..
\ '\<END\>'
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Modula-2 Source Files (*.def *.mod)\t*.def;*.mod\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = "setl com< cms< fo< " ..
\ "| unlet! b:browsefilter b:match_words"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -0,0 +1,38 @@
" Vim filetype plugin file
" Language: Modula-3
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Apr 08
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal comments=s0:(*,mb:\ ,ex:*)
setlocal commentstring=(*%s*)
setlocal formatoptions-=t formatoptions+=croql
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_words = '\<REPEAT\>:\<UNTIL\>,' ..
\ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOCK\|LOOP\|TRY\|TYPECASE\|WHILE\|WITH\)\>' ..
\ ':' ..
\ '\<\%(ELSIF\|ELSE\|EXCEPT\|FINALLY\)\>\|\%(^\s*\)\@<=\S.*=>' ..
\ ':' ..
\ '\<END\>'
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Modula-3 Source Files (*.m3)\t*.m3\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = "setl com< cms< fo< " ..
\ "| unlet! b:browsefilter b:match_words"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -1,20 +1,50 @@
" Vim filetype plugin file
" Language: pascal
" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
" Last Changed: 11 Apr 2011
" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
" Language: Pascal
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
" Last Change: 2021 Apr 23
if exists("b:did_ftplugin") | finish | endif
let b:did_ftplugin = 1
if exists("loaded_matchit")
let b:match_ignorecase = 1 " (pascal is case-insensitive)
let s:cpo_save = &cpo
set cpo&vim
let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>'
let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>'
let b:match_words .= ',\<repeat\>:\<until\>'
let b:match_words .= ',\<if\>:\<else\>'
set comments=s:(*,m:\ ,e:*),s:{,m:\ ,e:}
set commentstring={%s}
if exists("pascal_delphi")
set comments+=:///
endif
" Undo the stuff we changed.
let b:undo_ftplugin = "unlet! b:match_words"
if !exists("pascal_traditional")
set commentstring=//\ %s
set comments+=://
endif
setlocal formatoptions-=t formatoptions+=croql
if exists("loaded_matchit")
let b:match_ignorecase = 1 " (Pascal is case-insensitive)
let b:match_words = '\<\%(asm\|begin\|case\|\%(\%(=\|packed\)\s*\)\@<=\%(class\|object\)\|\%(=\s*\)\@<=interface\|record\|try\)\>'
let b:match_words .= ':\%(^\s*\)\@<=\%(except\|finally\|else\|otherwise\)\>'
let b:match_words .= ':\<end\>\.\@!'
let b:match_words .= ',\<repeat\>:\<until\>'
" let b:match_words .= ',\<if\>:\<else\>' " FIXME - else clashing with middle else. It seems like a debatable use anyway.
let b:match_words .= ',\<unit\>:\<\%(\%(^\s*\)\@<=interface\|implementation\|initialization\|finalization\)\>:\<end\.'
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Pascal Source Files (*.pas *.pp *.inc)\t*.pas;*.pp;*.inc\n" .
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = "setl fo< cms< com< " ..
\ "| unlet! b:browsefilter b:match_words b:match_ignorecase"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -1,77 +0,0 @@
" Vim filetype plugin file
" Language: Perl 6
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: https://github.com/vim-perl/vim-perl
" Bugs/requests: https://github.com/vim-perl/vim-perl/issues
" Last Change: 2020 Apr 15
" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
"
" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
if exists("b:did_ftplugin") | finish | endif
let b:did_ftplugin = 1
" Make sure the continuation lines below do not cause problems in
" compatibility mode.
let s:save_cpo = &cpo
set cpo-=C
setlocal formatoptions-=t
setlocal formatoptions+=crqol
setlocal keywordprg=p6doc
setlocal comments=:#
setlocal commentstring=#%s
" Change the browse dialog on Win32 to show mainly Perl-related files
if has("gui_win32")
let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
\ "Perl Modules (*.pm)\t*.pm\n" .
\ "Perl Documentation Files (*.pod)\t*.pod\n" .
\ "All Files (*.*)\t*.*\n"
endif
" Provided by Ned Konz <ned at bike-nomad dot com>
"---------------------------------------------
setlocal include=\\<\\(use\\\|require\\)\\>
setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
setlocal define=[^A-Za-z_]
" The following line changes a global variable but is necessary to make
" gf and similar commands work. Thanks to Andrew Pimlott for pointing out
" the problem. If this causes a " problem for you, add an
" after/ftplugin/perl6.vim file that contains
" set isfname-=:
set isfname+=:
setlocal iskeyword=48-57,_,A-Z,a-z,:,-
" Set this once, globally.
if !exists("perlpath")
if executable("perl6")
try
if &shellxquote != '"'
let perlpath = system('perl6 -e "@*INC.join(q/,/).say"')
else
let perlpath = system("perl6 -e '@*INC.join(q/,/).say'")
endif
let perlpath = substitute(perlpath,',.$',',,','')
catch /E145:/
let perlpath = ".,,"
endtry
else
" If we can't call perl to get its path, just default to using the
" current directory and the directory of the current file.
let perlpath = ".,,"
endif
endif
let &l:path=perlpath
"---------------------------------------------
" Undo the stuff we changed.
let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" .
\ " | unlet! b:browsefilter"
" Restore the saved compatibility options.
let &cpo = s:save_cpo
unlet s:save_cpo

View File

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

127
runtime/ftplugin/raku.vim Normal file
View File

@@ -0,0 +1,127 @@
" Vim filetype plugin file
" Language: Raku
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: https://github.com/Raku/vim-raku
" Bugs/requests: https://github.com/Raku/vim-raku/issues
" Last Change: 2021-04-16
" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
"
" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
if exists("b:did_ftplugin") | finish | endif
let b:did_ftplugin = 1
" Make sure the continuation lines below do not cause problems in
" compatibility mode.
let s:save_cpo = &cpo
set cpo-=C
setlocal formatoptions-=t
setlocal formatoptions+=crqol
setlocal keywordprg=p6doc
setlocal comments=:#\|,:#=,:#
setlocal commentstring=#%s
" Provided by Ned Konz <ned at bike-nomad dot com>
"---------------------------------------------
setlocal include=\\<\\(use\\\|require\\)\\>
setlocal includeexpr=substitute(v:fname,'::','/','g')
setlocal suffixesadd=.rakumod,.rakudoc,.pm6,.pm
setlocal define=[^A-Za-z_]
" The following line changes a global variable but is necessary to make
" gf and similar commands work. Thanks to Andrew Pimlott for pointing out
" the problem. If this causes a problem for you, add an
" after/ftplugin/raku.vim file that contains
" set isfname-=:
set isfname+=:
setlocal iskeyword=@,48-57,_,192-255,-
" Raku exposes its CompUnits through $*REPO, but mapping module names to
" compunit paths is nontrivial. Probably it's more convenient to rely on
" people using zef, which has a handy store of sources for modules it has
" installed.
func s:compareReverseFtime(a, b)
let atime = getftime(a:a)
let btime = getftime(a:b)
return atime > btime ? -1 : atime == btime ? 0 : 1
endfunc
let &l:path = "lib,."
if exists('$RAKULIB')
let &l:path = &l:path . "," . $RAKULIB
endif
let &l:path = &l:path . "," . join(
\ sort(glob("~/.zef/store/*/*/lib", 0, 1), "s:compareReverseFtime"),
\ ',')
" Convert ascii-based ops into their single-character unicode equivalent
if get(g:, 'raku_unicode_abbrevs', 0)
iabbrev <buffer> !(<) ⊄
iabbrev <buffer> !(<=) ⊈
iabbrev <buffer> !(>) ⊅
iabbrev <buffer> !(>=) ⊉
iabbrev <buffer> !(cont) ∌
iabbrev <buffer> !(elem) ∉
iabbrev <buffer> != ≠
iabbrev <buffer> (&) ∩
iabbrev <buffer> (+) ⊎
iabbrev <buffer> (-) ∖
iabbrev <buffer> (.) ⊍
iabbrev <buffer> (<) ⊂
iabbrev <buffer> (<+) ≼
iabbrev <buffer> (<=) ⊆
iabbrev <buffer> (>) ⊃
iabbrev <buffer> (>+) ≽
iabbrev <buffer> (>=) ⊇
iabbrev <buffer> (\|) ∪
iabbrev <buffer> (^) ⊖
iabbrev <buffer> (atomic) ⚛
iabbrev <buffer> (cont) ∋
iabbrev <buffer> (elem) ∈
iabbrev <buffer> * ×
iabbrev <buffer> **0 ⁰
iabbrev <buffer> **1 ¹
iabbrev <buffer> **2 ²
iabbrev <buffer> **3 ³
iabbrev <buffer> **4 ⁴
iabbrev <buffer> **5 ⁵
iabbrev <buffer> **6 ⁶
iabbrev <buffer> **7 ⁷
iabbrev <buffer> **8 ⁸
iabbrev <buffer> **9 ⁹
iabbrev <buffer> ... …
iabbrev <buffer> / ÷
iabbrev <buffer> << «
iabbrev <buffer> <<[=]<< «=«
iabbrev <buffer> <<[=]>> «=»
iabbrev <buffer> <= ≤
iabbrev <buffer> =~= ≅
iabbrev <buffer> >= ≥
iabbrev <buffer> >> »
iabbrev <buffer> >>[=]<< »=«
iabbrev <buffer> >>[=]>> »=»
iabbrev <buffer> Inf ∞
iabbrev <buffer> atomic-add-fetch ⚛+=
iabbrev <buffer> atomic-assign ⚛=
iabbrev <buffer> atomic-fetch ⚛
iabbrev <buffer> atomic-dec-fetch --⚛
iabbrev <buffer> atomic-fetch-dec ⚛--
iabbrev <buffer> atomic-fetch-inc ⚛++
iabbrev <buffer> atomic-inc-fetch ++⚛
iabbrev <buffer> atomic-sub-fetch ⚛−=
iabbrev <buffer> e 𝑒
iabbrev <buffer> o ∘
iabbrev <buffer> pi π
iabbrev <buffer> set() ∅
iabbrev <buffer> tau τ
endif
" Undo the stuff we changed.
let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< isk< kp< path<" .
\ " | unlet! b:browsefilter"
" Restore the saved compatibility options.
let &cpo = s:save_cpo
unlet s:save_cpo

View File

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

View File

@@ -2,7 +2,7 @@
" Language: R Markdown file
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sun Jul 22, 2018 06:51PM
" Last Change: Sat Aug 15, 2020 12:03PM
" Original work by Alex Zvoleff (adjusted from R help for rmd by Michel Kuhlmann)
" Only do this when not yet done for this buffer
@@ -46,7 +46,7 @@ runtime ftplugin/pandoc.vim
" Don't load another plugin for this buffer
let b:did_ftplugin = 1
if has("gui_win32") && !exists("b:browsefilter")
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
\ "All Files (*.*)\t*.*\n"
endif

View File

@@ -2,7 +2,7 @@
" Language: Rnoweb
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:37PM
" Last Change: Sat Aug 15, 2020 12:02PM
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
@@ -24,7 +24,7 @@ setlocal iskeyword=@,48-57,_,.
setlocal suffixesadd=.bib,.tex
setlocal comments=b:%,b:#,b:##,b:###,b:#'
if has("gui_win32") && !exists("b:browsefilter")
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
\ "All Files (*.*)\t*.*\n"
endif

View File

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

View File

@@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Feb 20
" Last Change: 2021 Apr 11
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -94,11 +94,11 @@ if exists("loaded_matchit")
" func name
" require a parenthesis following, then there can be an "endfunc".
let b:match_words =
\ '\<\%(fu\%[nction]\|def\)!\=\s\+\S\+(:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
\ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' .
\ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
\ '\<\%(fu\%[nction]\|def\)!\=\s\+\S\+(:\%(\%(^\||\)\s*\)\@<=\<retu\%[rn]\>:\%(\%(^\||\)\s*\)\@<=\<\%(endf\%[unction]\|enddef\)\>,' .
\ '\<\(wh\%[ile]\|for\)\>:\%(\%(^\||\)\s*\)\@<=\<brea\%[k]\>:\%(\%(^\||\)\s*\)\@<=\<con\%[tinue]\>:\%(\%(^\||\)\s*\)\@<=\<end\(w\%[hile]\|fo\%[r]\)\>,' .
\ '\<if\>:\%(\%(^\||\)\s*\)\@<=\<el\%[seif]\>:\%(\%(^\||\)\s*\)\@<=\<en\%[dif]\>,' .
\ '{:},' .
\ '\<try\>:\<cat\%[ch]\>:\<fina\%[lly]\>:\<endt\%[ry]\>,' .
\ '\<try\>:\%(\%(^\||\)\s*\)\@<=\<cat\%[ch]\>:\%(\%(^\||\)\s*\)\@<=\<fina\%[lly]\>:\%(\%(^\||\)\s*\)\@<=\<endt\%[ry]\>,' .
\ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,'
" Ignore syntax region commands and settings, any 'en*' would clobber
" if-endif.

View File

@@ -20,8 +20,8 @@ let s:comment_rx = '^\s*#'
let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
let s:continued_rule_rx = '^[^#:]*:\{1,2}\%([^=:]\|$\)'
let s:continuation_rx = '\\$'
let s:assignment_rx = '^\s*\h\w*\s*[+?]\==\s*\zs.*\\$'
let s:folded_assignment_rx = '^\s*\h\w*\s*[+?]\=='
let s:assignment_rx = '^\s*\h\w*\s*[+:?]\==\s*\zs.*\\$'
let s:folded_assignment_rx = '^\s*\h\w*\s*[+:?]\=='
" TODO: This needs to be a lot more restrictive in what it matches.
let s:just_inserted_rule_rx = '^\s*[^#:]\+:\{1,2}$'
let s:conditional_directive_rx = '^ *\%(ifn\=\%(eq\|def\)\|else\)\>'

View File

@@ -36,7 +36,7 @@ let b:did_indent = 1
" Is syntax highlighting active ?
let b:indent_use_syntax = has("syntax")
setlocal indentexpr=GetPerl6Indent()
setlocal indentexpr=GetRakuIndent()
" we reset it first because the Perl 5 indent file might have been loaded due
" to a .pl/pm file extension, and indent files don't clean up afterwards
@@ -50,7 +50,7 @@ endif
let s:cpo_save = &cpo
set cpo-=C
function! GetPerl6Indent()
function! GetRakuIndent()
" Get the line to be indented
let cline = getline(v:lnum)
@@ -60,11 +60,6 @@ function! GetPerl6Indent()
return 0
endif
" Don't reindent coments on first column
if cline =~ '^#'
return 0
endif
" Get current syntax item at the line's first char
let csynid = ''
if b:indent_use_syntax
@@ -72,7 +67,7 @@ function! GetPerl6Indent()
endif
" Don't reindent POD and heredocs
if csynid =~ "^p6Pod"
if csynid =~ "^rakuPod"
return indent(v:lnum)
endif
@@ -92,7 +87,7 @@ function! GetPerl6Indent()
let skippin = 2
while skippin
let synid = synIDattr(synID(lnum,1,0),"name")
if (synid =~ "^p6Pod" || synid =~ "p6Comment")
if (synid =~ "^rakuPod" || synid =~ "rakuComment")
let lnum = prevnonblank(lnum - 1)
if lnum == 0
return 0
@@ -107,19 +102,19 @@ function! GetPerl6Indent()
endif
if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$'
let ind = ind + shiftwidth()
let ind = ind + &sw
endif
if cline =~ '^\s*[)}\]»>]'
let ind = ind - shiftwidth()
let ind = ind - &sw
endif
" Indent lines that begin with 'or' or 'and'
if cline =~ '^\s*\(or\|and\)\>'
if line !~ '^\s*\(or\|and\)\>'
let ind = ind + shiftwidth()
let ind = ind + &sw
endif
elseif line =~ '^\s*\(or\|and\)\>'
let ind = ind - shiftwidth()
let ind = ind - &sw
endif
return ind

View File

@@ -2,7 +2,7 @@
" Language: Rmd
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sun Aug 19, 2018 09:14PM
" Last Change: Sun Mar 28, 2021 08:05PM
" Only load this indent file when no other was loaded.
@@ -13,7 +13,7 @@ runtime indent/r.vim
let s:RIndent = function(substitute(&indentexpr, "()", "", ""))
let b:did_indent = 1
setlocal indentkeys=0{,0},:,!^F,o,O,e
setlocal indentkeys=0{,0},<:>,!^F,o,O,e
setlocal indentexpr=GetRmdIndent()
if exists("*GetRmdIndent")
@@ -23,6 +23,21 @@ endif
let s:cpo_save = &cpo
set cpo&vim
" Simple Python indentation algorithm
function s:GetPyIndent()
let plnum = prevnonblank(v:lnum - 1)
let pline = getline(plnum)
let cline = getline(v:lnum)
if pline =~ '^s```\s*{\s*python '
return 0
elseif pline =~ ':$'
return indent(plnum) + &shiftwidth
elseif cline =~ 'else:$'
return indent(plnum) - &shiftwidth
endif
return indent(plnum)
endfunction
function s:GetMdIndent()
let pline = getline(v:lnum - 1)
let cline = getline(v:lnum)
@@ -37,13 +52,14 @@ function s:GetMdIndent()
endfunction
function s:GetYamlIndent()
let pline = getline(v:lnum - 1)
let plnum = prevnonblank(v:lnum - 1)
let pline = getline(plnum)
if pline =~ ':\s*$'
return indent(v:lnum) + shiftwidth()
return indent(plnum) + shiftwidth()
elseif pline =~ '^\s*- '
return indent(v:lnum) + 2
endif
return indent(prevnonblank(v:lnum - 1))
return indent(plnum)
endfunction
function GetRmdIndent()
@@ -52,9 +68,11 @@ function GetRmdIndent()
endif
if search('^[ \t]*```{r', "bncW") > search('^[ \t]*```$', "bncW")
return s:RIndent()
elseif v:lnum > 1 && search('^---$', "bnW") == 1 &&
\ (search('^---$', "nW") > v:lnum || search('^...$', "nW") > v:lnum)
elseif v:lnum > 1 && (search('^---$', "bnW") == 1 &&
\ (search('^---$', "nW") > v:lnum || search('^\.\.\.$', "nW") > v:lnum))
return s:GetYamlIndent()
elseif search('^[ \t]*```{python', "bncW") > search('^[ \t]*```$', "bncW")
return s:GetPyIndent()
else
return s:GetMdIndent()
endif

View File

@@ -1,7 +1,7 @@
" Vim indent file
" Language: Vim script
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Feb 18
" Last Change: 2021 Apr 18
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -71,7 +71,8 @@ function GetVimIndentIntern()
" End of heredoc: use indent of matching start line
let lnum = v:lnum - 1
while lnum > 0
if synIDattr(synID(lnum, 1, 1), "name") !~ 'vimLetHereDoc'
let attr = synIDattr(synID(lnum, 1, 1), "name")
if attr != '' && attr !~ 'vimLetHereDoc'
return indent(lnum)
endif
let lnum -= 1

View File

@@ -1,8 +1,9 @@
" Menu Translations: Francais
" Maintainer: Adrien Beau <version.francaise@free.fr>
" First Version: Francois Thunus <thunus@systran.fr>
" Last Modification: David Blanchet <david.blanchet@free.fr>
" Last Change: 2018 Apr 25
" Contributors: David Blanchet <david.blanchet@free.fr>
" Gabriel Dupras <gabrieldupras@gmail.com>
" Last Change: 2021 Feb 16
" Quit when menu translations have already been done.
if exists("did_menu_trans")
@@ -78,11 +79,12 @@ menutrans Find\ and\ Rep&lace<Tab>:%s Re&mplacer<Tab>:%s
menutrans Find\ and\ Rep&lace<Tab>:s Re&mplacer<Tab>:s
" -SEP3-
menutrans Settings\ &Window Fe&nêtre\ des\ réglages
menutrans Startup\ &Settings Réglages\ de\ &lancement
menutrans &Global\ Settings Réglages\ globau&x
menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Surligner\ recherche\ on/off<Tab>:set\ hls!
menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Ignorer\ casse\ on/off<Tab>:set\ ic!
menutrans Toggle\ &Showmatch<Tab>:set\ sm! Vérifier\ parenth&èses\ on/off<Tab>:set\ sm!
menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Surligner\ recherche\ on/off<Tab>:set\ hls!
menutrans Toggle\ &Ignoring\ case<Tab>:set\ ic! &Ignorer\ casse\ on/off<Tab>:set\ ic!
menutrans Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! Vérifier\ parenth&èses\ on/off<Tab>:set\ sm!
menutrans &Context\ lines Lignes\ &autour\ du\ curseur
@@ -94,7 +96,7 @@ menutrans Block\ and\ Insert &Bloc\ et\ insertion
menutrans Always &Toujours
menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! I&nsertion\ permanente\ on/off<Tab>:set\ im!
menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! &Compatibilité\ Vi\ on/off<Tab>:set\ cp!
menutrans Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! &Compatibilité\ Vi\ on/off<Tab>:set\ cp!
menutrans Search\ &Path\.\.\. Chemin\ de\ rec&herche\ des\ fichiers\.\.\.
menutrans Ta&g\ Files\.\.\. Fichiers\ d'&étiquettes\.\.\.
" -SEP1-
@@ -109,12 +111,13 @@ let g:menutrans_tags_dialog = "Entrez les noms des fichiers d'
menutrans F&ile\ Settings Réglages\ fichie&r
menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! &Numérotation\ on/off<Tab>:set\ nu!
menutrans Toggle\ Relati&ve\ Line\ Numbering<Tab>:set\ rnu! &Numérotation\ relative\ on/off<Tab>:set\ nu!
menutrans Toggle\ &List\ Mode<Tab>:set\ list! Mode\ &listing\ on/off<Tab>:set\ list!
menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! &Retour\ à\ la\ ligne\ on/off<Tab>:set\ wrap!
menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Retour\ sur\ &mot\ on/off<Tab>:set\ lbr!
menutrans Toggle\ &expand-tab<Tab>:set\ et! &Tab\.\ en\ espaces\ on/off<Tab>:set\ et!
menutrans Toggle\ &auto-indent<Tab>:set\ ai! Indentation\ &auto\.\ on/off<Tab>:set\ ai!
menutrans Toggle\ &C-indenting<Tab>:set\ cin! Indent\.\ langage\ &C\ on/off<Tab>:set\ cin!
menutrans Toggle\ Line\ &Wrapping<Tab>:set\ wrap! &Retour\ à\ la\ ligne\ on/off<Tab>:set\ wrap!
menutrans Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! Retour\ sur\ &mot\ on/off<Tab>:set\ lbr!
menutrans Toggle\ Tab\ &Expanding<Tab>:set\ et! &Tab\.\ en\ espaces\ on/off<Tab>:set\ et!
menutrans Toggle\ &Auto\ Indenting<Tab>:set\ ai! Indentation\ &auto\.\ on/off<Tab>:set\ ai!
menutrans Toggle\ &C-Style\ Indenting<Tab>:set\ cin! Indent\.\ langage\ &C\ on/off<Tab>:set\ cin!
" -SEP2-
menutrans &Shiftwidth Largeur\ des\ in&dentations
menutrans Soft\ &Tabstop &Pseudo-tabulations
@@ -126,7 +129,9 @@ let g:menutrans_fileformat_dialog = "Choisissez le format dans lequel
let g:menutrans_fileformat_choices = " &Unix \n &Dos \n &Mac \n &Annuler "
menutrans C&olor\ Scheme &Jeu\ de\ couleurs
menutrans Show\ C&olor\ Schemes\ in\ Menu Afficher\ les\ &jeux\ de\ couleurs
menutrans &Keymap &Type\ de\ clavier
menutrans Show\ &Keymaps\ in\ Menu Afficher\ les\ &types\ de\ clavier
menutrans None (aucun)
menutrans Select\ Fo&nt\.\.\. Sélectionner\ &police\.\.\.
@@ -146,16 +151,17 @@ menutrans To\ &Previous\ error<Tab>[s
menutrans Suggest\ &Corrections<Tab>z= Suggérer\ &correction<Tab>z=
menutrans &Repeat\ correction<Tab>:spellrepall &Reporter\ la\ correction<Tab>:spellrepall
an 40.335.205 &Tools.&Spelling.Français\ (fr) :set spl=fr spell<CR>
menutrans Set\ language\ to\ "en" Anglais
menutrans Set\ language\ to\ "en_au" Anglais\ (en_au)
menutrans Set\ language\ to\ "en_ca" Anglais\ (en_ca)
menutrans Set\ language\ to\ "en_gb" Anglais\ (en_gb)
menutrans Set\ language\ to\ "en_nz" Anglais\ (en_nz)
menutrans Set\ language\ to\ "en_us" Anglais\ (en_us)
an 40.335.205 &Tools.&Spelling.Dictionnaire\ &français\ (fr) :set spl=fr spell<CR>
menutrans Set\ language\ to\ "en" Dictionnaire\ &anglais\ (en)
menutrans Set\ language\ to\ "en_au" Dictionnaire\ anglais\ (en_au)
menutrans Set\ language\ to\ "en_ca" Dictionnaire\ anglais\ (en_ca)
menutrans Set\ language\ to\ "en_gb" Dictionnaire\ anglais\ (en_gb)
menutrans Set\ language\ to\ "en_nz" Dictionnaire\ anglais\ (en_nz)
menutrans Set\ language\ to\ "en_us" Dictionnaire\ anglais\ (en_us)
menutrans &Find\ More\ Languages &Trouver\ d'autres\ langues
let g:menutrans_set_lang_to = "Dictionnaire "
menutrans &Folding &Replis
@@ -211,6 +217,7 @@ menutrans &Convert\ to\ HEX<Tab>:%!xxd Convertir\ en\ he&xa<Tab>:%!xxd
menutrans Conve&rt\ back<Tab>:%!xxd\ -r Décon&vertir<Tab>:%!xxd\ -r
menutrans Se&T\ Compiler &Type\ de\ compilateur
menutrans Show\ Compiler\ Se&ttings\ in\ Menu &Afficher\ les\ compilateurs
menutrans &Buffers &Tampons
@@ -268,10 +275,15 @@ menutrans &Delete &Effacer
" -SEP2-
menutrans Select\ Blockwise Sélectionner\ &bloc
menutrans Select\ &Word Sélectionner\ &mot
menutrans Select\ &Sentence Sélectionner\ &phrase
menutrans Select\ Pa&ragraph Sélectionner\ pa&ragraphe
menutrans Select\ &Line Sélectionner\ &ligne
menutrans Select\ &Block Sélectionner\ &bloc
menutrans Select\ &All Sélectionner\ &tout
let g:menutrans_spell_change_ARG_to = 'Remplacer\ "%s"\ par'
let g:menutrans_spell_add_ARG_to_word_list = 'Ajouter\ "%s"\ au\ dictionnaire'
let g:menutrans_spell_ignore_ARG = 'Ignorer\ "%s"'
" ToolBar
@@ -459,7 +471,7 @@ menutrans XXD\ hex\ dump Sortie\ hexa\.\ de\ xxd
menutrans XFree86\ Config Config\.\ XFree86
" The End Of The Syntax Menu
menutrans &Show\ filetypes\ in\ menu &Afficher\ tout\ le\ menu
menutrans &Show\ file\ types\ in\ menu &Afficher\ tout\ le\ menu
" -SEP1-
menutrans Set\ '&syntax'\ only Changer\ '&syntax'\ seulement
menutrans Set\ '&filetype'\ too Changer\ '&filetype'\ aussi

View File

@@ -1,6 +1,6 @@
" Vim plugin for showing matching parens
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Apr 07
" Last Change: 2021 Apr 08
" Exit quickly when:
" - this plugin was already loaded (or disabled)
@@ -110,7 +110,7 @@ func s:Highlight_Matching_Pair()
" We match "escape" for special items, such as lispEscapeSpecial, and
" match "symbol" for lispBarSymbol.
let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' .
\ '''v:val =~? "string\\|character\\|singlequote\\|escape\\symbol\\|comment"''))'
\ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|symbol\\|comment"''))'
" If executing the expression determines that the cursor is currently in
" one of the syntax types, then we want searchpairpos() to find the pair
" within those syntax types (i.e., not skip). Otherwise, the cursor is

View File

@@ -110,10 +110,6 @@ if s:line1 =~# "^#!"
elseif s:name =~# 'lua'
set ft=lua
" Perl 6
elseif s:name =~# 'perl6'
set ft=perl6
" Perl
elseif s:name =~# 'perl'
set ft=perl
@@ -130,6 +126,10 @@ if s:line1 =~# "^#!"
elseif s:name =~# '^groovy\>'
set ft=groovy
" Raku
elseif s:name =~# 'raku'
set ft=raku
" Ruby
elseif s:name =~# 'ruby'
set ft=ruby

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: generic configure file
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2005 Jun 20
" Last Change: 2021 May 01
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
@@ -10,8 +10,8 @@ endif
syn keyword confTodo contained TODO FIXME XXX
" Avoid matching "text#text", used in /etc/disktab and /etc/gettytab
syn match confComment "^#.*" contains=confTodo
syn match confComment "\s#.*"ms=s+1 contains=confTodo
syn match confComment "^#.*" contains=confTodo,@Spell
syn match confComment "\s#.*"ms=s+1 contains=confTodo,@Spell
syn region confString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline
syn region confString start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline

View File

@@ -0,0 +1,58 @@
" Vim syntax file
" Language: Free Pascal Makefile Definition Files
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Apr 23
if exists("b:current_syntax")
finish
endif
runtime! syntax/make.vim
" NOTE: using start-of-line anchored syn-match groups is simpler than other
" alternatives when interacting with the sourced make.vim syntax groups
" Sections
syn region fpcmakeSection matchgroup=fpcmakeSectionDelimiter start="^\s*\[" end="]" contains=fpcmakeSectionName
syn keyword fpcmakeSectionName contained clean compiler default dist install
syn keyword fpcmakeSectionName contained lib package prerules require rules
syn keyword fpcmakeSectionName contained shared target
" [clean]
syn match fpcmakeRule "^\s*\(units\|files\)\>"
" [compiler]
syn match fpcmakeRule "^\s*\(options\|version\|unitdir\|librarydir\|objectdir\)\>"
syn match fpcmakeRule "^\s*\(targetdir\|sourcedir\|unittargetdir\|includedir\)\>"
" [default]
syn match fpcmakeRule "^\s*\(cpu\|dir\|fpcdir\|rule\|target\)\>"
" [dist]
syn match fpcmakeRule "^\s*\(destdir\|zipname\|ziptarget\)\>"
" [install]
syn match fpcmakeRule "^\s*\(basedir\|datadir\|fpcpackage\|files\|prefix\)\>"
syn match fpcmakeRule "^\s*\(units\)\>"
" [package]
syn match fpcmakeRule "^\s*\(name\|version\|main\)\>"
" [requires]
syn match fpcmakeRule "^\s*\(fpcmake\|packages\|libc\|nortl\|unitdir\)\>"
syn match fpcmakeRule "^\s*\(packagedir\|tools\)\>"
" [shared]
syn match fpcmakeRule "^\s*\(build\|libname\|libversion\|libunits\)\>"
" [target]
syn match fpcmakeRule "^\s*\(dirs\|exampledirs\|examples\|loaders\|programs\)\>"
syn match fpcmakeRule "^\s*\(rsts\|units\)\>"
" Comments
syn keyword fpcmakeTodo TODO FIXME XXX contained
syn match fpcmakeComment "#.*" contains=fpcmakeTodo,@Spell
" Default highlighting
hi def link fpcmakeSectionDelimiter Delimiter
hi def link fpcmakeSectionName Type
hi def link fpcmakeComment Comment
hi def link fpcmakeTodo Todo
hi def link fpcmakeRule Identifier
let b:current_syntax = "fpcmake"
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Syntax for Gprof Output
" Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
" Last Change: 2013 Jun 09
" Last Change: 2021 Apr 08
" Quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -28,7 +28,7 @@ syn match gprofCallGraphTitle "Call graph (explanation follows)"
syn region gprofCallGraphHeader
\ start="^granularity: each sample hit covers.*"
\ end="^\s*index % time\s\+self\s\+children\s\+called\s\+name$"
syn match gprofCallGraphFunction "\s\+\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\["
syn match gprofCallGraphFunction "\<\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\["
syn match gprofCallGraphSeparator "^-\+$"
syn region gprofCallGraphTrailer
\ start="This table describes the call tree of the program"
@@ -41,7 +41,7 @@ syn region gprofIndex
syn match gprofIndexFunctionTitle "^Index by function name$"
syn match gprofNumbers "^\s\+[0-9 ./+]\+"
syn match gprofNumbers "^\s*[0-9 ./+]\+"
syn match gprofFunctionIndex "\[\d\+\]"
syn match gprofSpecial "<\(spontaneous\|cycle \d\+\)>"

File diff suppressed because one or more lines are too long

177
runtime/syntax/m3build.vim Normal file
View File

@@ -0,0 +1,177 @@
" Vim syntax file
" Language: Modula-3 Makefile
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 April 15
if exists("b:current_syntax")
finish
endif
runtime! syntax/m3quake.vim
" Identifiers
syn match m3buildPredefinedVariable "\<\%(TARGET\|OS_TYPE\|BUILD_DIR\|PKG_USE\|WDROOT\)\>"
" Build Procedures {{{1
" Generated from cm3/m3-sys/cm3/src/M3Build.m3
syn keyword m3buildProcedure HasCBackend
" (* packages & locations *)
syn keyword m3buildProcedure Pkg
syn keyword m3buildProcedure override
syn keyword m3buildProcedure path_of
syn keyword m3buildProcedure pkg_subdir
" (* names *)
syn keyword m3buildProcedure program_name
syn keyword m3buildProcedure library_name
" (* calls in the generated .M3EXPORT files *)
syn keyword m3buildProcedure _define_lib
syn keyword m3buildProcedure _define_pgm
syn keyword m3buildProcedure _import_template
syn keyword m3buildProcedure _import_m3lib
syn keyword m3buildProcedure _import_otherlib
syn keyword m3buildProcedure _map_add_interface
syn keyword m3buildProcedure _map_add_generic_interface
syn keyword m3buildProcedure _map_add_module
syn keyword m3buildProcedure _map_add_generic_module
syn keyword m3buildProcedure _map_add_c
syn keyword m3buildProcedure _map_add_h
syn keyword m3buildProcedure _map_add_s
" (* compiler options *)
syn keyword m3buildProcedure m3_debug
syn keyword m3buildProcedure m3_optimize
syn keyword m3buildProcedure build_shared
syn keyword m3buildProcedure build_standalone
" (* derived files *)
syn keyword m3buildProcedure m3_compile_only
syn keyword m3buildProcedure m3_finish_up
" (* predefined system libraries *)
syn keyword m3buildProcedure import_sys_lib
" (* options *)
syn keyword m3buildProcedure m3_option
syn keyword m3buildProcedure remove_m3_option
" (* deleting *)
syn keyword m3buildProcedure deriveds
" (* imports *)
syn keyword m3buildProcedure include_dir
syn keyword m3buildProcedure include_pkg
syn keyword m3buildProcedure import
syn keyword m3buildProcedure import_version
syn keyword m3buildProcedure import_obj
syn keyword m3buildProcedure import_lib
" (* objects *)
syn keyword m3buildProcedure pgm_object
" (* sources *)
syn keyword m3buildProcedure source
syn keyword m3buildProcedure pgm_source
syn keyword m3buildProcedure interface
syn keyword m3buildProcedure Interface
syn keyword m3buildProcedure implementation
syn keyword m3buildProcedure module
syn keyword m3buildProcedure Module
syn keyword m3buildProcedure h_source
syn keyword m3buildProcedure c_source
syn keyword m3buildProcedure s_source
syn keyword m3buildProcedure ship_source
" (* generics *)
syn keyword m3buildProcedure generic_interface
syn keyword m3buildProcedure Generic_interface
syn keyword m3buildProcedure generic_implementation
syn keyword m3buildProcedure Generic_implementation
syn keyword m3buildProcedure generic_module
syn keyword m3buildProcedure Generic_module
syn keyword m3buildProcedure build_generic_intf
syn keyword m3buildProcedure build_generic_impl
" (* derived sources *)
syn keyword m3buildProcedure derived_interface
syn keyword m3buildProcedure derived_implementation
syn keyword m3buildProcedure derived_c
syn keyword m3buildProcedure derived_h
" (* hiding/exporting *)
syn keyword m3buildProcedure hide_interface
syn keyword m3buildProcedure hide_generic_interface
syn keyword m3buildProcedure hide_generic_implementation
syn keyword m3buildProcedure export_interface
syn keyword m3buildProcedure export_generic_interface
syn keyword m3buildProcedure export_generic_implementation
" (* templates *)
syn keyword m3buildProcedure template
" (* library building *)
syn keyword m3buildProcedure library
syn keyword m3buildProcedure Library
" (* program building *)
syn keyword m3buildProcedure program
syn keyword m3buildProcedure Program
syn keyword m3buildProcedure c_program
syn keyword m3buildProcedure C_program
" (* man pages *)
syn keyword m3buildProcedure manPage
syn keyword m3buildProcedure ManPage
" (* emacs *)
syn keyword m3buildProcedure Gnuemacs
syn keyword m3buildProcedure CompiledGnuemacs
" (* "-find" support *)
syn keyword m3buildProcedure find_unit
syn keyword m3buildProcedure enum_units
" (* export functions *)
syn keyword m3buildProcedure install_sources
syn keyword m3buildProcedure install_derived
syn keyword m3buildProcedure install_derived_link
syn keyword m3buildProcedure install_derived_symbolic_link
syn keyword m3buildProcedure install_derived_hard_link
syn keyword m3buildProcedure install_link_to_derived
syn keyword m3buildProcedure install_symbolic_link_to_derived
syn keyword m3buildProcedure install_hard_link_to_derived
syn keyword m3buildProcedure install_symbolic_link
syn keyword m3buildProcedure install_file
" (* installation functions *)
syn keyword m3buildProcedure BindExport
syn keyword m3buildProcedure BinExport
syn keyword m3buildProcedure LibdExport
syn keyword m3buildProcedure LibExport
syn keyword m3buildProcedure EmacsdExport
syn keyword m3buildProcedure EmacsExport
syn keyword m3buildProcedure DocdExport
syn keyword m3buildProcedure DocExport
syn keyword m3buildProcedure MandExport
syn keyword m3buildProcedure ManExport
syn keyword m3buildProcedure HtmlExport
syn keyword m3buildProcedure RootExport
syn keyword m3buildProcedure RootdExport
" (* misc *)
syn keyword m3buildProcedure gen_m3exports
syn keyword m3buildProcedure generate_tfile
syn keyword m3buildProcedure delete_file
syn keyword m3buildProcedure link_file
syn keyword m3buildProcedure symbolic_link_file
syn keyword m3buildProcedure hard_link_file
" }}}
hi def link m3buildPredefinedVariable Identifier
hi def link m3buildProcedure Function
let b:current_syntax = "m3build"
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@@ -0,0 +1,74 @@
" Vim syntax file
" Language: Modula-3 Quake
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 April 15
if exists("b:current_syntax")
finish
endif
" Keywords
syn keyword m3quakeKeyword else end foreach if in is local or proc readonly
syn keyword m3quakeKeyword return
" Builtin procedures {{{
" Generated from m3-sys/m3quake/src/QMachine.m3
syn keyword m3quakeProcedure arglist cp_if defined empty equal error escape
syn keyword m3quakeProcedure exec cm3_exec file format include make_dir
syn keyword m3quakeProcedure normalize path stale try_exec try_cm3_exec
syn keyword m3quakeProcedure unlink_file write datetime date datestamp
syn keyword m3quakeProcedure TRACE_INSTR eval_func hostname
syn keyword m3quakeProcedure pushd popd cd getwd
syn keyword m3quakeProcedure quake
syn keyword m3quakeProcedure q_exec q_exec_put q_exec_get
syn keyword m3quakeProcedure fs_exists fs_readable fs_writable fs_executable
syn keyword m3quakeProcedure fs_isdir fs_isfile fs_contents fs_putfile
syn keyword m3quakeProcedure fs_mkdir fs_touch fs_lsdirs fs_lsfiles fs_rmdir
syn keyword m3quakeProcedure fs_rmfile fs_rmrec fs_cp
syn keyword m3quakeProcedure pn_valid pn_decompose pn_compose pn_absolute
syn keyword m3quakeProcedure pn_prefix pn_last pn_base pn_lastbase pn_lastext
syn keyword m3quakeProcedure pn_join pn_join2 pn_replace_ext pn_parent
syn keyword m3quakeProcedure pn_current
syn keyword m3quakeProcedure len
syn keyword m3quakeProcedure split sub skipl skipr squeeze compress pos
syn keyword m3quakeProcedure tcontains bool encode decode subst_chars
syn keyword m3quakeProcedure del_chars subst subst_env add_prefix add_suffix
" }}}
" Identifiers
syn match m3quakeEnvVariable "$\h\w\+"
" Operators
syn match m3quakeOperator "&"
syn match m3quakeOperator "\<\%(contains\|not\|and\|or\)\>"
" Strings
syn match m3quakeEscape "\\[\\nrtbf"]" contained display
syn region m3quakeString start=+"+ end=+"+ contains=m3quakeEscape
" Comments
syn keyword m3quakeTodo TODO FIXME XXX contained
syn region m3quakeComment start="%" end="$" contains=m3quakeTodo,@Spell
syn region m3quakeComment start="/\*" end="\*/" contains=m3quakeTodo,@Spell
" Default highlighting
hi def link m3quakeCommand Statement
hi def link m3quakeComment Comment
hi def link m3quakeEnvVariable Identifier
hi def link m3quakeEscape Special
hi def link m3quakeKeyword Keyword
hi def link m3quakeOperator Operator
hi def link m3quakeProcedure Function
hi def link m3quakeString String
hi def link m3quakeTodo Todo
let b:current_syntax = "m3quake"
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@@ -1,59 +1,96 @@
" Vim syntax file
" Language: Modula-3
" Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se>
" Last Change: 2001 May 10
" Language: Modula-3
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se>
" Last Change: 2021 Apr 08
" Basic things only...
" Based on the modula 2 syntax file
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" Modula-3 is case-sensitive
" syn case ignore
" Modula-3 keywords
syn keyword modula3Keyword ABS ADDRES ADR ADRSIZE AND ANY
syn keyword modula3Keyword ARRAY AS BITS BITSIZE BOOLEAN BRANDED BY BYTESIZE
syn keyword modula3Keyword CARDINAL CASE CEILING CHAR CONST DEC DEFINITION
syn keyword modula3Keyword DISPOSE DIV
syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION
syn keyword modula3Keyword EXIT EXPORTS EXTENDED FALSE FINALLY FIRST FLOAT
syn keyword modula3Keyword FLOOR FROM GENERIC IMPORT
syn keyword modula3Keyword IN INC INTEGER ISTYPE LAST LOCK
syn keyword modula3Keyword LONGREAL LOOPHOLE MAX METHOD MIN MOD MUTEX
syn keyword modula3Keyword NARROW NEW NIL NOT NULL NUMBER OF OR ORD RAISE
syn keyword modula3Keyword RAISES READONLY REAL RECORD REF REFANY
syn keyword modula3Keyword RETURN ROOT
syn keyword modula3Keyword ROUND SET SUBARRAY TEXT TRUE TRUNC TRY TYPE
syn keyword modula3Keyword TYPECASE TYPECODE UNSAFE UNTRACED VAL VALUE VAR WITH
syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST DEFINITION
syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION EXIT EXPORTS FINALLY
syn keyword modula3Keyword FROM GENERIC IMPORT LOCK METHOD OF RAISE RAISES
syn keyword modula3Keyword READONLY RECORD REF RETURN SET TRY TYPE TYPECASE
syn keyword modula3Keyword UNSAFE VALUE VAR WITH
syn match modula3keyword "\<UNTRACED\>"
" Special keywords, block delimiters etc
syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN
syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL
syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP
" Comments
syn region modula3Comment start="(\*" end="\*)"
" Reserved identifiers
syn keyword modula3Identifier ABS ADR ADRSIZE BITSIZE BYTESIZE CEILING DEC
syn keyword modula3Identifier DISPOSE FIRST FLOAT FLOOR INC ISTYPE LAST
syn keyword modula3Identifier LOOPHOLE MAX MIN NARROW NEW NUMBER ORD ROUND
syn keyword modula3Identifier SUBARRAY TRUNC TYPECODE VAL
" Predefined types
syn keyword modula3Type ADDRESS BOOLEAN CARDINAL CHAR EXTENDED INTEGER
syn keyword modula3Type LONGCARD LONGINT LONGREAL MUTEX NULL REAL REFANY TEXT
syn keyword modula3Type WIDECHAR
syn match modula3Type "\<\%(UNTRACED\s\+\)\=ROOT\>"
" Operators
syn keyword modulaOperator DIV MOD IN AND OR NOT
if exists("modula3_operators")
syn match modula3Operator "\^"
syn match modula3Operator "+\|-\|\*\|/\|&"
" TODO: need to exclude = in procedure definitions
syn match modula3Operator "<=\|<\|>=\|>\|:\@<!=\|#"
endif
" Booleans
syn keyword modula3Boolean TRUE FALSE
" Nil
syn keyword modula3Nil NIL
" Integers
syn match modula3Integer "\<\d\+L\=\>"
syn match modula3Integer "\<\d\d\=_\x\+L\=\>"
" Reals
syn match modula3Real "\c\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>"
" String escape sequences
syn match modula3Escape "\\['"ntrf]" contained display
syn match modula3Escape "\\\o\{3}" contained display
syn match modula3Escape "\\\\" contained display
" Characters
syn match modula3Character "'\%([^']\|\\.\|\\\o\{3}\)'" contains=modula3Escape
" Strings
syn region modula3String start=+"+ end=+"+
syn region modula3String start=+'+ end=+'+
syn region modula3String start=+"+ end=+"+ contains=modula3Escape
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
" Pragmas
syn region modula3Pragma start="<\*" end="\*>"
" The default methods for highlighting. Can be overridden later
hi def link modula3Keyword Statement
hi def link modula3Block PreProc
" Comments
syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell
" Default highlighting
hi def link modula3Block Statement
hi def link modula3Boolean Boolean
hi def link modula3Character Character
hi def link modula3Comment Comment
hi def link modula3String String
hi def link modula3Escape Special
hi def link modula3Identifier Keyword
hi def link modula3Integer Number
hi def link modula3Keyword Statement
hi def link modula3Nil Constant
hi def link modula3Operator Operator
hi def link modula3Pragma PreProc
hi def link modula3Real Float
hi def link modula3String String
hi def link modula3Type Type
let b:current_syntax = "modula3"
"I prefer to use this...
"set ai
"vim: ts=8
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -1,16 +1,16 @@
" Vim syntax file
" Language: Pascal
" Version: 2.8
" Last Change: 2004/10/17 17:47:30
" Maintainer: Xavier Crégut <xavier.cregut@enseeiht.fr>
" Previous Maintainer: Mario Eusebio <bio@dq.fct.unl.pt>
" Language: Pascal
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainers: Xavier Crégut <xavier.cregut@enseeiht.fr>
" Mario Eusebio <bio@dq.fct.unl.pt>
" Last Change: 2021 Apr 23
" Contributors: Tim Chase <tchase@csc.com>,
" Stas Grabois <stsi@vtrails.com>,
" Mazen NEIFER <mazen.neifer.2001@supaero.fr>,
" Klaus Hast <Klaus.Hast@arcor.net>,
" Austin Ziegler <austin@halostatue.ca>,
" Markus Koenig <markus@stber-koenig.de>
" Stas Grabois <stsi@vtrails.com>,
" Mazen NEIFER <mazen.neifer.2001@supaero.fr>,
" Klaus Hast <Klaus.Hast@arcor.net>,
" Austin Ziegler <austin@halostatue.ca>,
" Markus Koenig <markus@stber-koenig.de>
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -25,10 +25,10 @@ syn keyword pascalBoolean true false
syn keyword pascalConditional if else then
syn keyword pascalConstant nil maxint
syn keyword pascalLabel case goto label
syn keyword pascalOperator and div downto in mod not of or packed with
syn keyword pascalOperator and div downto in mod not of or packed
syn keyword pascalRepeat do for do repeat while to until
syn keyword pascalStatement procedure function
syn keyword pascalStatement program begin end const var type
syn keyword pascalStatement program begin end const var type with
syn keyword pascalStruct record
syn keyword pascalType array boolean char integer file pointer real set
syn keyword pascalType string text variant
@@ -40,12 +40,12 @@ syn keyword pascalTodo contained TODO FIXME XXX DEBUG NOTE
" 20010723az: When wanted, highlight the trailing whitespace -- this is
" based on c_space_errors; to enable, use "pascal_space_errors".
if exists("pascal_space_errors")
if !exists("pascal_no_trail_space_error")
syn match pascalSpaceError "\s\+$"
endif
if !exists("pascal_no_tab_space_error")
syn match pascalSpaceError " \+\t"me=e-1
endif
if !exists("pascal_no_trail_space_error")
syn match pascalSpaceError "\s\+$"
endif
if !exists("pascal_no_tab_space_error")
syn match pascalSpaceError " \+\t"me=e-1
endif
endif
@@ -98,9 +98,24 @@ if exists("pascal_symbol_operator")
endif
syn match pascalNumber "-\=\<\d\+\>"
if !exists("pascal_traditional")
syn match pascalHexNumber "\$\x\+\>"
endif
if exists("pascal_fpc")
syn match pascalOctNumber "&\o\+\>"
syn match pascalBinNumber "%[01]\+\>"
endif
if exists("pascal_gpc")
syn match pascalExtendedNumber "\%([2-9]\|[12]\d\|3[0-6]\)#[[:alnum:]]\+\>"
endif
syn match pascalFloat "-\=\<\d\+\.\d\+\>"
syn match pascalFloat "-\=\<\d\+\.\d\+[eE]-\=\d\+\>"
syn match pascalHexNumber "\$[0-9a-fA-F]\+\>"
if !exists("pascal_traditional")
" allow leading zeros
syn match pascalControlCharacter "#\%([01]\=\d\=\d\|2[0-4]\d\|25[0-5]\)\>"
endif
if exists("pascal_no_tabs")
syn match pascalShowTab "\t"
@@ -142,7 +157,7 @@ if !exists("pascal_traditional")
syn keyword pascalStatement interface unit uses
syn keyword pascalModifier absolute assembler external far forward inline
syn keyword pascalModifier interrupt near virtual
syn keyword pascalAcces private public
syn keyword pascalAccess private public strict
syn keyword pascalStruct object
syn keyword pascalOperator shl shr xor
@@ -157,6 +172,7 @@ if !exists("pascal_traditional")
syn keyword pascalType Single Double Extended Comp
syn keyword pascalType PChar
syn keyword pascalPredefined self
if !exists ("pascal_fpc")
syn keyword pascalPredefined Result
@@ -166,11 +182,11 @@ if !exists("pascal_traditional")
syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError
syn keyword pascalStatement fail otherwise operator
syn keyword pascalDirective popstack
syn keyword pascalPredefined self
syn keyword pascalType ShortString AnsiString WideString
endif
if exists("pascal_gpc")
syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError
syn keyword pascalType SmallInt
syn keyword pascalType AnsiChar
syn keyword pascalType PAnsiChar
@@ -178,6 +194,8 @@ if !exists("pascal_traditional")
if exists("pascal_delphi")
syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError
syn region pascalDocumentation start="///" end="$" contains=pascalTodo,pascalSpaceError
syn region pascalDocumentation start="{!" end="}" contains=pascalTodo,pascalSpaceError
syn keyword pascalType SmallInt Int64
syn keyword pascalType Real48 Currency
syn keyword pascalType AnsiChar WideChar
@@ -192,11 +210,11 @@ if !exists("pascal_traditional")
syn keyword pascalStatement initialization finalization uses exports
syn keyword pascalStatement property out resourcestring threadvar
syn keyword pascalModifier contains
syn keyword pascalModifier overridden reintroduce abstract
syn keyword pascalModifier overridden reintroduce abstract sealed
syn keyword pascalModifier override export dynamic name message
syn keyword pascalModifier dispid index stored default nodefault readonly
syn keyword pascalModifier writeonly implements overload requires resident
syn keyword pascalAcces protected published automated
syn keyword pascalAccess protected published automated
syn keyword pascalDirective register pascal cvar cdecl stdcall safecall
syn keyword pascalOperator as is
endif
@@ -319,37 +337,43 @@ endif
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link pascalAcces pascalStatement
hi def link pascalAccess pascalStatement
hi def link pascalBoolean Boolean
hi def link pascalComment Comment
hi def link pascalConditional Conditional
hi def link pascalDocumentation Comment
hi def link pascalConditional Conditional
hi def link pascalConstant Constant
hi def link pascalDelimiter Identifier
hi def link pascalDirective pascalStatement
hi def link pascalException Exception
hi def link pascalFloat Float
hi def link pascalControlCharacter Character
hi def link pascalDelimiter Identifier
hi def link pascalDirective pascalStatement
hi def link pascalException Exception
hi def link pascalFloat Float
hi def link pascalFunction Function
hi def link pascalLabel Label
hi def link pascalLabel Label
hi def link pascalMatrixDelimiter Identifier
hi def link pascalModifier Type
hi def link pascalNumber Number
hi def link pascalExtendedNumber Number
hi def link pascalBinNumber pascalNumber
hi def link pascalHexNumber pascalNumber
hi def link pascalOctNumber pascalNumber
hi def link pascalOperator Operator
hi def link pascalPredefined pascalStatement
hi def link pascalPredefined pascalStatement
hi def link pascalPreProc PreProc
hi def link pascalRepeat Repeat
hi def link pascalSpaceError Error
hi def link pascalStatement Statement
hi def link pascalSpaceError Error
hi def link pascalStatement Statement
hi def link pascalString String
hi def link pascalStringEscape Special
hi def link pascalStringEscape Special
hi def link pascalStringEscapeGPC Special
hi def link pascalStringError Error
hi def link pascalStringError Error
hi def link pascalStruct pascalStatement
hi def link pascalSymbolOperator pascalOperator
hi def link pascalTodo Todo
hi def link pascalType Type
hi def link pascalUnclassified pascalStatement
hi def link pascalTodo Todo
hi def link pascalType Type
hi def link pascalUnclassified pascalStatement
" hi def link pascalAsm Assembler
hi def link pascalError Error
hi def link pascalError Error
hi def link pascalAsmKey pascalStatement
hi def link pascalShowTab Error
@@ -357,4 +381,4 @@ hi def link pascalShowTab Error
let b:current_syntax = "pascal"
" vim: ts=8 sw=2
" vim: nowrap sw=2 sts=2 ts=8 noet:

File diff suppressed because it is too large Load Diff

83
runtime/syntax/psl.vim Normal file
View File

@@ -0,0 +1,83 @@
" Vim syntax file
" Language: Property Specification Language (PSL)
" Maintainer: Daniel Kho <daniel.kho@logik.haus>
" Last Changed: 2021 Apr 17 by Daniel Kho
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" Read in VHDL syntax files
runtime! syntax/vhdl.vim
unlet b:current_syntax
let s:cpo_save = &cpo
set cpo&vim
" case is not significant
syn case ignore
" Add ! character to keyword recognition.
setlocal iskeyword+=33
" PSL keywords
syn keyword pslOperator A AF AG AX
syn keyword pslOperator E EF EG EX
syn keyword pslOperator F G U W X X!
syn keyword pslOperator abort always assert assume async_abort
syn keyword pslOperator before before! before!_ before_ bit bitvector boolean
syn keyword pslOperator clock const countones cover
syn keyword pslOperator default
syn keyword pslOperator ended eventually!
syn keyword pslOperator fairness fell for forall
syn keyword pslOperator hdltype
syn keyword pslOperator in inf inherit isunknown
syn keyword pslOperator mutable
syn keyword pslOperator never next next! next_a next_a! next_e next_e! next_event next_event! next_event_a next_event_a! next_event_e next_event_e! nondet nondet_vector numeric
syn keyword pslOperator onehot onehot0
syn keyword pslOperator property prev
syn keyword pslOperator report restrict restrict! rose
syn keyword pslOperator sequence stable string strong sync_abort
syn keyword pslOperator union until until! until!_ until_
syn keyword pslOperator vmode vpkg vprop vunit
syn keyword pslOperator within
"" Common keywords with VHDL
"syn keyword pslOperator and is not or to
" PSL operators
syn match pslOperator "=>\||=>"
syn match pslOperator "<-\|->"
syn match pslOperator "@"
"Modify the following as needed. The trade-off is performance versus functionality.
syn sync minlines=600
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link pslSpecial Special
hi def link pslStatement Statement
hi def link pslCharacter Character
hi def link pslString String
hi def link pslVector Number
hi def link pslBoolean Number
hi def link pslTodo Todo
hi def link pslFixme Fixme
hi def link pslComment Comment
hi def link pslNumber Number
hi def link pslTime Number
hi def link pslType Type
hi def link pslOperator Operator
hi def link pslError Error
hi def link pslAttribute Special
hi def link pslPreProc PreProc
let b:current_syntax = "psl"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: ts=8

View File

@@ -5,7 +5,7 @@
" Tom Payne <tom@tompayne.org>
" Contributor: Johannes Ranke <jranke@uni-bremen.de>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Wed Aug 01, 2018 10:10PM
" Last Change: Sun Mar 28, 2021 01:47PM
" Filenames: *.R *.r *.Rhistory *.Rt
"
" NOTE: The highlighting of R functions might be defined in
@@ -53,12 +53,12 @@ syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"
syn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent
syn keyword rTodoKeyw BUG FIXME NOTE TODO contained
syn match rTodoInfo "(\zs.\{-}\ze)" contained
syn match rComment contains=@Spell,rCommentTodo,rTodoParen,rOBlock "#.*"
syn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*"
" Roxygen
if g:r_syntax_hl_roxygen
" A roxygen block can start at the beginning of a file (first version) and
" after a blank line (second version). It ends when a line that does not
" after a blank line (second version). It ends when a line appears that does not
" contain a roxygen comment. In the following comments, any line containing
" a roxygen comment marker (one or two hash signs # followed by a single
" quote ' and preceded only by whitespace) is called a roxygen line. A
@@ -71,6 +71,12 @@ if g:r_syntax_hl_roxygen
syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
" A title as part of a block is always at the beginning of the block, i.e.
" either at the start of a file or after a completely empty line.
syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
syn match rOTitleTag contained "@title"
" When a roxygen block has a title and additional content, the title
" consists of one or more roxygen lines (as little as possible are matched),
" followed either by an empty roxygen line
@@ -87,16 +93,15 @@ if g:r_syntax_hl_roxygen
syn region rOBlockNoTitle start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
syn region rOBlockNoTitle start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
" A title as part of a block is always at the beginning of the block, i.e.
" either at the start of a file or after a completely empty line.
syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
syn match rOTitleTag contained "@title"
syn match rOCommentKey "^\s*#\{1,2}'" contained
syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold
syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold
" rOTag list generated from the lists in
" R6 classes may contain roxygen lines independent of roxygen blocks
syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
" rOTag list originally generated from the lists that were available in
" https://github.com/klutometis/roxygen/R/rd.R and
" https://github.com/klutometis/roxygen/R/namespace.R
" using s/^ \([A-Za-z0-9]*\) = .*/ syn match rOTag contained "@\1"/
@@ -155,7 +160,10 @@ if g:r_syntax_hl_roxygen
syn match rOTag contained "@S3method"
syn match rOTag contained "@useDynLib"
" other
syn match rOTag contained "@eval"
syn match rOTag contained "@include"
syn match rOTag contained "@includeRmd"
syn match rOTag contained "@order"
endif
@@ -186,6 +194,11 @@ syn match rSpecial display contained "\\U\x\{1,8}"
syn match rSpecial display contained "\\u{\x\{1,4}}"
syn match rSpecial display contained "\\U{\x\{1,8}}"
" Raw string
syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend
syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend
syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend
" Statement
syn keyword rStatement break next return
syn keyword rConditional if else
@@ -354,6 +367,8 @@ hi def link rOperator Operator
hi def link rOpError Error
hi def link rParenError Error
hi def link rPreProc PreProc
hi def link rRawString String
hi def link rRawStrDelim Delimiter
hi def link rRepeat Repeat
hi def link rSpecial SpecialChar
hi def link rStatement Statement
@@ -366,6 +381,7 @@ if g:r_syntax_hl_roxygen
hi def link rOTitleBlock Title
hi def link rOBlock Comment
hi def link rOBlockNoTitle Comment
hi def link rOR6Block Comment
hi def link rOTitle Title
hi def link rOCommentKey Comment
hi def link rOExamples SpecialComment

1971
runtime/syntax/raku.vim Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,10 +2,9 @@
" Language: Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc )
" Maintainer: Magnus Woldrich <m@japh.se>
" URL: http://github.com/trapd00r/vim-syntax-ratpoison
" Last Change: 2011 Apr 11
" Last Change: 2021-04-12 13:46:04
" Previous Maintainer: Doug Kearns <djkea2@gus.gscit.monash.edu.au>
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
@@ -38,7 +37,7 @@ syn keyword ratpoisonCommandArg select set setenv sfdump shrink contained
syn keyword ratpoisonCommandArg source sselect startup_message time title contained
syn keyword ratpoisonCommandArg tmpwm unalias undefinekey undo unmanage contained
syn keyword ratpoisonCommandArg unsetenv verbexec version vsplit warp contained
syn keyword ratpoisonCommandArg windows contained
syn keyword ratpoisonCommandArg windows framefmt infofmt contained
syn match ratpoisonGravityArg "\<\(n\|north\)\>" contained
syn match ratpoisonGravityArg "\<\(nw\|northwest\)\>" contained
@@ -92,19 +91,27 @@ syn keyword ratpoisonSetArg barpadding contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg bgcolor
syn keyword ratpoisonSetArg border contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg fgcolor
syn keyword ratpoisonSetArg framefmt contained nextgroup=ratpoisonWinFmtArg
syn keyword ratpoisonSetArg fwcolor
syn keyword ratpoisonSetArg framemsgwait contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg gravity contained nextgroup=ratpoisonGravityArg
syn keyword ratpoisonSetArg bwcolor
syn keyword ratpoisonSetArg gravity contained nextgroup=ratpoisonGravityArg
syn keyword ratpoisonSetArg historysize
syn keyword ratpoisonSetArg historycompaction
syn keyword ratpoisonSetArg historyexpansion
syn keyword ratpoisonSetArg infofmt contained nextgroup=ratpoisonWinFmtArg
syn keyword ratpoisonSetArg topkmap
syn keyword ratpoisonSetArg barinpadding
syn keyword ratpoisonSetArg font
syn keyword ratpoisonSetArg framesels
syn keyword ratpoisonSetArg maxundos
syn keyword ratpoisonSetArg inputwidth contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg maxsizegravity contained nextgroup=ratpoisonGravityArg
syn keyword ratpoisonSetArg msgwait contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg padding contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg resizeunit contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg startup_message
syn keyword ratpoisonSetArg transgravity contained nextgroup=ratpoisonGravityArg
syn keyword ratpoisonSetArg waitcursor contained nextgroup=ratpoisonNumberArg
syn keyword ratpoisonSetArg winfmt contained nextgroup=ratpoisonWinFmtArg
@@ -113,6 +120,8 @@ syn keyword ratpoisonSetArg winliststyle contained nextgroup=ratpoisonWinListArg
syn keyword ratpoisonSetArg winname contained nextgroup=ratpoisonWinNameArg
syn match ratpoisonWinFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite
syn match ratpoisonFrameFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite
syn match ratpoisonInfoFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite
syn match ratpoisonWinListArg "\<\(row\|column\)\>" contained
@@ -126,6 +135,7 @@ syn match ratpoisonDefCommand "^\s*defbgcolor\s*"
syn match ratpoisonDefCommand "^\s*defborder\s*" nextgroup=ratpoisonNumberArg
syn match ratpoisonDefCommand "^\s*deffgcolor\s*"
syn match ratpoisonDefCommand "^\s*deffont\s*"
syn match ratpoisonDefCommand "^\s*defframefmt\s*" nextgroup=ratpoisonWinFmtArg
syn match ratpoisonDefCommand "^\s*defframesels\s*"
syn match ratpoisonDefCommand "^\s*definputwidth\s*" nextgroup=ratpoisonNumberArg
syn match ratpoisonDefCommand "^\s*defmaxsizegravity\s*" nextgroup=ratpoisonGravityArg
@@ -243,14 +253,13 @@ syn match ratpoisonVoidCommand "^\s*\zsversion\ze\s*$"
syn match ratpoisonVoidCommand "^\s*\zsvsplit\ze\s*$"
syn match ratpoisonVoidCommand "^\s*\zswindows\ze\s*$"
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link ratpoisonBooleanArg Boolean
hi def link ratpoisonCommandArg Keyword
hi def link ratpoisonComment Comment
hi def link ratpoisonDefCommand Identifier
hi def link ratpoisonFrameFmtArg Special
hi def link ratpoisonGravityArg Constant
hi def link ratpoisonInfoFmtArg Special
hi def link ratpoisonKeySeqArg Special
hi def link ratpoisonNumberArg Number
hi def link ratpoisonSetArg Keyword
@@ -261,7 +270,6 @@ hi def link ratpoisonWinFmtArg Special
hi def link ratpoisonWinNameArg Constant
hi def link ratpoisonWinListArg Constant
let b:current_syntax = "ratpoison"
" vim: ts=8

View File

@@ -1,7 +1,7 @@
" markdown Text with R statements
" Language: markdown with R code chunks
" Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Thu Apr 18, 2019 09:17PM
" Last Change: Wed Apr 21, 2021 09:55AM
"
" For highlighting pandoc extensions to markdown like citations and TeX and
" many other advanced features like folding of markdown sections, it is
@@ -13,27 +13,45 @@ if exists("b:current_syntax")
finish
endif
" Configuration if not using pandoc syntax:
" Add syntax highlighting of YAML header
let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1)
" Add syntax highlighting of citation keys
let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1)
" Highlight the header of the chunk of R code
let g:rmd_syn_hl_chunk = get(g:, 'g:rmd_syn_hl_chunk', 0)
" Highlight the header of the chunks as R code
let g:rmd_syn_hl_chunk = get(g:, 'rmd_syn_hl_chunk', 0)
" Pandoc-syntax has more features, but it is slower.
" https://github.com/vim-pandoc/vim-pandoc-syntax
let g:pandoc#syntax#codeblocks#embeds#langs = get(g:, 'pandoc#syntax#codeblocks#embeds#langs', ['r'])
runtime syntax/pandoc.vim
if exists("b:current_syntax")
" Fix recognition of R code
syn region pandocDelimitedCodeBlock_r start=/^```{r\>.*}$/ end=/^```$/ contained containedin=pandocDelimitedCodeBlock contains=@R
" Recognize inline R code
syn region rmdrInline matchgroup=rmdInlineDelim start="`r " end="`" contains=@R containedin=pandocLaTeXRegion,yamlFlowString keepend
hi def link rmdInlineDelim Delimiter
" Fix recognition of language chunks (code adapted from pandoc, 2021-03-28)
" Knitr requires braces in the block's header
for s:lng in g:pandoc#syntax#codeblocks#embeds#langs
let s:nm = matchstr(s:lng, '^[^=]*')
exe 'syn clear pandocDelimitedCodeBlock_'.s:nm
exe 'syn clear pandocDelimitedCodeBlockinBlockQuote_'.s:nm
if g:rmd_syn_hl_chunk
exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@R'
exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=rmd'.s:nm.'ChunkDelim,@'.toupper(s:nm)
else
exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@'.toupper(s:nm)
endif
endfor
unlet s:lng
unlet s:nm
hi def link rmdInlineDelim Delimiter
hi def link rmdCodeDelim Delimiter
let b:current_syntax = "rmd"
finish
endif
" Configuration if not using pandoc syntax:
" Add syntax highlighting of YAML header
let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1)
" Add syntax highlighting of citation keys
let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1)
let s:cpo_save = &cpo
set cpo&vim
@@ -63,15 +81,17 @@ for s:type in g:rmd_fenced_languages
unlet! b:current_syntax
exe 'syn include @Rmd'.s:nm.' syntax/'.s:ft.'.vim'
if g:rmd_syn_hl_chunk
exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@Rmd'.s:nm
exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@Rmdr'
exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=rmd'.s:nm.'ChunkDelim,@Rmd'.s:nm
else
exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@Rmd'.s:nm
endif
exe 'syn region rmd'.s:nm.'Inline matchgroup=rmdInlineDelim start="`'.s:nm.' " end="`" contains=@Rmd'.s:nm.' keepend'
endfor
unlet! s:type
" Recognize inline R code
syn region rmdrInline matchgroup=rmdInlineDelim start="`r " end="`" contains=@Rmdr keepend
hi def link rmdInlineDelim Delimiter
hi def link rmdCodeDelim Delimiter

View File

@@ -33,8 +33,8 @@ syn cluster texParaGroup add=@rnoweb
" Highlighting of R code using an existing r.vim syntax file if available {{{1
syn include @rnowebR syntax/r.vim
syn region rnowebChunk matchgroup=rnowebDelimiter start="^<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend
syn match rnowebChunkReference "^<<.*>>$" contained
syn region rnowebChunk matchgroup=rnowebDelimiter start="^\s*<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend
syn match rnowebChunkReference "^\s*<<.*>>$" contained
syn region rnowebSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter end="}" contains=@rnowebR contained
" Sweave options command {{{1

View File

@@ -682,7 +682,7 @@ Not: Arama dosyan
Ders 5.3'ün iki adet kopyası olduğunu görün, özgün sürümü ve kopyası.
NOT: Bu komutu kullanarak bir dış komutun çıktısını da dosyanın içine
koyabilirsiniz. Örneğin :r :!ls yazmak ls komutunun vereceği çıktıyı
koyabilirsiniz. Örneğin :r !ls yazmak ls komutunun vereceği çıktıyı
dosyanın içinde hemen imlecin altındaki satıra koyar.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -682,7 +682,7 @@ Not: Arama dosyanın sonuna ulaştığında dosyanın başından sürecektir. Bu
Ders 5.3'ün iki adet kopyası olduğunu görün, özgün sürümü ve kopyası.
NOT: Bu komutu kullanarak bir dış komutun çıktısını da dosyanın içine
koyabilirsiniz. Örneğin :r :!ls yazmak ls komutunun vereceği çıktıyı
koyabilirsiniz. Örneğin :r !ls yazmak ls komutunun vereceği çıktıyı
dosyanın içinde hemen imlecin altındaki satıra koyar.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -39,7 +39,7 @@ version of Vim that is small and starts up quickly, see the Makefile for how
to disable the GUI and X11. If you don't have GUI libraries and/or X11, these
features will be disabled automatically.
To built Vim on Ubuntu from scratch on a clean system using git:
To build Vim on Ubuntu from scratch on a clean system using git:
Install tools required to be able to get and build Vim:
% sudo apt install git
% sudo apt install make

View File

@@ -1,64 +1,83 @@
INSTALLmac.txt - Installation of Vim on Macintosh
INSTALLmac.txt - Installation of Vim on Apple MacOS
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 CommandLineTools. If not, open a
terminal and do
MacOS Classic is no longer supported. If you really want it use Vim 6.4.
Only '/' is supported as path separator.
----------------------------------------------------------------------------
Prerequisites
----------------------------------------------------------------------------
Make sure you've installed Xcode and CommandLineTools. You can download Xcode
from the Mac App Store, for free.
To check for CommandLineTools open a terminal and do:
$ make --version
A window pops up instructing you to install the developer tools.
If not installed yet a window pops up instructing you to install the developer
tools.
If you don't have the source yet, best is to use git (which you need to
install first), see http://www.vim.org/git.php
Or you can download and unpack the Unix tar archive, see
http://www.vim.org/download.php
----------------------------------------------------------------------------
Summary
Build and install the terminal version.
----------------------------------------------------------------------------
1 MacOS X
1.1. Terminal version
1.2. X (Athena, GTK, Motif) or plain text.
MacOS Classic is no longer supported. If you really want it use Vim 6.4.
----------------------------------------------------------------------------
1 MacOS X
----------------------------------------------------------------------------
1.0 Considerations
Only '/' is supported as path separator.
1.1 Terminal version (default)
You can compile vim with the standard Unix routine:
cd .../src
You can compile vim with the standard Unix routine:
cd vim/src
make
make test
sudo make install
You need at least Xcode 1.5.
If you get an error "glibtool: command not found" search on stackoverflow for
mac-osx-where-can-i-download-glibtool.
To overrule the architecture do this before running make:
With Homebrew, run:
./configure --with-mac-arch=intel
or
./configure --with-mac-arch=ppc
brew install libtool
To build libtool from source:
1. Download the source code from https://www.gnu.org/software/libtool/.
2. Run these commands from the root of the source code directory:
./configure --program-prefix=g
make
sudo make install
1.2 X-Windows
----------------------------------------------------------------------------
Build and install the GUI version with X-Windows
----------------------------------------------------------------------------
You must explicitly tell configure to use a GUI.
First, install XQuartz, which you can download from https://www.xquartz.org.
cd .../src
./configure --disable-darwin --enable-gui=gtk2
make; make install
To tell configure to use a GUI you can edit the Makefile and uncomment these
two lines (remove the # at the start of the line):
NOTE: The following GUI options are possible (but might not work):
no (for terminal only), motif, athena, nextaw
gtk, gtk2, gnome, gnome2,
CONF_OPT_GUI = --enable-gui=athena
CONF_OPT_DARWIN = --disable-darwin
NOTE: You need to first install XFree86 and XDarwin.
Please visit http://www.XDarwin.org
Do "make distclean" to start with a clean slate.
Then build as with the terminal version above.
Instead of "athena" you can try "gtk2" but you probably need to install GTK
first.
----------------------------------------------------------------------------
Notes
----------------------------------------------------------------------------
Mac-specific configure options are explained in the Makefile:
--disable-darwin
--with-mac-arch
------------------------------------------------------

View File

@@ -489,7 +489,7 @@ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
#VIMRCLOC = somewhere
#VIMRUNTIMEDIR = somewhere
CFLAGS = -c /W3 /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
CFLAGS = -c /W3 /GF /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
$(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
$(NBDEBUG_DEFS) $(XPM_DEFS) \
$(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)

1
src/auto/configure vendored
View File

@@ -12071,6 +12071,7 @@ $as_echo "yes" >&6; }
else
as_fn_error $? "NOT FOUND!
You need to install a terminal library; for example ncurses.
On Linux that would be the libncurses-dev package.
Or specify the name of the library with --with-tlib." "$LINENO" 5
fi
rm -f core conftest.err conftest.$ac_objext \

View File

@@ -125,13 +125,33 @@ blob_get(blob_T *b, int idx)
}
/*
* Store one byte "c" in blob "b" at "idx".
* Store one byte "byte" in blob "blob" at "idx".
* Caller must make sure that "idx" is valid.
*/
void
blob_set(blob_T *b, int idx, char_u c)
blob_set(blob_T *blob, int idx, int byte)
{
((char_u*)b->bv_ga.ga_data)[idx] = c;
((char_u*)blob->bv_ga.ga_data)[idx] = byte;
}
/*
* Store one byte "byte" in blob "blob" at "idx".
* Append one byte if needed.
*/
void
blob_set_append(blob_T *blob, int idx, int byte)
{
garray_T *gap = &blob->bv_ga;
// Allow for appending a byte. Setting a byte beyond
// the end is an error otherwise.
if (idx < gap->ga_len
|| (idx == gap->ga_len && ga_grow(gap, 1) == OK))
{
blob_set(blob, idx, byte);
if (idx == gap->ga_len)
++gap->ga_len;
}
}
/*
@@ -336,6 +356,58 @@ blob_slice_or_index(
return OK;
}
/*
* Check if "n1"- is a valid index for a blobl with length "bloblen".
*/
int
check_blob_index(long bloblen, varnumber_T n1, int quiet)
{
if (n1 < 0 || n1 > bloblen)
{
if (!quiet)
semsg(_(e_blobidx), n1);
return FAIL;
}
return OK;
}
/*
* Check if "n1"-"n2" is a valid range for a blob with length "bloblen".
*/
int
check_blob_range(long bloblen, varnumber_T n1, varnumber_T n2, int quiet)
{
if (n2 < 0 || n2 >= bloblen || n2 < n1)
{
if (!quiet)
semsg(_(e_blobidx), n2);
return FAIL;
}
return OK;
}
/*
* Set bytes "n1" to "n2" (inclusive) in "dest" to the value of "src".
* Caller must make sure "src" is a blob.
* Returns FAIL if the number of bytes does not match.
*/
int
blob_set_range(blob_T *dest, long n1, long n2, typval_T *src)
{
int il, ir;
if (n2 - n1 + 1 != blob_len(src->vval.v_blob))
{
emsg(_("E972: Blob value does not have the right number of bytes"));
return FAIL;
}
ir = 0;
for (il = n1; il <= n2; il++)
blob_set(dest, il, blob_get(src->vval.v_blob, ir++));
return OK;
}
/*
* "remove({blob})" function
*/
@@ -372,7 +444,7 @@ blob_remove(typval_T *argvars, typval_T *rettv)
{
blob_T *blob;
// Remove range of items, return list with values.
// Remove range of items, return blob with values.
end = (long)tv_get_number_chk(&argvars[2], &error);
if (error)
return;
@@ -400,7 +472,8 @@ blob_remove(typval_T *argvars, typval_T *rettv)
rettv->v_type = VAR_BLOB;
rettv->vval.v_blob = blob;
mch_memmove(p + idx, p + end + 1, (size_t)(len - end));
if (len - end - 1 > 0)
mch_memmove(p + idx, p + end + 1, (size_t)(len - end - 1));
b->bv_ga.ga_len -= end - idx + 1;
}
}

View File

@@ -3482,6 +3482,7 @@ if test "x$olibs" = "x$LIBS"; then
AC_MSG_RESULT(yes),
AC_MSG_ERROR([NOT FOUND!
You need to install a terminal library; for example ncurses.
On Linux that would be the libncurses-dev package.
Or specify the name of the library with --with-tlib.]))
fi

View File

@@ -1538,6 +1538,9 @@ win_line(
if (area_attr != 0)
{
char_attr = hl_combine_attr(line_attr, area_attr);
if (!highlight_match)
// let search highlight show in Visual area if possible
char_attr = hl_combine_attr(search_attr, char_attr);
# ifdef FEAT_SYN_HL
char_attr = hl_combine_attr(syntax_attr, char_attr);
# endif

View File

@@ -93,6 +93,7 @@ update_screen(int type_arg)
int gui_cursor_row = 0;
#endif
int no_update = FALSE;
int save_pum_will_redraw = pum_will_redraw;
// Don't do anything if the screen structures are (not yet) valid.
if (!screen_valid(TRUE))
@@ -276,6 +277,11 @@ update_screen(int type_arg)
}
#endif
if (pum_redraw_in_same_position())
// Avoid flicker if the popup menu is going to be redrawn in the same
// position.
pum_will_redraw = TRUE;
// Go from top to bottom through the windows, redrawing the ones that need
// it.
#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
@@ -321,7 +327,9 @@ update_screen(int type_arg)
#if defined(FEAT_SEARCH_EXTRA)
end_search_hl();
#endif
// May need to redraw the popup menu.
pum_will_redraw = save_pum_will_redraw;
pum_may_redraw();
// Reset b_mod_set flags. Going through all windows is probably faster
@@ -3002,6 +3010,13 @@ redraw_after_callback(int call_update_screen)
// keep the command line if possible
update_screen(VALID_NO_UPDATE);
setcursor();
if (msg_scrolled == 0)
{
// don't want a hit-enter prompt when something else is displayed
msg_didany = FALSE;
need_wait_return = FALSE;
}
}
cursor_on();
#ifdef FEAT_GUI

View File

@@ -323,8 +323,8 @@ EXTERN char e_non_empty_string_required[]
INIT(= N_("E1142: Non-empty string required"));
EXTERN char e_empty_expression_str[]
INIT(= N_("E1143: Empty expression: \"%s\""));
EXTERN char e_command_not_followed_by_white_space_str[]
INIT(= N_("E1144: Command is not followed by white space: %s"));
EXTERN char e_command_str_not_followed_by_white_space_str[]
INIT(= N_("E1144: Command \"%s\" 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[]
@@ -399,3 +399,13 @@ EXTERN char e_variable_arguments_type_must_be_list_str[]
INIT(= N_("E1180: Variable arguments type must be a list: %s"));
EXTERN char e_cannot_use_underscore_here[]
INIT(= N_("E1181: Cannot use an underscore here"));
EXTERN char e_blob_required[]
INIT(= N_("E1182: Blob required"));
EXTERN char e_cannot_use_range_with_assignment_operator_str[]
INIT(= N_("E1183: Cannot use a range with an assignment operator: %s"));
EXTERN char e_blob_not_set[]
INIT(= N_("E1184: Blob not set"));
EXTERN char e_cannot_nest_redir[]
INIT(= N_("E1185: Cannot nest :redir"));
EXTERN char e_missing_redir_end[]
INIT(= N_("E1185: Missing :redir END"));

View File

@@ -51,6 +51,7 @@ static int eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg);
static int eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg);
static int eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg);
static int eval6(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int want_string);
static int eval7t(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int want_string);
static int eval7(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int want_string);
static int eval7_leader(typval_T *rettv, int numeric_only, char_u *start_leader, char_u **end_leaderp);
@@ -392,7 +393,7 @@ skip_expr(char_u **pp, evalarg_T *evalarg)
}
/*
* Skip over an expression at "*pp".
* Skip over an expression at "*arg".
* If in Vim9 script and line breaks are encountered, the lines are
* concatenated. "evalarg->eval_tofree" will be set accordingly.
* "arg" is advanced to just after the expression.
@@ -450,7 +451,7 @@ skip_expr_concatenate(
// Line breaks encountered, concatenate all the lines.
*((char_u **)gap->ga_data) = *start;
p = ga_concat_strings(gap, "");
p = ga_concat_strings(gap, " ");
// free the lines only when using getsourceline()
if (evalarg->eval_cookie != NULL)
@@ -1175,12 +1176,8 @@ get_lval(
lp->ll_n1 = (long)tv_get_number(&var1);
clear_tv(&var1);
if (lp->ll_n1 < 0
|| lp->ll_n1 > bloblen
|| (lp->ll_range && lp->ll_n1 == bloblen))
if (check_blob_index(bloblen, lp->ll_n1, quiet) == FAIL)
{
if (!quiet)
semsg(_(e_blobidx), lp->ll_n1);
clear_tv(&var2);
return NULL;
}
@@ -1188,14 +1185,9 @@ get_lval(
{
lp->ll_n2 = (long)tv_get_number(&var2);
clear_tv(&var2);
if (lp->ll_n2 < 0
|| lp->ll_n2 >= bloblen
|| lp->ll_n2 < lp->ll_n1)
{
if (!quiet)
semsg(_(e_blobidx), lp->ll_n2);
if (check_blob_range(bloblen, lp->ll_n1, lp->ll_n2, quiet)
== FAIL)
return NULL;
}
}
lp->ll_blob = lp->ll_tv->vval.v_blob;
lp->ll_tv = NULL;
@@ -1319,50 +1311,26 @@ set_var_lval(
if (lp->ll_range && rettv->v_type == VAR_BLOB)
{
int il, ir;
if (lp->ll_empty2)
lp->ll_n2 = blob_len(lp->ll_blob) - 1;
if (lp->ll_n2 - lp->ll_n1 + 1 != blob_len(rettv->vval.v_blob))
{
emsg(_("E972: Blob value does not have the right number of bytes"));
if (blob_set_range(lp->ll_blob, lp->ll_n1, lp->ll_n2,
rettv) == FAIL)
return;
}
if (lp->ll_empty2)
lp->ll_n2 = blob_len(lp->ll_blob);
ir = 0;
for (il = lp->ll_n1; il <= lp->ll_n2; il++)
blob_set(lp->ll_blob, il,
blob_get(rettv->vval.v_blob, ir++));
}
else
{
val = (int)tv_get_number_chk(rettv, &error);
if (!error)
{
garray_T *gap = &lp->ll_blob->bv_ga;
// Allow for appending a byte. Setting a byte beyond
// the end is an error otherwise.
if (lp->ll_n1 < gap->ga_len
|| (lp->ll_n1 == gap->ga_len
&& ga_grow(&lp->ll_blob->bv_ga, 1) == OK))
{
blob_set(lp->ll_blob, lp->ll_n1, val);
if (lp->ll_n1 == gap->ga_len)
++gap->ga_len;
}
// error for invalid range was already given in get_lval()
}
blob_set_append(lp->ll_blob, lp->ll_n1, val);
}
}
else if (op != NULL && *op != '=')
{
typval_T tv;
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_(e_cannot_mod));
*endp = cc;
@@ -1401,7 +1369,8 @@ set_var_lval(
listitem_T *ll_li = lp->ll_li;
int ll_n1 = lp->ll_n1;
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_("E996: Cannot lock a range"));
return;
@@ -1460,7 +1429,8 @@ set_var_lval(
/*
* Assign to a List or Dictionary item.
*/
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_("E996: Cannot lock a list or dict"));
return;
@@ -1786,7 +1756,9 @@ next_for_item(void *fi_void, char_u *arg)
{
forinfo_T *fi = (forinfo_T *)fi_void;
int result;
int flag = in_vim9script() ? ASSIGN_DECL : 0;
int flag = ASSIGN_FOR_LOOP | (in_vim9script()
? (ASSIGN_FINAL | ASSIGN_DECL | ASSIGN_NO_MEMBER_TYPE)
: 0);
listitem_T *item;
if (fi->fi_blob != NULL)
@@ -2087,6 +2059,7 @@ eval_func(
/*
* Get the next line source line without advancing. But do skip over comment
* lines.
* Only called for Vim9 script.
*/
static char_u *
getline_peek_skip_comments(evalarg_T *evalarg)
@@ -2111,7 +2084,8 @@ getline_peek_skip_comments(evalarg_T *evalarg)
* If inside Vim9 script, "arg" points to the end of a line (ignoring a #
* comment) and there is a next line, return the next line (skipping blanks)
* and set "getnext".
* Otherwise just return "arg" unmodified and set "getnext" to FALSE.
* Otherwise return the next non-white at or after "arg" and set "getnext" to
* FALSE.
* "arg" must point somewhere inside a line, not at the start.
*/
char_u *
@@ -2123,7 +2097,7 @@ eval_next_non_blank(char_u *arg, evalarg_T *evalarg, int *getnext)
if (in_vim9script()
&& evalarg != NULL
&& (evalarg->eval_cookie != NULL || evalarg->eval_cctx != NULL)
&& (*p == NUL || (VIM_ISWHITE(p[-1]) && vim9_comment_start(p))))
&& (*p == NUL || (vim9_comment_start(p) && VIM_ISWHITE(p[-1]))))
{
char_u *next;
@@ -2143,6 +2117,7 @@ eval_next_non_blank(char_u *arg, evalarg_T *evalarg, int *getnext)
/*
* To be called after eval_next_non_blank() sets "getnext" to TRUE.
* Only called for Vim9 script.
*/
char_u *
eval_next_line(evalarg_T *evalarg)
@@ -2158,7 +2133,16 @@ eval_next_line(evalarg_T *evalarg)
++evalarg->eval_break_count;
if (gap->ga_itemsize > 0 && ga_grow(gap, 1) == OK)
{
// Going to concatenate the lines after parsing.
char_u *p = skipwhite(line);
// Going to concatenate the lines after parsing. For an empty or
// comment line use an empty string.
if (*p == NUL || vim9_comment_start(p))
{
vim_free(line);
line = vim_strsave((char_u *)"");
}
((char_u **)gap->ga_data)[gap->ga_len] = line;
++gap->ga_len;
}
@@ -2883,12 +2867,15 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
// "." is only string concatenation when scriptversion is 1
// "+=", "-=" and "..=" are assignments
// "++" and "--" on the next line are a separate command.
p = eval_next_non_blank(*arg, evalarg, &getnext);
op = *p;
concat = op == '.' && (*(p + 1) == '.' || current_sctx.sc_version < 2);
if ((op != '+' && op != '-' && !concat) || p[1] == '='
|| (p[1] == '.' && p[2] == '='))
break;
if (getnext && (op == '+' || op == '-') && p[0] == p[1])
break;
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
oplen = (concat && p[1] == '.') ? 2 : 1;
@@ -3097,7 +3084,7 @@ eval6(
/*
* Get the first variable.
*/
if (eval7(arg, rettv, evalarg, want_string) == FAIL)
if (eval7t(arg, rettv, evalarg, want_string) == FAIL)
return FAIL;
/*
@@ -3170,7 +3157,7 @@ eval6(
return FAIL;
}
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
if (eval7(arg, &var2, evalarg, FALSE) == FAIL)
if (eval7t(arg, &var2, evalarg, FALSE) == FAIL)
return FAIL;
if (evaluate)
@@ -3260,6 +3247,86 @@ eval6(
return OK;
}
/*
* Handle a type cast before a base level expression.
* "arg" must point to the first non-white of the expression.
* "arg" is advanced to just after the recognized expression.
* Return OK or FAIL.
*/
static int
eval7t(
char_u **arg,
typval_T *rettv,
evalarg_T *evalarg,
int want_string) // after "." operator
{
type_T *want_type = NULL;
garray_T type_list; // list of pointers to allocated types
int res;
int evaluate = evalarg == NULL ? 0
: (evalarg->eval_flags & EVAL_EVALUATE);
// Recognize <type> in Vim9 script only.
if (in_vim9script() && **arg == '<' && eval_isnamec1((*arg)[1]))
{
++*arg;
ga_init2(&type_list, sizeof(type_T *), 10);
want_type = parse_type(arg, &type_list, TRUE);
if (want_type == NULL && (evaluate || **arg != '>'))
{
clear_type_list(&type_list);
return FAIL;
}
if (**arg != '>')
{
if (*skipwhite(*arg) == '>')
semsg(_(e_no_white_space_allowed_before_str_str), ">", *arg);
else
emsg(_(e_missing_gt));
clear_type_list(&type_list);
return FAIL;
}
++*arg;
*arg = skipwhite_and_linebreak(*arg, evalarg);
}
res = eval7(arg, rettv, evalarg, want_string);
if (want_type != NULL && evaluate)
{
if (res == OK)
{
type_T *actual = typval2type(rettv, get_copyID(), &type_list, TRUE);
if (!equal_type(want_type, actual))
{
if (want_type == &t_bool && actual != &t_bool
&& (actual->tt_flags & TTFLAG_BOOL_OK))
{
int n = tv2bool(rettv);
// can use "0" and "1" for boolean in some places
clear_tv(rettv);
rettv->v_type = VAR_BOOL;
rettv->vval.v_number = n ? VVAL_TRUE : VVAL_FALSE;
}
else
{
where_T where;
where.wt_index = 0;
where.wt_variable = TRUE;
res = check_type(want_type, actual, TRUE, where);
}
}
}
clear_type_list(&type_list);
}
return res;
}
int
eval_leader(char_u **arg, int vim9)
{

View File

@@ -1315,7 +1315,8 @@ ex_let_one(
// ":let $VAR = expr": Set environment variable.
if (*arg == '$')
{
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_("E996: Cannot lock an environment variable"));
return NULL;
@@ -1365,9 +1366,11 @@ ex_let_one(
// ":let &option = expr": Set option value.
// ":let &l:option = expr": Set local option value.
// ":let &g:option = expr": Set global option value.
// ":for &ts in range(8)": Set option value for for loop
else if (*arg == '&')
{
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_(e_const_option));
return NULL;
@@ -1466,7 +1469,8 @@ ex_let_one(
// ":let @r = expr": Set register contents.
else if (*arg == '@')
{
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_("E996: Cannot lock a register"));
return NULL;
@@ -1519,7 +1523,7 @@ ex_let_one(
else
{
set_var_lval(&lv, p, tv, copy, flags, op, var_idx);
arg_end = p;
arg_end = lv.ll_name_end;
}
}
clear_lval(&lv);
@@ -2658,6 +2662,12 @@ eval_variable(
if (tv->vval.v_list != NULL)
++tv->vval.v_list->lv_refcount;
}
else if (tv->v_type == VAR_BLOB && tv->vval.v_blob == NULL)
{
tv->vval.v_blob = blob_alloc();
if (tv->vval.v_blob != NULL)
++tv->vval.v_blob->bv_refcount;
}
copy_tv(tv, rettv);
}
}
@@ -3158,7 +3168,7 @@ set_var_const(
type_T *type,
typval_T *tv_arg,
int copy, // make copy of value in "tv"
int flags, // ASSIGN_CONST, ASSIGN_FINAL, etc.
int flags_arg, // ASSIGN_CONST, ASSIGN_FINAL, etc.
int var_idx) // index for ":let [a, b] = list"
{
typval_T *tv = tv_arg;
@@ -3169,6 +3179,7 @@ set_var_const(
int is_script_local;
int vim9script = in_vim9script();
int var_in_vim9script;
int flags = flags_arg;
ht = find_var_ht(name, &varname);
if (ht == NULL || *varname == NUL)
@@ -3187,6 +3198,11 @@ set_var_const(
vim9_declare_error(name);
goto failed;
}
if ((flags & ASSIGN_FOR_LOOP) && name[1] == ':'
&& vim_strchr((char_u *)"gwbt", name[0]) != NULL)
// Do not make g:var, w:var, b:var or t:var final.
flags &= ~ASSIGN_FINAL;
var_in_vim9script = is_script_local && current_script_is_vim9();
if (var_in_vim9script && name[0] == '_' && name[1] == NUL)
{
@@ -3220,7 +3236,8 @@ set_var_const(
// Item already exists. Allowed to replace when reloading.
if ((di->di_flags & DI_FLAGS_RELOAD) == 0)
{
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
if ((flags & (ASSIGN_CONST | ASSIGN_FINAL))
&& (flags & ASSIGN_FOR_LOOP) == 0)
{
emsg(_(e_cannot_mod));
goto failed;
@@ -3255,7 +3272,8 @@ set_var_const(
// A Vim9 script-local variable is also present in sn_all_vars and
// sn_var_vals. It may set "type" from "tv".
if (var_in_vim9script)
update_vim9_script_var(FALSE, di, flags, tv, &type);
update_vim9_script_var(FALSE, di, flags, tv, &type,
(flags & ASSIGN_NO_MEMBER_TYPE) == 0);
}
// existing variable, need to clear the value
@@ -3353,7 +3371,8 @@ set_var_const(
// A Vim9 script-local variable is also added to sn_all_vars and
// sn_var_vals. It may set "type" from "tv".
if (var_in_vim9script)
update_vim9_script_var(TRUE, di, flags, tv, &type);
update_vim9_script_var(TRUE, di, flags, tv, &type,
(flags & ASSIGN_NO_MEMBER_TYPE) == 0);
}
if (copy || tv->v_type == VAR_NUMBER || tv->v_type == VAR_FLOAT)
@@ -3759,6 +3778,27 @@ static garray_T redir_ga; // only valid when redir_lval is not NULL
static char_u *redir_endp = NULL;
static char_u *redir_varname = NULL;
int
alloc_redir_lval(void)
{
redir_lval = ALLOC_CLEAR_ONE(lval_T);
if (redir_lval == NULL)
return FAIL;
return OK;
}
void
clear_redir_lval(void)
{
VIM_CLEAR(redir_lval);
}
void
init_redir_ga(void)
{
ga_init2(&redir_ga, (int)sizeof(char), 500);
}
/*
* Start recording command output to a variable
* When "append" is TRUE append to an existing variable.
@@ -3782,15 +3822,14 @@ var_redir_start(char_u *name, int append)
if (redir_varname == NULL)
return FAIL;
redir_lval = ALLOC_CLEAR_ONE(lval_T);
if (redir_lval == NULL)
if (alloc_redir_lval() == FAIL)
{
var_redir_stop();
return FAIL;
}
// The output is stored in growarray "redir_ga" until redirection ends.
ga_init2(&redir_ga, (int)sizeof(char), 500);
init_redir_ga();
// Parse the variable name (can be a dict or list entry).
redir_endp = get_lval(redir_varname, NULL, redir_lval, FALSE, FALSE, 0,
@@ -3902,6 +3941,20 @@ var_redir_stop(void)
VIM_CLEAR(redir_varname);
}
/*
* Get the collected redirected text and clear redir_ga.
*/
char_u *
get_clear_redir_ga(void)
{
char_u *res;
ga_append(&redir_ga, NUL); // Append the trailing NUL.
res = redir_ga.ga_data;
redir_ga.ga_data = NULL;
return res;
}
/*
* "gettabvar()" function
*/

View File

@@ -17,20 +17,20 @@ static const unsigned short cmdidxs1[26] =
/* j */ 209,
/* k */ 211,
/* l */ 216,
/* m */ 278,
/* n */ 296,
/* o */ 316,
/* p */ 328,
/* q */ 367,
/* r */ 370,
/* s */ 390,
/* t */ 459,
/* u */ 504,
/* v */ 515,
/* w */ 536,
/* x */ 550,
/* y */ 560,
/* z */ 561
/* m */ 279,
/* n */ 297,
/* o */ 317,
/* p */ 329,
/* q */ 368,
/* r */ 371,
/* s */ 391,
/* t */ 460,
/* u */ 505,
/* v */ 516,
/* w */ 537,
/* x */ 551,
/* y */ 561,
/* z */ 562
};
/*
@@ -52,7 +52,7 @@ static const unsigned char cmdidxs2[26][26] =
/* i */ { 1, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 5, 6, 0, 0, 0, 0, 0, 14, 0, 16, 0, 0, 0, 0, 0 },
/* j */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
/* k */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* l */ { 3, 11, 15, 19, 20, 24, 27, 32, 0, 0, 0, 34, 37, 40, 44, 50, 0, 52, 61, 53, 54, 58, 60, 0, 0, 0 },
/* l */ { 3, 11, 15, 19, 20, 25, 28, 33, 0, 0, 0, 35, 38, 41, 45, 51, 0, 53, 62, 54, 55, 59, 61, 0, 0, 0 },
/* m */ { 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 },
/* n */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 10, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0 },
/* o */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 0, 9, 0, 11, 0, 0, 0 },
@@ -69,4 +69,4 @@ static const unsigned char cmdidxs2[26][26] =
/* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
static const int command_count = 576;
static const int command_count = 579;

View File

@@ -3603,6 +3603,29 @@ typedef struct {
int do_ic; // ignore case flag
} subflags_T;
/*
* Skip over the "sub" part in :s/pat/sub/ where "delimiter" is the separating
* character.
*/
char_u *
skip_substitute(char_u *start, int delimiter)
{
char_u *p = start;
while (p[0])
{
if (p[0] == delimiter) // end delimiter found
{
*p++ = NUL; // replace it with a NUL
break;
}
if (p[0] == '\\' && p[1] != 0) // skip escaped characters
++p;
MB_PTR_ADV(p);
}
return p;
}
/*
* Perform a substitution from line eap->line1 to line eap->line2 using the
* command pointed to by eap->arg which should be of the form:
@@ -3704,18 +3727,7 @@ ex_substitute(exarg_T *eap)
* Vim we want to use '\n' to find/substitute a NUL.
*/
sub = cmd; // remember the start of the substitution
while (cmd[0])
{
if (cmd[0] == delimiter) // end delimiter found
{
*cmd++ = NUL; // replace it with a NUL
break;
}
if (cmd[0] == '\\' && cmd[1] != 0) // skip escaped characters
++cmd;
MB_PTR_ADV(cmd);
}
cmd = skip_substitute(cmd, delimiter);
if (!eap->skip)
{
@@ -5276,14 +5288,16 @@ skip_vimgrep_pat(char_u *p, char_u **s, int *flags)
++p;
// Find the flags
while (*p == 'g' || *p == 'j')
while (*p == 'g' || *p == 'j' || *p == 'f')
{
if (flags != NULL)
{
if (*p == 'g')
*flags |= VGR_GLOBAL;
else
else if (*p == 'j')
*flags |= VGR_NOJUMP;
else
*flags |= VGR_FUZZY;
}
++p;
}

View File

@@ -830,6 +830,9 @@ EXCMD(CMD_let, "let", ex_let,
EXCMD(CMD_lexpr, "lexpr", ex_cexpr,
EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG,
ADDR_NONE),
EXCMD(CMD_legacy, "legacy", ex_wrongmodifier,
EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
ADDR_NONE),
EXCMD(CMD_lfile, "lfile", ex_cfile,
EX_TRLBAR|EX_FILE1|EX_BANG,
ADDR_NONE),
@@ -1843,6 +1846,14 @@ EXCMD(CMD_X, "X", ex_X,
EX_TRLBAR,
ADDR_NONE),
// Commands that are recognized only in find_ex_command().
EXCMD(CMD_increment, "++", ex_incdec,
EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
ADDR_NONE),
EXCMD(CMD_decrement, "--", ex_incdec,
EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
ADDR_NONE),
#undef EXCMD
#ifndef DO_DECLARE_EXCMD

View File

@@ -287,6 +287,7 @@ static void ex_tag_cmd(exarg_T *eap, char_u *name);
# define ex_endwhile ex_ni
# define ex_eval ex_ni
# define ex_execute ex_ni
# define ex_incdec ex_ni
# define ex_finally ex_ni
# define ex_finish ex_ni
# define ex_function ex_ni
@@ -1174,7 +1175,8 @@ do_cmdline(
*/
while (!((got_int
#ifdef FEAT_EVAL
|| (did_emsg && force_abort) || did_throw
|| (did_emsg && (force_abort || in_vim9script()))
|| did_throw
#endif
)
#ifdef FEAT_EVAL
@@ -1208,8 +1210,10 @@ do_cmdline(
/*
* If a sourced file or executed function ran to its end, report the
* unclosed conditional.
* In Vim9 script do not give a second error, executing aborts after
* the first one.
*/
if (!got_int && !did_throw
if (!got_int && !did_throw && !(did_emsg && in_vim9script())
&& ((getline_equal(fgetline, cookie, getsourceline)
&& !source_finished(fgetline, cookie))
|| (getline_equal(fgetline, cookie, get_func_line)
@@ -2925,6 +2929,17 @@ parse_command_modifiers(
cmod->cmod_flags |= CMOD_LOCKMARKS;
continue;
}
if (checkforcmd_noparen(&eap->cmd, "legacy", 3))
{
if (ends_excmd2(p, eap->cmd))
{
*errormsg =
_(e_vim9cmd_must_be_followed_by_command);
return FAIL;
}
cmod->cmod_flags |= CMOD_LEGACY;
continue;
}
if (!checkforcmd_noparen(&eap->cmd, "leftabove", 5))
break;
@@ -3429,22 +3444,25 @@ find_ex_command(
// "varname.key" is an expression.
|| (*p == '.' && ASCII_ISALPHA(p[1]))))
{
char_u *after = p;
char_u *after = eap->cmd;
// When followed by "=" or "+=" then it is an assignment.
// Skip over the whole thing, it can be:
// name.member = val
// name[a : b] = val
// name[idx] = val
// name[idx].member = val
// etc.
eap->cmdidx = CMD_eval;
++emsg_silent;
if (*after == '.')
after = skipwhite(after + 1);
if (skip_expr(&after, NULL) == OK)
{
after = skipwhite(after);
else
after = (char_u *)"";
if (*after == '=' || (*after != NUL && after[1] == '=')
if (*after == '=' || (*after != NUL && after[1] == '=')
|| (after[0] == '.' && after[1] == '.'
&& after[2] == '='))
eap->cmdidx = CMD_var;
else
eap->cmdidx = CMD_eval;
eap->cmdidx = CMD_var;
}
--emsg_silent;
return eap->cmd;
}
@@ -3480,7 +3498,8 @@ find_ex_command(
// Recognize an assignment if we recognize the variable name:
// "g:var = expr"
// "var = expr" where "var" is a variable name.
// "var = expr" where "var" is a variable name or we are skipping
// (variable declaration might have been skipped).
if (*eap->cmd == '@')
p = eap->cmd + 2;
oplen = assignment_len(skipwhite(p), &heredoc);
@@ -3490,6 +3509,7 @@ find_ex_command(
|| *eap->cmd == '&'
|| *eap->cmd == '$'
|| *eap->cmd == '@'
|| eap->skip
|| lookup(eap->cmd, p - eap->cmd, TRUE, cctx) == OK)
{
eap->cmdidx = CMD_var;
@@ -3515,6 +3535,13 @@ find_ex_command(
eap->cmdidx = CMD_eval;
return eap->cmd;
}
// Check for "++nr" and "--nr".
if (p == eap->cmd && p[0] == p[1] && (*p == '+' || *p == '-'))
{
eap->cmdidx = *p == '+' ? CMD_increment : CMD_decrement;
return eap->cmd + 2;
}
}
#endif
@@ -3649,8 +3676,11 @@ find_ex_command(
&& (eap->cmdidx < 0 ||
(cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
{
semsg(_(e_command_not_followed_by_white_space_str), eap->cmd);
char_u *cmd = vim_strnsave(eap->cmd, p - eap->cmd);
semsg(_(e_command_str_not_followed_by_white_space_str), cmd, eap->cmd);
eap->cmdidx = CMD_SIZE;
vim_free(cmd);
}
#endif

View File

@@ -3733,7 +3733,7 @@ vim_rename(char_u *from, char_u *to)
return 0;
// Strange, the second step failed. Try moving the
// file back and return failure.
mch_rename(tempname, (char *)from);
(void)mch_rename(tempname, (char *)from);
return -1;
}
// If it fails for one temp name it will most likely fail

View File

@@ -741,6 +741,10 @@ EXTERN int popup_visible INIT(= FALSE);
EXTERN int text_prop_frozen INIT(= 0);
#endif
// When set the popup menu will redraw soon using the pum_win_ values. Do not
// draw over the poup menu area to avoid flicker.
EXTERN int pum_will_redraw INIT(= FALSE);
/*
* The window layout is kept in a tree of frames. topframe points to the top
* of the tree.
@@ -1307,6 +1311,7 @@ EXTERN int wild_menu_showing INIT(= 0);
#ifdef MSWIN
EXTERN char_u toupper_tab[256]; // table for toupper()
EXTERN char_u tolower_tab[256]; // table for tolower()
EXTERN int found_register_arg INIT(= FALSE);
#endif
#ifdef FEAT_LINEBREAK
@@ -1379,6 +1384,9 @@ EXTERN char_u no_lines_msg[] INIT(= N_("--No lines in buffer--"));
EXTERN long sub_nsubs; // total number of substitutions
EXTERN linenr_T sub_nlines; // total number of lines changed
// Used when a compiled :substitute has an expression.
EXTERN struct subs_expr_S *substitute_instr INIT(= NULL);
// table to store parsed 'wildmode'
EXTERN char_u wim_flags[4];

View File

@@ -2059,7 +2059,7 @@ filter_map(typval_T *argvars, typval_T *rettv, filtermap_T filtermap)
{
// Check that map() does not change the type of the dict.
ga_init2(&type_list, sizeof(type_T *), 10);
type = typval2type(argvars, get_copyID(), &type_list);
type = typval2type(argvars, get_copyID(), &type_list, TRUE);
}
if (argvars[0].v_type == VAR_BLOB)
@@ -2223,7 +2223,7 @@ filter_map(typval_T *argvars, typval_T *rettv, filtermap_T filtermap)
if (filter_map_one(&tv, expr, filtermap, &newtv, &rem) == FAIL
|| did_emsg)
break;
if (newtv.v_type != VAR_NUMBER)
if (newtv.v_type != VAR_NUMBER && newtv.v_type != VAR_BOOL)
{
clear_tv(&newtv);
emsg(_(e_invalblob));
@@ -2412,22 +2412,33 @@ f_mapnew(typval_T *argvars, typval_T *rettv)
void
f_add(typval_T *argvars, typval_T *rettv)
{
list_T *l;
blob_T *b;
rettv->vval.v_number = 1; // Default: Failed
if (argvars[0].v_type == VAR_LIST)
{
if ((l = argvars[0].vval.v_list) != NULL
&& !value_check_lock(l->lv_lock,
(char_u *)N_("add() argument"), TRUE)
list_T *l = argvars[0].vval.v_list;
if (l == NULL)
{
if (in_vim9script())
emsg(_(e_cannot_add_to_null_list));
}
else if (!value_check_lock(l->lv_lock,
(char_u *)N_("add() argument"), TRUE)
&& list_append_tv(l, &argvars[1]) == OK)
{
copy_tv(&argvars[0], rettv);
}
}
else if (argvars[0].v_type == VAR_BLOB)
{
if ((b = argvars[0].vval.v_blob) != NULL
&& !value_check_lock(b->bv_lock,
blob_T *b = argvars[0].vval.v_blob;
if (b == NULL)
{
if (in_vim9script())
emsg(_(e_cannot_add_to_null_blob));
}
else if (!value_check_lock(b->bv_lock,
(char_u *)N_("add() argument"), TRUE))
{
int error = FALSE;
@@ -2565,7 +2576,7 @@ extend(typval_T *argvars, typval_T *rettv, char_u *arg_errmsg, int is_new)
{
// Check that map() does not change the type of the dict.
ga_init2(&type_list, sizeof(type_T *), 10);
type = typval2type(argvars, get_copyID(), &type_list);
type = typval2type(argvars, get_copyID(), &type_list, TRUE);
}
if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
@@ -2725,7 +2736,6 @@ f_insert(typval_T *argvars, typval_T *rettv)
{
long before = 0;
listitem_T *item;
list_T *l;
int error = FALSE;
if (argvars[0].v_type == VAR_BLOB)
@@ -2734,7 +2744,11 @@ f_insert(typval_T *argvars, typval_T *rettv)
char_u *p;
if (argvars[0].vval.v_blob == NULL)
{
if (in_vim9script())
emsg(_(e_cannot_add_to_null_blob));
return;
}
len = blob_len(argvars[0].vval.v_blob);
if (argvars[2].v_type != VAR_UNKNOWN)
@@ -2768,30 +2782,39 @@ f_insert(typval_T *argvars, typval_T *rettv)
}
else if (argvars[0].v_type != VAR_LIST)
semsg(_(e_listblobarg), "insert()");
else if ((l = argvars[0].vval.v_list) != NULL
&& !value_check_lock(l->lv_lock,
(char_u *)N_("insert() argument"), TRUE))
else
{
if (argvars[2].v_type != VAR_UNKNOWN)
before = (long)tv_get_number_chk(&argvars[2], &error);
if (error)
return; // type error; errmsg already given
list_T *l = argvars[0].vval.v_list;
if (before == l->lv_len)
item = NULL;
else
if (l == NULL)
{
item = list_find(l, before);
if (item == NULL)
{
semsg(_(e_listidx), before);
l = NULL;
}
if (in_vim9script())
emsg(_(e_cannot_add_to_null_list));
}
if (l != NULL)
else if (!value_check_lock(l->lv_lock,
(char_u *)N_("insert() argument"), TRUE))
{
(void)list_insert_tv(l, &argvars[1], item);
copy_tv(&argvars[0], rettv);
if (argvars[2].v_type != VAR_UNKNOWN)
before = (long)tv_get_number_chk(&argvars[2], &error);
if (error)
return; // type error; errmsg already given
if (before == l->lv_len)
item = NULL;
else
{
item = list_find(l, before);
if (item == NULL)
{
semsg(_(e_listidx), before);
l = NULL;
}
}
if (l != NULL)
{
(void)list_insert_tv(l, &argvars[1], item);
copy_tv(&argvars[0], rettv);
}
}
}
}

View File

@@ -161,6 +161,21 @@ main
break;
}
#endif
#ifdef MSWIN
// Need to find "-register" and "-unregister" before loading any libraries.
for (i = 1; i < argc; ++i)
if ((STRICMP(argv[i] + 1, "register") == 0
|| STRICMP(argv[i] + 1, "unregister") == 0)
&& (argv[i][0] == '-' || argv[i][0] == '/'))
{
found_register_arg = TRUE;
break;
}
#endif
/*
* Various initialisations shared with tests.
*/
common_init(&params);
#ifdef VIMDLL

View File

@@ -1540,10 +1540,23 @@ check_abbr(
tb[j++] = Ctrl_V; // special char needs CTRL-V
if (has_mbyte)
{
int newlen;
char_u *escaped;
// if ABBR_OFF has been added, remove it here
if (c >= ABBR_OFF)
c -= ABBR_OFF;
j += (*mb_char2bytes)(c, tb + j);
newlen = (*mb_char2bytes)(c, tb + j);
tb[j + newlen] = NUL;
// Need to escape K_SPECIAL.
escaped = vim_strsave_escape_csi(tb + j);
if (escaped != NULL)
{
newlen = (int)STRLEN(escaped);
mch_memmove(tb + j, escaped, newlen);
j += newlen;
vim_free(escaped);
}
}
else
tb[j++] = c;
@@ -2295,6 +2308,7 @@ f_mapset(typval_T *argvars, typval_T *rettv UNUSED)
int noremap;
int expr;
int silent;
int buffer;
scid_T sid;
linenr_T lnum;
mapblock_T **map_table = maphash;
@@ -2336,18 +2350,31 @@ f_mapset(typval_T *argvars, typval_T *rettv UNUSED)
silent = dict_get_number(d, (char_u *)"silent") != 0;
sid = dict_get_number(d, (char_u *)"sid");
lnum = dict_get_number(d, (char_u *)"lnum");
if (dict_get_number(d, (char_u *)"buffer"))
buffer = dict_get_number(d, (char_u *)"buffer");
nowait = dict_get_number(d, (char_u *)"nowait") != 0;
// mode from the dict is not used
if (buffer)
{
map_table = curbuf->b_maphash;
abbr_table = &curbuf->b_first_abbr;
}
nowait = dict_get_number(d, (char_u *)"nowait") != 0;
// mode from the dict is not used
// Delete any existing mapping for this lhs and mode.
arg = vim_strsave(lhs);
if (arg == NULL)
return;
if (buffer)
{
arg = alloc(STRLEN(lhs) + STRLEN("<buffer>") + 1);
if (arg == NULL)
return;
STRCPY(arg, "<buffer>");
STRCPY(arg + 8, lhs);
}
else
{
arg = vim_strsave(lhs);
if (arg == NULL)
return;
}
do_map(1, arg, mode, is_abbr);
vim_free(arg);

View File

@@ -4615,6 +4615,10 @@ makeset(FILE *fd, int opt_flags, int local_only)
if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp, p_cp))
continue;
if ((opt_flags & OPT_SKIPRTP) && (p->var == (char_u *)&p_rtp
|| p->var == (char_u *)&p_pp))
continue;
round = 2;
if (p->indir != PV_NONE)
{

View File

@@ -864,6 +864,7 @@ EXTERN unsigned ssop_flags;
# define SSOP_CURSOR 0x4000
# define SSOP_TABPAGES 0x8000
# define SSOP_TERMINAL 0x10000
# define SSOP_SKIP_RTP 0x20000
#endif
EXTERN char_u *p_sh; // 'shell'
EXTERN char_u *p_shcf; // 'shellcmdflag'

View File

@@ -34,10 +34,11 @@ static char *(p_fdo_values[]) = {"all", "block", "hor", "mark", "percent",
"undo", "jump", NULL};
#endif
#ifdef FEAT_SESSION
// Also used for 'viewoptions'!
// Also used for 'viewoptions'! Keep in sync with SSOP_ flags.
static char *(p_ssop_values[]) = {"buffers", "winpos", "resize", "winsize",
"localoptions", "options", "help", "blank", "globals", "slash", "unix",
"sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", NULL};
"sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", "skiprtp",
NULL};
#endif
// Keep in sync with SWB_ flags in option.h
static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", "vsplit", "uselast", NULL};

View File

@@ -529,6 +529,10 @@ vimLoadLib(char *name)
{
HINSTANCE dll = NULL;
// No need to load any library when registering OLE.
if (found_register_arg)
return dll;
// NOTE: Do not use mch_dirname() and mch_chdir() here, they may call
// vimLoadLib() recursively, which causes a stack overflow.
if (exe_path == NULL)
@@ -6406,13 +6410,13 @@ mch_write(
char_u *s,
int len)
{
char_u *end = s + len;
# ifdef VIMDLL
if (gui.in_use)
return;
# endif
s[len] = NUL;
if (!term_console)
{
write(1, s, (unsigned)len);
@@ -6433,10 +6437,13 @@ mch_write(
return;
}
while((ch = s[++prefix]))
while (s + ++prefix < end)
{
ch = s[prefix];
if (ch <= 0x1e && !(ch != '\n' && ch != '\r' && ch != '\b'
&& ch != '\a' && ch != '\033'))
break;
}
if (p_wd)
{

View File

@@ -40,10 +40,6 @@ static int pum_win_width;
// makes pum_visible() return FALSE even when there is a popup menu.
static int pum_pretend_not_visible = FALSE;
// When set the popup menu will redraw soon using the pum_win_ values. Do not
// draw over the poup menu area to avoid flicker.
static int pum_will_redraw = FALSE;
static int pum_set_selected(int n, int repeat);
#define PUM_DEF_HEIGHT 10
@@ -392,7 +388,7 @@ pum_under_menu(int row, int col)
&& row >= pum_row
&& row < pum_row + pum_height
&& col >= pum_col - 1
&& col < pum_col + pum_width;
&& col < pum_col + pum_width + pum_scrollbar;
}
/*
@@ -929,6 +925,8 @@ pum_set_selected(int n, int repeat UNUSED)
|| (curtab != curtab_save
&& valid_tabpage(curtab_save)))
{
int save_redr_status;
if (curtab != curtab_save && valid_tabpage(curtab_save))
goto_tabpage_tp(curtab_save, FALSE, FALSE);
@@ -957,13 +955,20 @@ pum_set_selected(int n, int repeat UNUSED)
// Update the screen before drawing the popup menu.
// Enable updating the status lines.
pum_pretend_not_visible = TRUE;
// But don't draw text at the new popup menu position,
// it causes flicker. When resizing we need to draw
// anyway, the position may change later.
// Also do not redraw the status line of the original
// current window here, to avoid it gets drawn with
// StatusLineNC for a moment and cause flicker.
pum_will_redraw = !resized;
save_redr_status = curwin_save->w_redr_status;
curwin_save->w_redr_status = FALSE;
update_screen(0);
pum_pretend_not_visible = FALSE;
pum_will_redraw = FALSE;
curwin_save->w_redr_status = save_redr_status;
if (!resized && win_valid(curwin_save))
{
@@ -1048,6 +1053,32 @@ pum_visible(void)
return !pum_pretend_not_visible && pum_array != NULL;
}
/*
* Return TRUE if the popup can be redrawn in the same position.
*/
static int
pum_in_same_position(void)
{
return pum_window != curwin
|| (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
&& pum_win_height == curwin->w_height
&& pum_win_col == curwin->w_wincol
&& pum_win_width == curwin->w_width);
}
/*
* Return TRUE when pum_may_redraw() will call pum_redraw().
* This means that the pum area should not be overwritten to avoid flicker.
*/
int
pum_redraw_in_same_position(void)
{
if (!pum_visible() || pum_will_redraw)
return FALSE; // nothing to do
return pum_in_same_position();
}
/*
* Reposition the popup menu to adjust for window layout changes.
*/
@@ -1061,11 +1092,7 @@ pum_may_redraw(void)
if (!pum_visible() || pum_will_redraw)
return; // nothing to do
if (pum_window != curwin
|| (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
&& pum_win_height == curwin->w_height
&& pum_win_col == curwin->w_wincol
&& pum_win_width == curwin->w_width))
if (pum_in_same_position())
{
// window position didn't change, redraw in the same position
pum_redraw();

View File

@@ -7,12 +7,16 @@ void blob_free(blob_T *b);
void blob_unref(blob_T *b);
long blob_len(blob_T *b);
int blob_get(blob_T *b, int idx);
void blob_set(blob_T *b, int idx, char_u c);
void blob_set(blob_T *blob, int idx, int byte);
void blob_set_append(blob_T *blob, int idx, int byte);
int blob_equal(blob_T *b1, blob_T *b2);
int read_blob(FILE *fd, blob_T *blob);
int write_blob(FILE *fd, blob_T *blob);
char_u *blob2string(blob_T *blob, char_u **tofree, char_u *numbuf);
blob_T *string2blob(char_u *str);
int blob_slice_or_index(blob_T *blob, int is_range, varnumber_T n1, varnumber_T n2, int exclusive, typval_T *rettv);
int check_blob_index(long bloblen, varnumber_T n1, int quiet);
int check_blob_range(long bloblen, varnumber_T n1, varnumber_T n2, int quiet);
int blob_set_range(blob_T *dest, long n1, long n2, typval_T *src);
void blob_remove(typval_T *argvars, typval_T *rettv);
/* vim: set ft=c : */

View File

@@ -71,7 +71,7 @@ void vars_clear(hashtab_T *ht);
void vars_clear_ext(hashtab_T *ht, int free_val);
void delete_var(hashtab_T *ht, hashitem_T *hi);
void set_var(char_u *name, typval_T *tv, int copy);
void set_var_const(char_u *name, type_T *type, typval_T *tv_arg, int copy, int flags, int var_idx);
void set_var_const(char_u *name, type_T *type, typval_T *tv_arg, int copy, int flags_arg, int var_idx);
int var_check_permission(dictitem_T *di, char_u *name);
int var_check_ro(int flags, char_u *name, int use_gettext);
int var_check_lock(int flags, char_u *name, int use_gettext);
@@ -82,9 +82,13 @@ int valid_varname(char_u *varname, int autoload);
void reset_v_option_vars(void);
void assert_error(garray_T *gap);
int var_exists(char_u *var);
int alloc_redir_lval(void);
void clear_redir_lval(void);
void init_redir_ga(void);
int var_redir_start(char_u *name, int append);
void var_redir_str(char_u *value, int value_len);
void var_redir_stop(void);
char_u *get_clear_redir_ga(void);
void f_gettabvar(typval_T *argvars, typval_T *rettv);
void f_gettabwinvar(typval_T *argvars, typval_T *rettv);
void f_getwinvar(typval_T *argvars, typval_T *rettv);

View File

@@ -27,6 +27,7 @@ void ex_change(exarg_T *eap);
void ex_z(exarg_T *eap);
int check_restricted(void);
int check_secure(void);
char_u *skip_substitute(char_u *start, int delimiter);
void ex_substitute(exarg_T *eap);
int do_sub_msg(int count_only);
void ex_global(exarg_T *eap);

View File

@@ -7,6 +7,7 @@ void pum_position_info_popup(win_T *wp);
void pum_undisplay(void);
void pum_clear(void);
int pum_visible(void);
int pum_redraw_in_same_position(void);
void pum_may_redraw(void);
int pum_get_height(void);
void pum_set_event_info(dict_T *dict);

View File

@@ -36,6 +36,7 @@ void find_pattern_in_path(char_u *ptr, int dir, int len, int whole, int skip_com
spat_T *get_spat(int idx);
int get_spat_last_idx(void);
void f_searchcount(typval_T *argvars, typval_T *rettv);
int fuzzy_match(char_u *str, char_u *pat_arg, int matchseq, int *outScore, int_u *matches, int maxMatches);
void f_matchfuzzy(typval_T *argvars, typval_T *rettv);
void f_matchfuzzypos(typval_T *argvars, typval_T *rettv);
/* vim: set ft=c : */

View File

@@ -4,6 +4,7 @@ void funcstack_check_refcount(funcstack_T *funcstack);
char_u *char_from_string(char_u *str, varnumber_T index);
char_u *string_slice(char_u *str, varnumber_T first, varnumber_T last, int exclusive);
int fill_partial_and_closure(partial_T *pt, ufunc_T *ufunc, ectx_T *ectx);
char_u *exe_substitute_instr(void);
int call_def_function(ufunc_T *ufunc, int argc_arg, typval_T *argv, partial_T *partial, typval_T *rettv);
void ex_disassemble(exarg_T *eap);
int tv2bool(typval_T *tv);

View File

@@ -5,6 +5,7 @@ void ex_vim9script(exarg_T *eap);
int not_in_vim9(exarg_T *eap);
int vim9_bad_comment(char_u *p);
int vim9_comment_start(char_u *p);
void ex_incdec(exarg_T *eap);
void ex_export(exarg_T *eap);
void free_imports_and_script_vars(int sid);
void mark_imports_for_reload(int sid);
@@ -12,7 +13,7 @@ void ex_import(exarg_T *eap);
int find_exported(int sid, char_u *name, ufunc_T **ufunc, type_T **type, cctx_T *cctx, int verbose);
char_u *handle_import(char_u *arg_start, garray_T *gap, int import_sid, evalarg_T *evalarg, void *cctx);
char_u *vim9_declare_scriptvar(exarg_T *eap, char_u *arg);
void update_vim9_script_var(int create, dictitem_T *di, int flags, typval_T *tv, type_T **type);
void update_vim9_script_var(int create, dictitem_T *di, int flags, typval_T *tv, type_T **type, int do_member);
void hide_script_var(scriptitem_T *si, int idx, int func_defined);
void free_all_script_vars(scriptitem_T *si);
svar_T *find_typval_in_script(typval_T *dest);

View File

@@ -9,7 +9,7 @@ type_T *alloc_func_type(type_T *ret_type, int argcount, garray_T *type_gap);
type_T *get_func_type(type_T *ret_type, int argcount, garray_T *type_gap);
int func_type_add_arg_types(type_T *functype, int argcount, garray_T *type_gap);
int need_convert_to_bool(type_T *type, typval_T *tv);
type_T *typval2type(typval_T *tv, int copyID, garray_T *type_gap);
type_T *typval2type(typval_T *tv, int copyID, garray_T *type_gap, int do_member);
type_T *typval2type_vimvar(typval_T *tv, garray_T *type_gap);
int check_typval_arg_type(type_T *expected, typval_T *actual_tv, int arg_idx);
int check_typval_type(type_T *expected, typval_T *actual_tv, where_T where);

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