Compare commits

...

189 Commits

Author SHA1 Message Date
Bram Moolenaar
0631bb4ed7 patch 8.2.4374: unreachable code
Problem:    Unreachable code.
Solution:   Remove outdated code lines.
2022-02-13 21:20:21 +00:00
Bram Moolenaar
c87aa34dfd patch 8.2.4373: expression test fails
Problem:    Expression test fails.
Solution:   Make the test work with latest Vim9 syntax.
2022-02-13 20:46:18 +00:00
Bram Moolenaar
299d8e5eec patch 8.2.4372: filetype detection from file contents is in legacy script
Problem:    Filetype detection from file contents is in legacy script.
Solution:   Use a compiled function for filetype detection.
2022-02-13 20:32:02 +00:00
Bram Moolenaar
75e27d78f5 patch 8.2.4371: Vim9: can create a script variable from a legacy function
Problem:    Vim9: can create a script variable from a legacy function.
Solution:   Disallow creating a script variable from a function.
2022-02-13 13:56:29 +00:00
Christian Brabandt
cf6ad8ea8c patch 8.2.4370: MS-Windows: libsodium.dll not included with the installer
Problem:    MS-Windows: libsodium.dll not included with the installer.
Solution:   Add the file to the installer if it exists. (Christian Brabandt,
            closes #9762)
2022-02-13 13:11:32 +00:00
ola.soder@axis.com
f7fbeed0ac patch 8.2.4369: redundant #ifdef argument
Problem:    Redundant #ifdef argument.
Solution:   Remove unused MSWIN. (Ola Söder, closes #9758)
2022-02-13 12:24:21 +00:00
ola.soder@axis.com
e131496ebf patch 8.2.4368: Amiga: a few compiler warnings
Problem:    Amiga: a few compiler warnings.
Solution:   Adjust #ifdefs. Add "UNUSED". (Ola Söder, closes #9756,
            closes #9757)
2022-02-13 12:13:38 +00:00
Bram Moolenaar
4525a57afb patch 8.2.4367: calling in_vim9script() multiple times
Problem:    Calling in_vim9script() multiple times.
Solution:   Call it once and keep the result.
2022-02-13 11:57:33 +00:00
Yegappan Lakshmanan
4d03d87000 patch 8.2.4366: not enough tests for command line completion
Problem:    Not enough tests for command line completion.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #9760)
2022-02-13 11:45:09 +00:00
Bram Moolenaar
cdf0485969 patch 8.2.4365: sticky command modifiers are too sticky
Problem:    sticky command modifiers are too sticky.
Solution:   Do not apply command modifiers to a called function. (closes #9751)
2022-02-12 22:13:06 +00:00
Bram Moolenaar
4549166078 patch 8.2.4364: MS-Windows: still running out of memory for a very long line
Problem:    MS-Windows: still running out of memory for a very long line.
Solution:   Check for negative length.
2022-02-12 21:59:51 +00:00
Bram Moolenaar
8e38555ece patch 8.2.4363: MS-Windows: running out of memory for a very long line
Problem:    MS-Windows: running out of memory for a very long line.
Solution:   Use a 32 bit value for MAXCOL also when ints are 64 bits.
2022-02-12 21:16:21 +00:00
Bram Moolenaar
33f3c59854 patch 8.2.4362: :retab may allocate too much memory
Problem:    :retab may allocate too much memory.
Solution:   Bail out when allocating more than MAXCOL bytes.
2022-02-12 20:46:15 +00:00
Bram Moolenaar
62b191c387 patch 8.2.4361: Vim9: some tests fail
Problem:    Vim9: some tests fail.
Solution:   Fix the tests, mostly by removing "s:".
2022-02-12 20:34:50 +00:00
Bram Moolenaar
a749a42ed2 patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Problem:    Vim9: allowing use of "s:" leads to inconsistencies.
Solution:   Disallow using "s:" in Vim9 script at the script level.
2022-02-12 19:52:25 +00:00
Bram Moolenaar
6e28703a8e patch 8.2.4359: crash when repeatedly using :retab
Problem:    crash when repeatedly using :retab.
Solution:   Bail out when the line is getting too long.
2022-02-12 15:42:18 +00:00
Bram Moolenaar
90a57168a4 patch 8.2.4358: Vim9: line number of exception is not set
Problem:    Vim9: line number of exception is not set.
Solution:   Set the line number before throwing an exception. (closes #9755)
2022-02-12 14:23:17 +00:00
Bram Moolenaar
2a9b62dfa2 patch 8.2.4357: sticky command modifiers are too sticky
Problem:    sticky command modifiers are too sticky.
Solution:   Do not apply command modifiers to a sourced script. (closes #9751)
2022-02-12 13:30:17 +00:00
Yegappan Lakshmanan
620d8edba0 patch 8.2.4356: command line completion functions are very long
Problem:    Command line completion functions are very long.
Solution:   Refactor into multiple functions. (Yegappan Lakshmanan,
            closes #9753)
2022-02-12 12:03:07 +00:00
Sean Dewar
0f7ff851cb patch 8.2.4355: unnecessary call to check_colorcolumn()
Problem:    Unnecessary call to check_colorcolumn().
Solution:   Remove the call. (Sean Dewar, closes #9748)
2022-02-12 11:51:25 +00:00
K.Takata
d68b2fc034 patch 8.2.4354: dynamic loading of libsodium not handled properly
Problem:    Dynamic loading of libsodium not handled properly.
Solution:   Fix has() and :version. Show an error message when loading fails.
            Fix memory leaks. (Ken Takata, closes #9754)
2022-02-12 11:18:37 +00:00
Philip H
18f7593e57 patch 8.2.4353: CI does not use the latest Lua and Python
Problem:    CI does not use the latest Lua and Python.
Solution:   Use Lua 5.4.2 and Python 3.10. (closes #9744)
2022-02-12 10:53:07 +00:00
Ananda Umamil
0c3cc2fec3 patch 8.2.4352: ReScript files are not recognized
Problem:    ReScript files are not recognized.
Solution:   Add the *.res and *.resi patterns. (Ananda Umamil, closes #9752)
2022-02-12 10:33:56 +00:00
ichizok
41ee5b1913 patch 8.2.4351: no coverage is measured on MS-Windows CI
Problem:    No coverage is measured on MS-Windows CI.
Solution:   Enable coverage on MS-Windows. (Ozaki Kiichi, closes #9750)
2022-02-12 10:13:13 +00:00
ola.soder@axis.com
29c70f612f patch 8.2.4350: FEAT_GUI_ENABLED defined but never used
Problem:    FEAT_GUI_ENABLED defined but never used.
Solution:   Remove the #define. (Ola Söder, closes #9732)
2022-02-11 21:13:35 +00:00
Bram Moolenaar
c9e3187d05 patch 8.2.4349: FileChangedShell test fails on MS-Windows
Problem:    FileChangedShell test fails on MS-Windows.
Solution:   Skip the test on MS-Windows.
2022-02-11 20:55:16 +00:00
Bram Moolenaar
5b1d6e98c6 patch 8.2.4348: "legacy exe cmd" does not do what one would expect
Problem:    "legacy exe cmd" does not do what one would expect.
Solution:   Apply the "legacy" and "vim9script" command modifiers to the
            argument of ":execute".
2022-02-11 20:33:48 +00:00
ola.soder@axis.com
bd89d44063 patch 8.2.4347: in some build setups UNUSED is not defined
Problem:    In some build setups UNUSED is not defined.
Solution:   Change the logic of how UNUSED is defined. (Ola Söder,
            closes #9734)
2022-02-11 19:27:55 +00:00
Bram Moolenaar
481acb1141 patch 8.2.4346: a custom statusline may cause Esc to work like Enter
Problem:    A custom statusline may cause Esc to work like Enter on the
            command line when the popup menu is displayed.
Solution:   Save and restore KeyTyped. (closes #9749)
2022-02-11 18:51:45 +00:00
Bram Moolenaar
f6246f51e3 patch 8.2.4345: <amatch> is expanded like a file name for DirChangedPre
Problem:    <amatch> is expanded like a file name for DirChangedPre.
Solution:   Do not expand <amatch>. (closes #9742)  Also for the User event.
2022-02-11 16:30:12 +00:00
ola.soder@axis.com
14f23122bf patch 8.2.4344: Amiga: header file included twice
Problem:    Amiga: header file included twice.
Solution:   Remove #include. (Ola Söder, closes #9733)
2022-02-11 16:11:14 +00:00
Rob Pilling
8196e94a8b patch 8.2.4343: when reloading not all properties are detected
Problem:    When reloading not all properties are detected.
Solution:   Add the "edit" value to v:fcs_choice. (Rob Pilling, closes #9579)
2022-02-11 15:12:10 +00:00
Bram Moolenaar
92f645bef7 Update runtime files. (closes #9741) 2022-02-11 13:29:40 +00:00
ichizok
bece72785d patch 8.2.4342: CI will soon switch to other windows version
Problem:    CI will soon switch to other windows version.
Solution:   Use "windows-2019" instead of "windows-latest". (Ozaki Kiichi,
            closes #9740)
2022-02-11 11:09:40 +00:00
Bram Moolenaar
414acd342f patch 8.2.4341: command line not redrawn when finishing popup menu
Problem:    Command line not redrawn when finishing popup menu and the screen
            has scrolled up.
Solution:   Redraw the command line after updating the screen. (closes #9722)
2022-02-10 21:09:45 +00:00
ola.soder@axis.com
949b35d83b patch 8.2.4340: Amiga: mch_can_exe() is not implemented
Problem:    Amiga: mch_can_exe() is not implemented.
Solution:   Implement mch_can_exe() for Amiga OS 4. (Ola Söder, closes #9731)
2022-02-10 20:21:04 +00:00
Yegappan Lakshmanan
560dff49c0 patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Problem:    CTRL-A does not work properly with the cmdline popup menu.
Solution:   Fix issues with CTRL-A.  Add more tests for the cmdline popup
            menu.  Remove TermWait() before VeriryScreenDump().  Refactor the
            cmdline popup code. (Yegappan Lakshmanan, closes #9735)
2022-02-10 19:52:10 +00:00
Bram Moolenaar
74a0a5b26d patch 8.2.4338: an error from an expression mapping messes up the display
Problem:    An error from an expression mapping messes up the display.
Solution:   When the expression results in an empty string return K_IGNORE.
            In cmdline mode redraw the command line. (closes #9726)
2022-02-10 14:07:41 +00:00
Bram Moolenaar
9da17d7c57 Update runtime files 2022-02-09 21:50:44 +00:00
=?UTF-8?q?Dundar=20G=C3=B6c?=
78a8404f8b patch 8.2.4337: part of condition is always true
Problem:    Part of condition is always true.
Solution:   Remove that part of the condition. (closes #9729)
2022-02-09 15:20:39 +00:00
Bram Moolenaar
769f5895eb patch 8.2.4336: using :filter for :scriptnames does not work
Problem:    Using :filter for :scriptnames does not work. (Ben Jackson)
Solution:   Call message_filtered(). (closes #9720)
2022-02-09 14:31:05 +00:00
Bram Moolenaar
28e8f73ae2 patch 8.2.4335: no autocommand event triggered before changing directory
Problem:    No autocommand event triggered before changing directory. (Ronnie
            Magatti)
Solution:   Add DirChangedPre. (closes #9721)
2022-02-09 12:58:20 +00:00
rbtnn
68cc2b8a37 patch 8.2.4334: command line popup menu not positioned correctly
Problem:    Command line popup menu not positioned correctly.
Solution:   Also use vim_strsize() on the existing text. (Naruhiko Nishino,
            closes #9727)
2022-02-09 11:55:47 +00:00
Bram Moolenaar
b6a138eb33 patch 8.2.4333: cstack not always passed to where it is needed
Problem:    cstack not always passed to where it is needed.
Solution:   Pass ctack through functions.
2022-02-08 21:17:22 +00:00
Bram Moolenaar
dce2441a60 patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Problem:    Vim9: incomplete test for existing script variable in block.
Solution:   Add a couple more tests.  Fix uncovered problem.
2022-02-08 20:35:30 +00:00
Bram Moolenaar
3a5988c025 patch 8.2.4331: Vim9: no test for existing script variable in block
Problem:    Vim9: no test for existing script variable in block.
Solution:   Add a test.
2022-02-08 19:23:35 +00:00
Bram Moolenaar
779aeff5c3 patch 8.2.4330: Vim9: no error if script imports itself
Problem:    Vim9: no error if script imports itself.
Solution:   Give an error when a script imports itself.
2022-02-08 19:12:19 +00:00
haya14busa
e023d49937 patch 8.2.4329: no support for end line number and column in 'errorformat'
Problem:    No support for end line number and column in 'errorformat'.
Solution:   Add %e and %k. (closes #9624)
2022-02-08 18:09:29 +00:00
Bram Moolenaar
73a16c22a4 patch 8.2.4328: command line complete matches cleard when typing character
Problem:    Command line complete matches cleard when typing character.
            (Dominique Pellé)
Solution:   Only remove a popup menu if there is one.
2022-02-08 17:40:36 +00:00
Bram Moolenaar
e3537aec2f patch 8.2.4327: may end up with no current buffer
Problem:    May end up with no current buffer.
Solution:   When deleting the current buffer to not pick a quickfix buffer as
            the new current buffer.
2022-02-08 15:05:20 +00:00
zeertzjq
51ab7c7d0d patch 8.2.4326: "o" and "O" copying comment not sufficiently tested
Problem:    "o" and "O" copying comment not sufficiently tested.
Solution:   Add a test case. (closes #9718)
2022-02-08 12:58:37 +00:00
Yegappan Lakshmanan
3908ef5017 patch 8.2.4325: 'wildmenu' only shows few matches
Problem:    'wildmenu' only shows few matches.
Solution:   Add the "pum" option: use a popup menu to show the matches.
            (Yegappan Lakshmanan et al., closes #9707)
2022-02-08 12:08:07 +00:00
Bram Moolenaar
3787f26c2e patch 8.2.4324: Vim9: script-local function name can start with "_"
Problem:    Vim9: script-local function name can start with "_".
Solution:   Check for leading capital after "s:".  Correct error message.
2022-02-07 21:54:01 +00:00
Bram Moolenaar
f681cfb90b patch 8.2.4323: Vim9: nested function name can start with "_"
Problem:    Vim9: nested function name can start with "_".
Solution:   Use same rule for function name for nested functions.
            (closes #9713)
2022-02-07 20:30:57 +00:00
Bram Moolenaar
7aca5ca676 patch 8.2.4322: Vim9: crash when using funcref with closure
Problem:    Vim9: crash when using funcref with closure.
Solution:   Keep a reference to the funcref that has the outer context.
            (closes #9716)
2022-02-07 19:56:43 +00:00
Bram Moolenaar
92368aad61 patch 8.2.4321: Vim9: crash when using a funcref to a closure
Problem:    Vim9: crash when using a funcref to a closure.
Solution:   Copy pt_outer to the new partial. (closes #9714)
2022-02-07 17:50:39 +00:00
qsmodo
28f1a51bde patch 8.2.4320: Athena and Motif: when maximized scrollbar position is wrong
Problem:    Athena and Motif: when maximized scrollbar position is wrong.
Solution:   Implement the scrollbar padding functions. (closes #9712)
2022-02-07 15:57:50 +00:00
Bram Moolenaar
4e713bafc0 patch 8.2.4319: :put does not work properly in compiled function
Problem:    :put does not work properly in compiled function. (John Beckett)
Solution:   Adjust the direction when using line zero.
2022-02-07 15:31:37 +00:00
Bram Moolenaar
54969f4ef5 patch 8.2.4318: various comment and indent mistakes, returning wrong zero
Problem:    Various comment and indent mistakes, returning wrong zero.
Solution:   Fix the mistakes.  Return NULL instead of FAIL.
2022-02-07 13:56:44 +00:00
Bram Moolenaar
63ff72aab9 patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Problem:    MS-Windows: Vim exits when Python 3 initialisation fails.
Solution:   Hook into the exit() function to recover from the failure.
            (Ken Takata, closes #9710)
2022-02-07 13:54:01 +00:00
K.Takata
b247e0622e patch 8.2.4316: __CYGWIN32__ is not defined on 64 bit systems
Problem:    __CYGWIN32__ is not defined on 64 bit systems.
Solution:   Update #ifdefs. (Ken Takata, closes #9709)
2022-02-07 10:45:23 +00:00
zeertzjq
6bf821e8ab patch 8.2.4315: put in Visual mode not fully tested
Problem:    Put in Visual mode not fully tested.
Solution:   Add a few more test cases. (closes #9708)
2022-02-07 10:33:20 +00:00
Bram Moolenaar
8cbf249917 patch 8.2.4314: test fails where lines are skipped
Problem:    Test fails where lines are skipped.
Solution:   Only give an error when not skipping commands.
2022-02-06 20:28:13 +00:00
Bram Moolenaar
5f4ef5f5e5 patch 8.2.4313: Vim9: cannot change type of list after making a slice
Problem:    Vim9: cannot change type of list after making a slice.
Solution:   Adjust the declared member type. (closes #9696)
2022-02-06 18:36:53 +00:00
Bram Moolenaar
107f7325f6 patch 8.2.4312: no error for using :vim9script in a :def function
Problem:    No error for using :vim9script in a :def function.
Solution:   Give an error when compiling.
2022-02-06 17:30:41 +00:00
Bram Moolenaar
160afdb185 patch 8.2.4311: Vim9: changing script variable type not caught compile time
Problem:    Vim9: changing script variable type not caught at compile time.
Solution:   Set the declared type.
2022-02-06 17:17:02 +00:00
Bram Moolenaar
2626d6a71c patch 8.2.4310: Vim9: constant list and dict get a declaration type
Problem:    Vim9: constant list and dict get a declaration type other than
            "any".
Solution:   A constant list and dict have a declared member type "any".
            (closes #9701)
2022-02-06 15:49:35 +00:00
Bram Moolenaar
fe1bfc9b26 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Problem:    Vim9: crash when using a partial in the wrong context.
Solution:   Don't use an NULL outer pointer. (closes #9706)
2022-02-06 13:55:03 +00:00
Bram Moolenaar
8164f6ea3c patch 8.2.4308: Vim9: cannot list autoload function
Problem:    Vim9: cannot list autoload function.
Solution:   Don't give an error for using # when listing a function.
            (closes #9703)
2022-02-06 13:08:41 +00:00
Bram Moolenaar
0c1550d9e9 patch 8.2.4307: a few more messages should not be translated
Problem:    A few more messages should not be translated.
Solution:   Remove _().
2022-02-06 11:41:57 +00:00
Bram Moolenaar
500761b1cf patch 8.2.4306: no test for fixed perl filetype check
Problem:    No test for fixed perl filetype check.
Solution:   Add a test. Sort test functions.
2022-02-05 20:23:59 +00:00
Bram Moolenaar
e5b7897585 patch 8.2.4305: tex filetype detection fails
Problem:    Tex filetype detection fails.
Solution:   Check value to be positive. (closes #9704)
2022-02-05 19:50:34 +00:00
Bram Moolenaar
00eb99528e patch 8.2.4304: Vim9: slice() makes a copy but doesn't change the type
Problem:    Vim9: slice() makes a copy but doesn't change the type.
Solution:   Change the declared type like copy(). (closes #9696)
2022-02-05 19:23:18 +00:00
Dominique Pelle
cd53eed2c5 patch 8.2.4303: a few messages should not be translated
Problem:    A few messages should not be translated.
Solution:   Remove _(). (Dominique Pellé, closes #9702)
2022-02-05 18:53:06 +00:00
Bram Moolenaar
82e46e5d31 patch 8.2.4302: Vim9: return type of getline() is too strict
Problem:    Vim9: return type of getline() is too strict.
Solution:   Make the declared type list<any>.  Also do this for other
            functions returning a list of a specific type.
2022-02-05 18:12:34 +00:00
Bram Moolenaar
e0c2b2ceaa patch 8.2.4301: Vim9: type error for copy of dict
Problem:    Vim9: type error for copy of dict.
Solution:   Do not use dict<any> but no type. (closes #9696)
2022-02-05 14:05:51 +00:00
Bram Moolenaar
4fa1346bf4 patch 8.2.4300: cannot build tiny version
Problem:    Cannot build tiny version. (Tony Mechelynck)
Solution:   Add #ifdef.
2022-02-05 12:39:24 +00:00
Bram Moolenaar
46f3080e5c patch 8.2.4299: SafeState autocommand interferes with debugging
Problem:    SafeState autocommand interferes with debugging.
Solution:   Do not trigger SafeState while debugging. (closes #9697)
2022-02-05 12:10:52 +00:00
Bram Moolenaar
fc88df42f1 patch 8.2.4298: divide by zero with huge tabstop value
Problem:    Divide by zero with huge tabstop value.
Solution:   Reject tabstop value that overflows to zero.
2022-02-05 11:13:05 +00:00
Bram Moolenaar
21ebb0899e patch 8.2.4297: Vim9: not all code covered by tests
Problem:    Vim9: not all code covered by tests.
Solution:   Add a couple more tests.
2022-02-04 21:58:58 +00:00
Bram Moolenaar
83d0cec956 patch 8.2.4296: Vim9: not all code covered by tests
Problem:    Vim9: not all code covered by tests.
Solution:   Add a few more tests for corner cases.  Fix hang when single quote
            is missing.
2022-02-04 21:17:58 +00:00
Bram Moolenaar
3e79c97c18 Update runtime files; use compiled functions 2022-02-04 19:48:06 +00:00
Bram Moolenaar
a2baa73d1d Update runtime files. 2022-02-04 16:09:54 +00:00
Bram Moolenaar
46950b225f patch 8.2.4295: Vim9: concatenating two lists may result in wrong type
Problem:    Vim9: concatenating two lists may result in wrong type.
Solution:   Remove the type instead of using list<any>. (closes #9692)
2022-02-04 11:36:51 +00:00
K.Takata
972db23279 patch 8.2.4294: MS-Windows: #ifdefs for Cygwin are too complicated
Problem:    MS-Windows: #ifdefs for Cygwin are too complicated.
Solution:   Simplify the conditions. (Ken Takata, closes #9693)
2022-02-04 10:45:38 +00:00
Bram Moolenaar
7676c15879 patch 8.2.4293: Vim9: when copying a list it gets type list<any>
Problem:    Vim9: when copying a list it gets type list<any> even when the
            original list did not have a type.
Solution:   Only set the type when the original list has a type. (closes #9692)
2022-02-03 21:47:34 +00:00
Bram Moolenaar
02a977ea5e patch 8.2.4292: test fails
Problem:    Test fails.
Solution:   Adjust the expected error number.
2022-02-03 21:29:39 +00:00
Bram Moolenaar
5658ca343f patch 8.2.4291: error number used twice
Problem:    Error number used twice.
Solution:   Renumber of of the errors.
2022-02-03 20:09:19 +00:00
K.Takata
a8ec4916ca patch 8.2.4290: MS-Windows: using type casts for timer IDs
Problem:    MS-Windows: using type casts for timer IDs.
Solution:   Remove type casts and use the right type. (Ken Takata,
            closes #9690)  Remove old debug comments.  Rename variables and
            functions.
2022-02-03 14:32:33 +00:00
K.Takata
5411910c77 patch 8.2.4289: warnings reported by MSVC
Problem:    Warnings reported by MSVC.
Solution:   Rename variables and other fixes. (Ken Takata, closes #9689)
2022-02-03 13:33:03 +00:00
K.Takata
6e1d31e9e3 patch 8.2.4288: preprocessor indents are inconsistent
Problem:    Preprocessor indents are inconsistent.
Solution:   Fix preprocessor indents. (Ken Takata, closes #9691)
2022-02-03 13:05:32 +00:00
Bram Moolenaar
2d3ac2e030 patch 8.2.4287: cannot assign empty list with type to variable with list type
Problem:    Cannot assign empty list with any list type to variable with
            specific list type.
Solution:   Use unknown list type for empty list if the specified type is any.
2022-02-03 12:34:05 +00:00
Bram Moolenaar
381692b6f1 patch 8.2.4286: Vim9: strict type checking after copy() and deepcopy()
Problem:    Vim9: strict type checking after copy() and deepcopy().
Solution:   Allow type to change after making a copy. (closes #9644)
2022-02-02 20:01:27 +00:00
Bram Moolenaar
a1c5195180 patch 8.2.4285: Vim9: type of item in for loop not checked properly
Problem:    Vim9: type of item in for loop not checked properly.
Solution:   Adjust the type checking. (closes #9683)
2022-02-02 16:20:26 +00:00
ichizok
ab8f7c50cf patch 8.2.4284: old mac resources files are no longer used
Problem:    Old mac resources files are no longer used.
Solution:   Delete the unused files. (Ozaki Kiichi, closes #9688)
2022-02-02 15:19:38 +00:00
zeertzjq
73257149d7 patch 8.2.4283: using a variable for the return value is not needed
Problem:    Using a variable for the return value is not needed.
Solution:   Return the value directly. (closes #9687)
2022-02-02 13:16:37 +00:00
matveyt
adbb1bf21d patch 8.2.4282: restricted mode requires the -Z command line option
Problem:    Restricted mode requires the -Z command line option.
Solution:   Use restricted mode when $SHELL ends in "nologin" or "false".
            (closes #9681)
2022-02-01 17:26:12 +00:00
Bram Moolenaar
9b4a80a665 patch 8.2.4281: using freed memory with :lopen and :bwipe
Problem:    Using freed memory with :lopen and :bwipe.
Solution:   Do not use a wiped out buffer.
2022-02-01 13:54:17 +00:00
Bram Moolenaar
eb4a9ba293 patch 8.2.4280: list-dict test crashes
Problem:    list-dict test crashes.
Solution:   Check declared type for add().
2022-02-01 12:47:07 +00:00
Bram Moolenaar
8133018f50 patch 8.2.4279: Vim9: cannot change item type with map() after range()
Problem:    Vim9: cannot change item type with map() after range().
Solution:   Split the return type in current type and declared type.
            (closes #9665)
2022-02-01 12:11:58 +00:00
Bram Moolenaar
4e3b318230 patch 8.2.4278: build with Athena GUI fails
Problem:    Build with Athena GUI fails. (Elimar Riesebieter)
Solution:   Add #ifdef.
2022-02-01 10:16:00 +00:00
Bram Moolenaar
68854a82fd patch 8.2.4277: Vim9: an import does not shadow a command modifier
Problem:    Vim9: an import does not shadow a command modifier.
Solution:   Do not accept a command modifier followed by a dot.
2022-01-31 18:59:13 +00:00
Yegappan Lakshmanan
9e0208f51c patch 8.2.4276: separate test function for the GUI scrollbar
Problem:    Separate test function for the GUI scrollbar.
Solution:   Use test_gui_event(). (Yegappan Lakshmanan, closes #9674)
2022-01-31 17:40:55 +00:00
=?UTF-8?q?Bj=C3=B6rn=20Linse?=
223a950a85 patch 8.2.4275: cannot use an autoload function from a package under start
Problem:    Cannot use an autoload function from a package under start.
Solution:   Also look in the "start" package directory. (Bjorn Linse,
            closes #7193)
2022-01-31 17:26:05 +00:00
Doug Kearns
c570e9cf68 patch 8.2.4274: Basic and form filetype detection is incomplete
Problem:    Basic and form filetype detection is incomplete.
Solution:   Add a separate function for .frm files. (Doug Kearns, closes #9675)
2022-01-31 17:09:14 +00:00
Bram Moolenaar
c4573eb12d Update runtime files 2022-01-31 15:40:56 +00:00
Bram Moolenaar
424bcae1fb patch 8.2.4273: the EBCDIC support is outdated
Problem:    The EBCDIC support is outdated.
Solution:   Remove the EBCDIC support.
2022-01-31 14:59:41 +00:00
Bram Moolenaar
eb6c276595 patch 8.2.4272: Vim9 expr test fails without the channel feature
Problem:    Vim9 expr test fails without the channel feature. (Dominique
            Pellé)
Solution:   Remove "g:" before "CheckFeature". (closes #9671)
2022-01-31 13:36:36 +00:00
K.Takata
1f47a287ee patch 8.2.4271: MS-Windows: cannot build with Ruby 3.1.0
Problem:    MS-Windows: cannot build with Ruby 3.1.0.
Solution:   Adjust the DLL name and include directory. (Ken Takata,
            closes #9666)
2022-01-31 13:25:36 +00:00
ichizok
672776dbe8 patch 8.2.4270: generating nv_cmdidxs.h requires building Vim twice
Problem:    Generating nv_cmdidxs.h requires building Vim twice.
Solution:   Move the table into a separate file and use a separate executable
            to extract the command characters. (Ozaki Kiichi, closes #9669)
2022-01-31 12:27:18 +00:00
Bram Moolenaar
48a604845e patch 8.2.4269: Coverity warns for using a NULL pointer
Problem:    Coverity warns for using a NULL pointer.
Solution:   Check for "name" to not be NULL.
2022-01-31 11:44:48 +00:00
ichizok
44d1f89c24 patch 8.2.4268: CI log output is long
Problem:    CI log output is long.
Solution:   Group output in sections. (Ozaki Kiichi, closes #9670)
2022-01-31 11:38:53 +00:00
Bram Moolenaar
4c93aff20f patch 8.2.4267: unused entry in keymap enum
Problem:    Unused entry in keymap enum.
Solution:   Remove the entry.
2022-01-31 11:29:51 +00:00
Bram Moolenaar
5703310e64 patch 8.2.4266: compiler warning for uninitialized variable
Problem:    Compiler warning for uninitialized variable.
Solution:   Initialize saved_did_emsg.
2022-01-30 19:37:52 +00:00
Bram Moolenaar
6a05807092 patch 8.2.4265: autoload tests fails
Problem:    Autoload tests fails.
Solution:   Use export instead of name with #.
2022-01-30 18:56:35 +00:00
Bram Moolenaar
d8fe6d34bb patch 8.2.4264: Vim9: can use old style autoload function name
Problem:    Vim9: can use old style autoload function name.
Solution:   Give an error for old style autoload function name.
2022-01-30 18:40:44 +00:00
Yegappan Lakshmanan
ec3637cbaf patch 8.2.4263: no test for the GUI find/replace dialog
Problem:    No test for the GUI find/replace dialog.
Solution:   Add a test function and a test. (Yegappan Lakshmanan,
            closes #9662)
2022-01-30 18:01:24 +00:00
Bram Moolenaar
44a4d947bb patch 8.2.4262: some search tests fail
Problem:    Some search tests fail.
Solution:   Use a better way to reject searching for the Visual area.
2022-01-30 17:17:41 +00:00
Bram Moolenaar
679d66c2d2 patch 8.2.4261: accessing invalid memory in a regular expression
Problem:    Accessing invalid memory when a regular expression checks the
            Visual area while matching in a string.
Solution:   Do not try matching the Visual area in a string.
2022-01-30 16:42:56 +00:00
Bram Moolenaar
848faddb87 patch 8.2.4260: Vim9: can still use a global function without g:
Problem:    Vim9: can still use a global function without g: at the script
            level.
Solution:   Also check for g: at the script level. (issue #9637)
2022-01-30 15:28:30 +00:00
Yegappan Lakshmanan
06011e1a55 patch 8.2.4259: number of test functions for GUI events is growing
Problem:    Number of test functions for GUI events is growing.
Solution:   Use one function with a dictionary. (Yegappan Lakshmanan,
            closes #9660)
2022-01-30 12:37:29 +00:00
Bram Moolenaar
6970e1e36a patch 8.2.4258: Coverity warns for array overrun
Problem:    Coverity warns for array overrun.
Solution:   Restrict depth to MAXWLEN - 1.
2022-01-30 12:10:39 +00:00
Bram Moolenaar
f10911e5db Update runtime files 2022-01-29 22:20:48 +00:00
Bram Moolenaar
62aec93bfd patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Problem:    Vim9: finding global function without g: prefix but not finding
            global variable is inconsistent.
Solution:   Require using g: for a global function.  Change the vim9.vim
            script into a Vim9 script with exports.  Fix that import in legacy
            script does not work.
2022-01-29 21:45:34 +00:00
K.Takata
135e15251e patch 8.2.4256: MS-Windows: compiler warnings when compiled with /W4
Problem:    MS-Windows: compiler warnings when compiled with /W4.
Solution:   Small adjustments to the code. (Ken Takata, closes #9659)
2022-01-29 15:27:58 +00:00
=?UTF-8?q?Dundar=20G=C3=B6c?=
d5cec1f1f0 patch 8.2.4255: theoretical computation overflow
Problem:    Theoretical computation overflow.
Solution:   Perform multiplication in a wider type. (closes #9657)
2022-01-29 15:19:23 +00:00
=?UTF-8?q?Dundar=20G=C3=B6c?=
f12b7815f6 patch 8.2.4254: using short instead of int
Problem:    Using short instead of int.
Solution:   Use int. (closes #9658)
2022-01-29 15:12:39 +00:00
Bram Moolenaar
37f47958b8 patch 8.2.4253: using freed memory when substitute with function call
Problem:    Using freed memory when substitute uses a recursive function call.
Solution:   Make a copy of the substitute text.
2022-01-29 14:21:51 +00:00
Yegappan Lakshmanan
4dc0dd8699 patch 8.2.4252: generating the normal command table at runtime is inefficient
Problem:    Generating the normal command table at runtime is inefficient.
Solution:   Generate the table with a Vim script and put it in a header file.
            (Yegappan Lakshmanan, closes #9648)
2022-01-29 13:06:40 +00:00
Bram Moolenaar
97c554d514 patch 8.2.4251: vala files are not recognized
Problem:    Vala files are not recognized.
Solution:   Add the *.vala pattern. (closes #9654)
2022-01-29 12:45:47 +00:00
ichizok
24714a1916 patch 8.2.4250: channel out callback test is flaky on Mac
Problem:    Channel out callback test is flaky on Mac.
Solution:   Assign high priority to the test process. (Ozaki Kiichi,
            closes #9653)
2022-01-29 12:10:43 +00:00
Bram Moolenaar
585ee07cfe patch 8.2.4249: the timeout limit for spell suggestions is always 5000
Problem:    The timeout limit for spell suggestions is always 5000 milli
            seconds.
Solution:   Add the "timeout" entry to 'spellsuggest'.
2022-01-29 11:22:17 +00:00
zeertzjq
a0c4e2f2d7 patch 8.2.4248: no proper test for moving the window separator
Problem:    No proper test for moving the window separator.
Solution:   Add a test.  Add comment in code. (closes #9656)
2022-01-29 10:59:53 +00:00
Bram Moolenaar
06f15416bb patch 8.2.4247: stack corruption when looking for spell suggestions
Problem:    Stack corruption when looking for spell suggestions.
Solution:   Prevent the depth increased too much.  Add a five second time
            limit to finding suggestions.
2022-01-29 10:51:59 +00:00
Bram Moolenaar
e96eea7b6a patch 8.2.4246: one error message not in errors.h
Problem:    One error message not in errors.h. (Antonio Colombo)
Solution:   Move the message and rename.
2022-01-28 21:00:51 +00:00
Bram Moolenaar
652dee4486 patch 8.2.4245: ":retab 0" may cause illegal memory access
Problem:    ":retab 0" may cause illegal memory access.
Solution:   Limit the value of 'tabstop' to 10000.
2022-01-28 20:47:49 +00:00
K.Takata
14cbf77845 patch 8.2.4244: MS-Windows: warning from MSVC on debug build
Problem:    MS-Windows: warning from MSVC on debug build.
Solution:   Adjust "/opt"o options.  Remove unused variables.  Make variables
            uppercase for consistency. (Ken Takata, closes #9647)
2022-01-28 18:54:13 +00:00
=?UTF-8?q?Jakub=20Kul=C3=ADk?=
57ff2b7068 patch 8.2.4243: Lua tests fail with Lua 5.4.4
Problem:    Lua tests fail with Lua 5.4.4.
Solution:   Check messages like before Lua 5.4.3. (Jakub Kulík, closes #9652)
2022-01-28 17:20:03 +00:00
Shougo Matsushita
fb55207ed1 patch 8.2.4242: put in Visual mode cannot be repeated
Problem:    Put in Visual mode cannot be repeated.
Solution:   Use "P" to put without yanking the deleted text into the unnamed
            register. (Shougo Matsushita, closes #9591)
2022-01-28 16:01:13 +00:00
=?UTF-8?q?Dundar=20G=C3=B6c?=
420fabcd4f patch 8.2.4241: some type casts are redundant
Problem:    Some type casts are redundant.
Solution:   Remove the type casts. (closes #9643)
2022-01-28 15:28:04 +00:00
Bram Moolenaar
fb80862e49 patch 8.2.4240: error for using flatten() in Vim9 script is unclear
Problem:    Error for using flatten() in Vim9 script is unclear.
Solution:   Add a remark to use flattennew().
2022-01-28 15:01:47 +00:00
Bram Moolenaar
ddd815ba2a patch 8.2.4239: build fails with unusual configuration
Problem:    Build fails with unusual configuration.
Solution:   Adjust #ifdef. (closes #9651)
2022-01-28 14:39:58 +00:00
=?UTF-8?q?Dundar=20G=C3=B6c?=
bd8168c770 patch 8.2.4238: *.tf file could be fileytpe "tf" or "terraform"
Problem:    *.tf file could be fileytpe "tf" or "terraform".
Solution:   Detect the type from the file contents. (closes #9642)
2022-01-28 14:15:09 +00:00
zeertzjq
fbf4f1ca15 patch 8.2.4237: record buffer wrong if character in Select mode was not typed
Problem:    Record buffer wrong if character in Select mode was not typed.
Solution:   Only delete the tail from the record buffer if the character was
            typed. (closes #9650)
2022-01-28 12:50:43 +00:00
Bram Moolenaar
166788c657 patch 8.2.4236: accessing freed memory
Problem:    Accessing freed memory.
Solution:   Set the bh_curr pointer to NULL.
2022-01-27 21:56:40 +00:00
Bram Moolenaar
37cf413e3e patch 8.2.4235: invalid check for NULL pointer
Problem:    Invalid check for NULL pointer.
Solution:   Remove the check.
2022-01-27 20:47:03 +00:00
Bram Moolenaar
b3d83980d2 patch 8.2.4234: test_garbagecollect_now() does not check v:testing
Problem:    test_garbagecollect_now() does not check v:testing as documented.
Solution:   Give an error if v:testing is not set.
2022-01-27 19:59:47 +00:00
Bram Moolenaar
a4bc2dd7cc patch 8.2.4233: crash when recording and using Select mode
Problem:    Crash when recording and using Select mode.
Solution:   When deleting the last recorded character check there is something
            to delete.
2022-01-27 19:27:16 +00:00
Bram Moolenaar
98cd30383a patch 8.2.4232: some compilers don't like a goto label without statement
Problem:    Some compilers don't like a goto label without statement.
Solution:   Return instead of using a goto.
2022-01-27 17:37:41 +00:00
Bram Moolenaar
35c807df1f patch 8.2.4231: Vim9: map() gives type error when type was not declared
Problem:    Vim9: map() gives type error when type was not declared.
Solution:   Only check the type when it was declared, like extend() does.
            (closes #9635)
2022-01-27 16:36:29 +00:00
K.Takata
94373c48e7 patch 8.2.4230: MS-Windows: set_guifontwide() is included but won't work
Problem:    MS-Windows: set_guifontwide() is included but won't work.
Solution:   Include set_guifontwide() only for X11. (Ken Takata, closes #9640)
2022-01-27 15:04:22 +00:00
Bram Moolenaar
745b938a48 patch 8.2.4229: possible crash when invoking timer callback fails
Problem:    Possible crash when invoking timer callback fails.
Solution:   Initialize the typval.  Give an error for an empty callback.
            (closes #9636)
2022-01-27 13:55:35 +00:00
Yegappan Lakshmanan
b0ad2d92fd patch 8.2.4228: no tests for clicking in the GUI tabline
Problem:    No tests for clicking in the GUI tabline.
Solution:   Add test functions to generate the events.  Add tests using the
            functions. (Yegappan Lakshmanan, closes #9638)
2022-01-27 13:16:59 +00:00
Bram Moolenaar
e939f5ebba patch 8.2.4227: Vim9: using "lockvar!" in :def function does not work
Problem:    Vim9: using "lockvar!" in :def function does not work.
Solution:   Add "!" instead of "-1". (closes #9634)
2022-01-26 21:32:59 +00:00
Bram Moolenaar
fc4c44836a patch 8.2.4226: filter-map test fails
Problem:    Filter-map test fails.
Solution:   Only reject number argument in Vim9 script.
2022-01-26 21:17:04 +00:00
Bram Moolenaar
70c43d84be patch 8.2.4225: Vim9: depth argument of :lockvar not parsed in :def function
Problem:    Vim9: depth argument of :lockvar not parsed in :def function.
Solution:   Parse the optional depth argument. (closes #9629)
            Fix that locking doesn't work for a non-materialize list.
2022-01-26 21:01:15 +00:00
Bram Moolenaar
1080c48ec8 patch 8.2.4224: Vim9: no error when using a number for map() second argument
Problem:    Vim9: no error when using a number for map() second argument
Solution:   Disallow number to string conversion. (closes #9630)
2022-01-26 18:26:21 +00:00
K.Takata
1a804528ab patch 8.2.4223: long/int compiler warnings; function arguments swapped
Problem:    Long/int compiler warnings; function arguments swapped.
Solution:   Add type casts.  Swap arguments. (Ken Takata, closes #9632)
2022-01-26 16:45:20 +00:00
K.Takata
47d1666d60 patch 8.2.4222: MS-Windows: clumsy way to suppress progress on CI
Problem:    MS-Windows: clumsy way to suppress progress on CI.
Solution:   Check for "$CI" in the Makefile itself. (Ken Takata, closes #9631)
2022-01-26 16:20:21 +00:00
Yegappan Lakshmanan
a827bf3ea8 patch 8.2.4221: some functions in normal.c are very long
Problem:    Some functions in normal.c are very long.
Solution:   Move code to separate functions. (Yegappan Lakshmanan,
            closes #9628)
2022-01-26 12:14:15 +00:00
K.Takata
250155ae31 patch 8.2.4220: MS-Windows: some old compiler support remains
Problem:    MS-Windows: some old compiler support remains.
Solution:   Remove obsolete compiler support. (Ken Takata, closes #9627)
2022-01-26 11:16:52 +00:00
Bram Moolenaar
44db8213d3 patch 8.2.4219: reading before the start of the line
Problem:    Reading before the start of the line.
Solution:   Check boundary before trying to read the character.
2022-01-25 21:26:17 +00:00
Bram Moolenaar
806d037671 patch 8.2.4218: illegal memory access with bracketed paste in Ex mode
Problem:    Illegal memory access with bracketed paste in Ex mode.
Solution:   Reserve space for the trailing NUL.
2022-01-25 20:45:16 +00:00
Bram Moolenaar
8d02ce1ed7 patch 8.2.4217: illegal memory access when undo makes Visual area invalid
Problem:    Illegal memory access when undo makes Visual area invalid.
Solution:   Correct the Visual area after undo.
2022-01-25 18:24:00 +00:00
Bram Moolenaar
06b77229ca patch 8.2.4216: Vim9: cannot use a function from an autoload import directly
Problem:    Vim9: cannot use a function from an autoload import directly.
Solution:   Add the AUTOLOAD instruction to figure out at runtime.
            (closes #9620)
2022-01-25 15:51:56 +00:00
Bram Moolenaar
dc5490e2cb patch 8.2.4215: illegal memory access when copying lines in Visual mode
Problem:    Illegal memory access when copying lines in Visual mode.
Solution:   Adjust the Visual position after copying lines.
2022-01-25 13:52:53 +00:00
Bram Moolenaar
85b6747abc patch 8.2.4214: illegal memory access with large 'tabstop' in Ex mode
Problem:    Illegal memory access with large 'tabstop' in Ex mode.
Solution:   Allocate enough memory.
2022-01-25 11:55:02 +00:00
K.Takata
76687d2717 patch 8.2.4213: too much code for supporting old MSVC versions
Problem:    Too much code for supporting old MSVC versions.
Solution:   Remove MSVC 2003 support. (Ken Takata, closes #9623)
2022-01-25 10:31:37 +00:00
Bram Moolenaar
1450112eef patch 8.2.4212: window title test still fails in some configurations
Problem:    Window title test still fails in some configurations.
Solution:   Explicitly set the 'title' option.
2022-01-24 22:32:28 +00:00
Bram Moolenaar
3a8ad5918b patch 8.2.4211: window title test still fails in some configurations
Problem:    Window title test still fails in some configurations.
Solution:   Use WaitForAssert().
2022-01-24 22:18:24 +00:00
Bram Moolenaar
a6c09a7c20 patch 8.2.4210: window title test fails in some configurations
Problem:    Window title test fails in some configurations.
Solution:   Only run the test if the title can be obtained.
2022-01-24 22:02:15 +00:00
Bram Moolenaar
3e93a2b075 patch 8.2.4209: partial in 'opfunc' cannot use an imported function
Problem:    partial in 'opfunc' cannot use an imported function.
Solution:   Also expand the function name in a partial. (closes #9614)
2022-01-24 21:28:01 +00:00
Bram Moolenaar
dff97e65eb patch 8.2.4208: using setbufvar() may change the window title
Problem:    Using setbufvar() may change the window title.
Solution:   Do not redraw when creating the autocommand window. (closes #9613)
2022-01-24 20:00:55 +00:00
Bram Moolenaar
50e0525445 patch 8.2.4207: recursion test fails with MSVC
Problem:    Recursion test fails with MSVC.
Solution:   Use a smaller limit for MSVC.
2022-01-24 18:36:39 +00:00
Bram Moolenaar
fe6fb267e6 patch 8.2.4206: condition with many "(" causes a crash
Problem:    Condition with many "(" causes a crash.
Solution:   Limit recursion to 1000.
2022-01-24 18:16:12 +00:00
Yegappan Lakshmanan
4663435074 patch 8.2.4205: the normal_cmd() function is too long
Problem:    The normal_cmd() function is too long.
Solution:   Move parts to separate functions. (Yegappan Lakshmanan,
            closes #9608)
2022-01-24 16:30:30 +00:00
Bram Moolenaar
7924a17791 patch 8.2.4204: screenpos() has non-zero row for invisible text
Problem:    screenpos() has non-zero row for invisible text.
Solution:   Only add the window row when the text is visible. (closes #9618)
2022-01-24 16:15:15 +00:00
zeertzjq
502d8ae3e8 patch 8.2.4203: entering a character with CTRL-V may include modifiers
Problem:    Entering a character with CTRL-V may include modifiers.
Solution:   Reset "mod_mask" when entering a character with digits after
            CTRL-V. (closes #9610)
2022-01-24 15:27:50 +00:00
Bram Moolenaar
acc4b5648b patch 8.2.4202: Vim9: cannot export function that exists globally
Problem:    Vim9: cannot export function that exists globally.
Solution:   When checking if a function already exists only check for
            script-local functions. (closes #9615)
2022-01-24 13:54:45 +00:00
Bram Moolenaar
8e4af851fd patch 8.2.4201: when using the GUI CTRL-Z does not stop gvim
Problem:    When using the GUI CTRL-Z does not stop gvim.
Solution:   When using the GUI set SIGTSTP to SIG_DFL. (Andrew Maltsev,
            closes #9570)
2022-01-24 12:20:45 +00:00
Yegappan Lakshmanan
7e765a39b7 patch 8.2.4200: some tests do not clean up properly
Problem:    Some tests do not clean up properly.
Solution:   Delete created files. (Yegappan Lakshmanan, closes #9611)
2022-01-24 11:40:37 +00:00
K.Takata
c351dc1e0c patch 8.2.4199: MS-Windows: Support for MSVC 2003 is not useful
Problem:    MS-Windows: Support for MSVC 2003 is not useful.
Solution:   Remove the exceptions for MSVC 2003. (Ken Takata, closes #9616)
2022-01-24 11:24:08 +00:00
Bram Moolenaar
058ee7c569 patch 8.2.4198: Vim9: the switch for executing instructions is too long
Problem:    Vim9: the switch for executing instructions is too long.
Solution:   Move some code to separate functions.
2022-01-23 20:00:42 +00:00
Bram Moolenaar
2a7aa83458 patch 8.2.4197: cannot use an import in the "expr" part of 'spellsuggest'
Problem:    Cannot use an import in the "expr" part of 'spellsuggest'.
Solution:   Set the script context when evaluating "expr" of 'spellsuggest'.
2022-01-23 17:59:06 +00:00
=?UTF-8?q?Dundar=20G=C3=B6c?=
428058ab32 patch 8.2.4196: various file types not recognized
Problem:    Various file types not recognized.
Solution:   Add patterns to recognize more file types (closes #9607)
2022-01-23 17:09:05 +00:00
dbivolaru
79a6e25b79 patch 8.2.4195: resizing terminal may cause to behave like CTRL-Z
Problem:    Resizing terminal may cause to behave like CTRL-Z.
Solution:   Set "got_tstp" only when in_mch_suspend is set. (Dorian Bivolaru,
            closes #9602, closes #9586)
2022-01-23 16:41:14 +00:00
K.Takata
abe628e1bd patch 8.2.4194: MS-Windows: code for calculating font size is duplicated
Problem:    MS-Windows: code for calculating font size is duplicated.
Solution:   Move the code to a function. (Ken Takata, closes #9603)
2022-01-23 16:25:17 +00:00
Bram Moolenaar
f4e88f2152 patch 8.2.4193: cannot use an import in 'charconvert'
Problem:    Cannot use an import in 'charconvert'.
Solution:   Set the script context when evaluating 'charconvert'.  Also expand
            script-local functions in 'charconvert'.
2022-01-23 14:17:28 +00:00
Bram Moolenaar
7ef4a2fe37 patch 8.2.4192: cannot use an import in 'printexpr'
Problem:    Cannot use an import in 'printexpr'.
Solution:   Set the script context when evaluating 'printexpr'.
2022-01-23 13:44:35 +00:00
388 changed files with 22574 additions and 16056 deletions

6
.github/CODEOWNERS vendored
View File

@@ -9,6 +9,7 @@
# So if a pull request only touches javascript files, only these owners
# will be requested to review.
runtime/autoload/freebasic.vim @dkearns
runtime/autoload/getscript.vim @cecamp
runtime/autoload/netrw.vim @cecamp
runtime/autoload/netrwFileHandlers.vim @cecamp
@@ -111,6 +112,7 @@ runtime/ftplugin/pbtxt.vim @lakshayg
runtime/ftplugin/pdf.vim @tpope
runtime/ftplugin/ps1.vim @heaths
runtime/ftplugin/ps1xml.vim @heaths
runtime/ftplugin/qb64.vim @dkearns
runtime/ftplugin/routeros.vim @zainin
runtime/ftplugin/ruby.vim @tpope @dkearns
runtime/ftplugin/sass.vim @tpope
@@ -126,6 +128,7 @@ runtime/ftplugin/typescript.vim @dkearns
runtime/ftplugin/typescriptreact.vim @dkearns
runtime/ftplugin/xml.vim @chrisbra
runtime/ftplugin/zsh.vim @chrisbra
runtime/indent/basic.vim @dkearns
runtime/indent/bst.vim @tpope
runtime/indent/cdl.vim @dkearns
runtime/indent/clojure.vim @axvr
@@ -140,6 +143,7 @@ runtime/indent/elm.vim @andys8
runtime/indent/eruby.vim @tpope @dkearns
runtime/indent/eterm.vim @dkearns
runtime/indent/framescript.vim @dkearns
runtime/indent/freebasic.vim @dkearns
runtime/indent/gitconfig.vim @tpope
runtime/indent/haml.vim @tpope
runtime/indent/idlang.vim @dkearns
@@ -154,6 +158,7 @@ runtime/indent/occam.vim @dkearns
runtime/indent/postscr.vim @dkearns
runtime/indent/prolog.vim @dkearns
runtime/indent/ps1.vim @heaths
runtime/indent/qb64.vim @dkearns
runtime/indent/readline.vim @dkearns
runtime/indent/ruby.vim @AndrewRadev @dkearns
runtime/indent/sass.vim @tpope
@@ -239,6 +244,7 @@ runtime/syntax/prolog.vim @XVilka
runtime/syntax/ps1.vim @heaths
runtime/syntax/ps1xml.vim @heaths
runtime/syntax/psl.vim @danielkho
runtime/syntax/qb64.vim @dkearns
runtime/syntax/rc.vim @chrisbra
runtime/syntax/routeros.vim @zainin
runtime/syntax/rpcgen.vim @cecamp

View File

@@ -225,7 +225,7 @@ jobs:
do_test make ${SHADOWOPT} ${TEST}
# - name: Coveralls
# if: matrix.coverage && success() && github.event_name != 'pull_request'
# if: matrix.coverage && github.event_name != 'pull_request'
# env:
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
# COVERALLS_PARALLEL: true
@@ -238,21 +238,21 @@ jobs:
# ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8
- name: Generate gcov files
if: matrix.coverage && success()
if: matrix.coverage
run: |
cd "${SRCDIR}"
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov
if: matrix.coverage && success()
if: matrix.coverage
uses: codecov/codecov-action@v2
with:
flags: ${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}
flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}
- name: ASan logs
if: contains(matrix.extra, 'asan') && !cancelled()
run: |
for f in $(grep -lR '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "${LOG_DIR}"); do
for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); do
asan_symbolize -l "$f"
false # in order to fail a job
done
@@ -344,7 +344,7 @@ jobs:
make ${TEST}
windows:
runs-on: windows-latest
runs-on: windows-2019
env:
VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
@@ -352,7 +352,7 @@ jobs:
# Lua
LUA_VER: 54
LUA_VER_DOT: '5.4'
LUA_RELEASE: 5.4.0
LUA_RELEASE: 5.4.2
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
LUA_DIR: D:\Lua
@@ -360,8 +360,8 @@ jobs:
PYTHON_VER: 27
PYTHON_VER_DOT: '2.7'
# Python 3
PYTHON3_VER: 38
PYTHON3_VER_DOT: '3.8'
PYTHON3_VER: 310
PYTHON3_VER_DOT: '3.10'
# Other dependencies
# winpty
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
@@ -410,6 +410,9 @@ jobs:
python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@")
echo "PYTHON_DIR=$python_dir" >> $GITHUB_ENV
echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV
if ${{ matrix.toolchain == 'mingw' && matrix.arch == 'x64' && matrix.features == 'HUGE' }}; then
echo "COVERAGE=yes" >> $GITHUB_ENV
fi
- uses: msys2/setup-msys2@v2
if: matrix.toolchain == 'mingw'
@@ -472,17 +475,15 @@ jobs:
run: |
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
:: Filter out the progress bar from the build log
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
if "${{ matrix.features }}"=="HUGE" (
nmake -nologo -f Make_mvc2.mak ^
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes ^
DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR%
) else (
nmake -nologo -f Make_mvc2.mak ^
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=yes IME=yes ICONV=yes VIMDLL=yes
)
@@ -503,7 +504,7 @@ jobs:
DYNAMIC_LUA=yes LUA=${LUA_DIR} \
DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
STATIC_STDCPLUS=yes
STATIC_STDCPLUS=yes COVERAGE=${COVERAGE}
else
mingw32-make -f Make_ming.mak -j2 \
FEATURES=${{ matrix.features }} \
@@ -524,6 +525,12 @@ jobs:
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
# path: ./artifacts
- name: Copy gcov data files to src2
if: env.COVERAGE
shell: msys2 {0}
run: |
find src -name '*.gcno' | tar -c -T - | tar -x -C src2 --strip-components 1
- name: Test
shell: cmd
timeout-minutes: 20
@@ -532,16 +539,18 @@ jobs:
call "%VCVARSALL%" ${{ matrix.vcarch }}
cd src
echo.
echo %COL_GREEN%vim version:%COL_RESET%
echo ::group::%COL_GREEN%Vim version:%COL_RESET%
.\vim --version || exit 1
echo ::endgroup::
echo %COL_GREEN%Start testing vim in background.%COL_RESET%
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
echo %COL_GREEN%Test gvim:%COL_RESET%
echo ::group::%COL_GREEN%Test gvim:%COL_RESET%
cd testdir
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
cd ..
echo ::endgroup::
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET%
cd ..\src2\testdir
@@ -554,10 +563,34 @@ jobs:
set timeout=1
:exitloop
echo %COL_GREEN%Test results of vim:%COL_RESET%
echo ::group::%COL_GREEN%Test results of vim:%COL_RESET%
if exist messages type messages
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1
if "%timeout%"=="1" (
echo %COL_RED%Timed out.%COL_RESET%
exit 1
)
echo ::endgroup::
- name: Generate gcov files
if: env.COVERAGE
shell: msys2 {0}
run: |
cd src
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
cd ../src2
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov (gvim)
if: env.COVERAGE
uses: codecov/codecov-action@v2
with:
directory: src
flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }}-gui
- name: Codecov (vim)
if: env.COVERAGE
uses: codecov/codecov-action@v2
with:
directory: src2
flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }}

View File

@@ -113,6 +113,8 @@ SRC_ALL = \
src/nbdebug.h \
src/netbeans.c \
src/normal.c \
src/nv_cmdidxs.h \
src/nv_cmds.h \
src/ops.c \
src/option.c \
src/option.h \
@@ -443,6 +445,8 @@ SRC_UNIX = \
src/configure \
src/configure.ac \
src/create_cmdidxs.vim \
src/create_nvcmdidxs.c \
src/create_nvcmdidxs.vim \
src/gui_at_fs.c \
src/gui_at_sb.c \
src/gui_at_sb.h \
@@ -543,7 +547,6 @@ SRC_DOS = \
tools/rename.bat \
src/bigvim.bat \
src/bigvim64.bat \
src/msvcsetup.bat \
src/msvc2008.bat \
src/msvc2010.bat \
src/msvc2015.bat \
@@ -660,10 +663,7 @@ SRC_HAIKU = \
# source files for the Mac (also in the extra archive)
SRC_MAC = \
src/INSTALLmac.txt \
src/dehqx.py \
src/os_mac_rsrc/*.icns \
src/os_mac.h \
src/os_mac.rsr.hqx \
src/os_mac_conv.c \
src/os_macosx.m \
src/proto/os_mac_conv.pro \
@@ -701,7 +701,6 @@ SRC_EXTRA = \
$(SRC_QNX) \
$(SRC_VMS) \
README_os390.txt \
src/infplist.xml \
src/link.390 \
src/os_vms_fix.com \
src/toolbar.phi \

View File

@@ -5,11 +5,9 @@ setlocal ENABLEDELAYEDEXPANSION
cd %APPVEYOR_BUILD_FOLDER%
cd src
:: Filter out the progress bar from the build log
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
echo "Building MSVC 64bit console Version"
nmake -f Make_mvc2.mak CPU=AMD64 ^
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE%
if not exist vim.exe (
@@ -21,13 +19,13 @@ if not exist vim.exe (
:: GUI needs to be last, so that testing works
echo "Building MSVC 64bit GUI Version"
if "%FEATURE%" == "HUGE" (
nmake -f Make_mvc2.mak CPU=AMD64 ^
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^
PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^
PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35-x64 ^
FEATURES=%FEATURE%
) ELSE (
nmake -f Make_mvc2.mak CPU=AMD64 ^
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE%
)

View File

@@ -347,6 +347,9 @@ Section "$(str_section_exe)" id_section_exe
File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
!if /FileExists "${VIMSRC}\vim${BIT}.dll"
File ${VIMSRC}\vim${BIT}.dll
!endif
!if /FileExists "${VIMRT}\libsodium.dll"
File ${VIMRT}\libsodium.dll
!endif
File /oname=install.exe ${VIMSRC}\installw32.exe
File /oname=uninstall.exe ${VIMSRC}\uninstallw32.exe

View File

@@ -4,13 +4,13 @@ vim9script noclear
# Language: C
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Rewritten in Vim9 script by github user lacygoill
# Last Change: 2021 Dec 27
# Last Change: 2022 Jan 31
var prepended: string
var grepCache: dict<list<dict<any>>>
# This function is used for the 'omnifunc' option.
def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
export def Complete(findstart: bool, abase: string): any # {{{1
if findstart
# Locate the start of the item, including ".", "->" and "[...]".
var line: string = getline('.')
@@ -202,7 +202,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|| !v['static']
|| bufnr('%') == bufnr(v['filename']))
res = extendnew(res, tags->map((_, v: dict<any>) => Tag2item(v)))
res = res->extend(tags->map((_, v: dict<any>) => Tag2item(v)))
endif
if len(res) == 0
@@ -216,9 +216,9 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
for i: number in len(diclist)->range()
# New ctags has the "typeref" field. Patched version has "typename".
if diclist[i]->has_key('typename')
res = extendnew(res, diclist[i]['typename']->StructMembers(items[1 :], true))
res = res->extend(diclist[i]['typename']->StructMembers(items[1 :], true))
elseif diclist[i]->has_key('typeref')
res = extendnew(res, diclist[i]['typeref']->StructMembers(items[1 :], true))
res = res->extend(diclist[i]['typeref']->StructMembers(items[1 :], true))
endif
# For a variable use the command, which must be a search pattern that
@@ -227,7 +227,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
var line: string = diclist[i]['cmd']
if line[: 1] == '/^'
var col: number = line->charidx(match(line, '\<' .. items[0] .. '\>'))
res = extendnew(res, line[2 : col - 1]->Nextitem(items[1 :], 0, true))
res = res->extend(line[2 : col - 1]->Nextitem(items[1 :], 0, true))
endif
endif
endfor
@@ -256,11 +256,10 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
enddef
def GetAddition( # {{{1
line: string,
match: string,
memarg: list<dict<any>>,
bracket: bool
): string
line: string,
match: string,
memarg: list<dict<any>>,
bracket: bool): string
# Guess if the item is an array.
if bracket && match(line, match .. '\s*\[') > 0
return '['
@@ -403,10 +402,9 @@ def Tagline2item(val: dict<any>, brackets: string): dict<string> # {{{1
enddef
def Tagcmd2extra( # {{{1
cmd: string,
name: string,
fname: string
): string
cmd: string,
name: string,
fname: string): string
# Turn a command from a tag line to something that is useful in the menu
var x: string
if cmd =~ '^/^'
@@ -427,11 +425,10 @@ def Tagcmd2extra( # {{{1
enddef
def Nextitem( # {{{1
lead: string,
items: list<string>,
depth: number,
all: bool
): list<dict<string>>
lead: string,
items: list<string>,
depth: number,
all: bool): list<dict<string>>
# Find composing type in "lead" and match items[0] with it.
# Repeat this recursively for items[1], if it's there.
# When resolving typedefs "depth" is used to avoid infinite recursion.
@@ -473,11 +470,11 @@ def Nextitem( # {{{1
# New ctags has the "typeref" field. Patched version has "typename".
if item->has_key('typeref')
res = extendnew(res, item['typeref']->StructMembers(items, all))
res = res->extend(item['typeref']->StructMembers(items, all))
continue
endif
if item->has_key('typename')
res = extendnew(res, item['typename']->StructMembers(items, all))
res = res->extend(item['typename']->StructMembers(items, all))
continue
endif
@@ -511,11 +508,11 @@ def Nextitem( # {{{1
endif
endfor
if name != ''
res = extendnew(res, StructMembers(cmdtokens[0] .. ':' .. name, items, all))
res = res->extend(StructMembers(cmdtokens[0] .. ':' .. name, items, all))
endif
elseif depth < 10
# Could be "typedef other_T some_T".
res = extendnew(res, cmdtokens[0]->Nextitem(items, depth + 1, all))
res = res->extend(cmdtokens[0]->Nextitem(items, depth + 1, all))
endif
endif
endif
@@ -529,10 +526,9 @@ def Nextitem( # {{{1
enddef
def StructMembers( # {{{1
atypename: string,
items: list<string>,
all: bool
): list<dict<string>>
atypename: string,
items: list<string>,
all: bool): list<dict<string>>
# Search for members of structure "typename" in tags files.
# Return a list with resulting matches.
@@ -641,10 +637,9 @@ def StructMembers( # {{{1
enddef
def SearchMembers( # {{{1
matches: list<dict<any>>,
items: list<string>,
all: bool
): list<dict<string>>
matches: list<dict<any>>,
items: list<string>,
all: bool): list<dict<string>>
# For matching members, find matches for following items.
# When "all" is true find all, otherwise just return 1 if there is any member.
@@ -674,7 +669,7 @@ def SearchMembers( # {{{1
endif
if typename != ''
res = extendnew(res, StructMembers(typename, items, all))
res = res->extend(StructMembers(typename, items, all))
else
# Use the search command (the declaration itself).
var sb: number = line->match('\t\zs/^')
@@ -683,7 +678,7 @@ def SearchMembers( # {{{1
var e: number = line
->charidx(match(line, '\<' .. matches[i]['match'] .. '\>', sb))
if e > 0
res = extendnew(res, line[s : e - 1]->Nextitem(items, 0, all))
res = res->extend(line[s : e - 1]->Nextitem(items, 0, all))
endif
endif
endif

File diff suppressed because it is too large Load Diff

426
runtime/autoload/dist/script.vim vendored Normal file
View File

@@ -0,0 +1,426 @@
vim9script
# Vim function for detecting a filetype from the file contents.
# Invoked from "scripts.vim" in 'runtimepath'
#
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last Change: 2022 Feb 13
export def DetectFiletype()
var line1 = getline(1)
if line1[0] == '#' && line1[1] == '!'
# File that starts with "#!".
DetectFromHashBang(line1)
else
# File does not start with "#!".
DetectFromText(line1)
endif
enddef
# Called for a script that has "#!" in the first line.
def DetectFromHashBang(firstline: string)
var line1 = firstline
# Check for a line like "#!/usr/bin/env {options} bash". Turn it into
# "#!/usr/bin/bash" to make matching easier.
# Recognize only a few {options} that are commonly used.
if line1 =~ '^#!\s*\S*\<env\s'
line1 = substitute(line1, '\S\+=\S\+', '', 'g')
line1 = substitute(line1, '\(-[iS]\|--ignore-environment\|--split-string\)', '', '')
line1 = substitute(line1, '\<env\s\+', '', '')
endif
# Get the program name.
# Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
# If the word env is used, use the first word after the space:
# "#!/usr/bin/env perl [path/args]"
# If there is no path use the first word: "#!perl [path/args]".
# Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
var name: string
if line1 =~ '^#!\s*\a:[/\\]'
name = substitute(line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
elseif line1 =~ '^#!.*\<env\>'
name = substitute(line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
elseif line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
name = substitute(line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
else
name = substitute(line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
endif
# tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
# third line. Suggested by Steven Atkinson.
if getline(3) =~ '^exec wish'
name = 'wish'
endif
# Bourne-like shell scripts: bash bash2 ksh ksh93 sh
if name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
call dist#ft#SetFileTypeSH(line1)
# csh scripts
elseif name =~ '^csh\>'
if exists("g:filetype_csh")
call dist#ft#SetFileTypeShell(g:filetype_csh)
else
call dist#ft#SetFileTypeShell("csh")
endif
# tcsh scripts
elseif name =~ '^tcsh\>'
call dist#ft#SetFileTypeShell("tcsh")
# Z shell scripts
elseif name =~ '^zsh\>'
set ft=zsh
# TCL scripts
elseif name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
set ft=tcl
# Expect scripts
elseif name =~ '^expect\>'
set ft=expect
# Gnuplot scripts
elseif name =~ '^gnuplot\>'
set ft=gnuplot
# Makefiles
elseif name =~ 'make\>'
set ft=make
# Pike
elseif name =~ '^pike\%(\>\|[0-9]\)'
set ft=pike
# Lua
elseif name =~ 'lua'
set ft=lua
# Perl
elseif name =~ 'perl'
set ft=perl
# PHP
elseif name =~ 'php'
set ft=php
# Python
elseif name =~ 'python'
set ft=python
# Groovy
elseif name =~ '^groovy\>'
set ft=groovy
# Raku
elseif name =~ 'raku'
set ft=raku
# Ruby
elseif name =~ 'ruby'
set ft=ruby
# JavaScript
elseif name =~ 'node\(js\)\=\>\|js\>' || name =~ 'rhino\>'
set ft=javascript
# BC calculator
elseif name =~ '^bc\>'
set ft=bc
# sed
elseif name =~ 'sed\>'
set ft=sed
# OCaml-scripts
elseif name =~ 'ocaml'
set ft=ocaml
# Awk scripts; also finds "gawk"
elseif name =~ 'awk\>'
set ft=awk
# Website MetaLanguage
elseif name =~ 'wml'
set ft=wml
# Scheme scripts
elseif name =~ 'scheme'
set ft=scheme
# CFEngine scripts
elseif name =~ 'cfengine'
set ft=cfengine
# Erlang scripts
elseif name =~ 'escript'
set ft=erlang
# Haskell
elseif name =~ 'haskell'
set ft=haskell
# Scala
elseif name =~ 'scala\>'
set ft=scala
# Clojure
elseif name =~ 'clojure'
set ft=clojure
# Free Pascal
elseif name =~ 'instantfpc\>'
set ft=pascal
# Fennel
elseif name =~ 'fennel\>'
set ft=fennel
# MikroTik RouterOS script
elseif name =~ 'rsc\>'
set ft=routeros
# Fish shell
elseif name =~ 'fish\>'
set ft=fish
# Gforth
elseif name =~ 'gforth\>'
set ft=forth
endif
enddef
# Called for a script that does not have "#!" in the first line.
def DetectFromText(line1: string)
var line2 = getline(2)
var line3 = getline(3)
var line4 = getline(4)
var line5 = getline(5)
# Bourne-like shell scripts: sh ksh bash bash2
if line1 =~ '^:$'
call dist#ft#SetFileTypeSH(line1)
# Z shell scripts
elseif line1 =~ '^#compdef\>'
|| line1 =~ '^#autoload\>'
|| "\n" .. line1 .. "\n" .. line2 .. "\n" .. line3 ..
"\n" .. line4 .. "\n" .. line5
=~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
set ft=zsh
# ELM Mail files
elseif line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
set ft=mail
# Mason
elseif line1 =~ '^<[%&].*>'
set ft=mason
# Vim scripts (must have '" vim' as the first line to trigger this)
elseif line1 =~ '^" *[vV]im$'
set ft=vim
# libcxx and libstdc++ standard library headers like "iostream" do not have
# an extension, recognize the Emacs file mode.
elseif line1 =~? '-\*-.*C++.*-\*-'
set ft=cpp
# MOO
elseif line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
set ft=moo
# Diff file:
# - "diff" in first line (context diff)
# - "Only in " in first line
# - "--- " in first line and "+++ " in second line (unified diff).
# - "*** " in first line and "--- " in second line (context diff).
# - "# It was generated by makepatch " in the second line (makepatch diff).
# - "Index: <filename>" in the first line (CVS file)
# - "=== ", line of "=", "---", "+++ " (SVK diff)
# - "=== ", "--- ", "+++ " (bzr diff, common case)
# - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
# - "# HG changeset patch" in first line (Mercurial export format)
elseif line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
|| (line1 =~ '^--- ' && line2 =~ '^+++ ')
|| (line1 =~ '^\* looking for ' && line2 =~ '^\* comparing to ')
|| (line1 =~ '^\*\*\* ' && line2 =~ '^--- ')
|| (line1 =~ '^=== ' && ((line2 =~ '^=\{66\}' && line3 =~ '^--- ' && line4 =~ '^+++') || (line2 =~ '^--- ' && line3 =~ '^+++ ')))
|| (line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
set ft=diff
# PostScript Files (must have %!PS as the first line, like a2ps output)
elseif line1 =~ '^%![ \t]*PS'
set ft=postscr
# M4 scripts: Guess there is a line that starts with "dnl".
elseif line1 =~ '^\s*dnl\>'
|| line2 =~ '^\s*dnl\>'
|| line3 =~ '^\s*dnl\>'
|| line4 =~ '^\s*dnl\>'
|| line5 =~ '^\s*dnl\>'
set ft=m4
# AmigaDos scripts
elseif $TERM == "amiga" && (line1 =~ "^;" || line1 =~? '^\.bra')
set ft=amiga
# SiCAD scripts (must have procn or procd as the first line to trigger this)
elseif line1 =~? '^ *proc[nd] *$'
set ft=sicad
# Purify log files start with "**** Purify"
elseif line1 =~ '^\*\*\*\* Purify'
set ft=purifylog
# XML
elseif line1 =~ '<?\s*xml.*?>'
set ft=xml
# XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
elseif line1 =~ '\<DTD\s\+XHTML\s'
set ft=xhtml
# HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
# Avoid "doctype html", used by slim.
elseif line1 =~? '<!DOCTYPE\s\+html\>'
set ft=html
# PDF
elseif line1 =~ '^%PDF-'
set ft=pdf
# XXD output
elseif line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
set ft=xxd
# RCS/CVS log output
elseif line1 =~ '^RCS file:' || line2 =~ '^RCS file:'
set ft=rcslog
# CVS commit
elseif line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
set ft=cvs
# Prescribe
elseif line1 =~ '^!R!'
set ft=prescribe
# Send-pr
elseif line1 =~ '^SEND-PR:'
set ft=sendpr
# SNNS files
elseif line1 =~ '^SNNS network definition file'
set ft=snnsnet
elseif line1 =~ '^SNNS pattern definition file'
set ft=snnspat
elseif line1 =~ '^SNNS result file'
set ft=snnsres
# Virata
elseif line1 =~ '^%.\{-}[Vv]irata'
|| line2 =~ '^%.\{-}[Vv]irata'
|| line3 =~ '^%.\{-}[Vv]irata'
|| line4 =~ '^%.\{-}[Vv]irata'
|| line5 =~ '^%.\{-}[Vv]irata'
set ft=virata
# Strace
elseif line1 =~ '[0-9:.]* *execve(' || line1 =~ '^__libc_start_main'
set ft=strace
# VSE JCL
elseif line1 =~ '^\* $$ JOB\>' || line1 =~ '^// *JOB\>'
set ft=vsejcl
# TAK and SINDA
elseif line4 =~ 'K & K Associates' || line2 =~ 'TAK 2000'
set ft=takout
elseif line3 =~ 'S Y S T E M S I M P R O V E D '
set ft=sindaout
elseif getline(6) =~ 'Run Date: '
set ft=takcmp
elseif getline(9) =~ 'Node File 1'
set ft=sindacmp
# DNS zone files
elseif line1 .. line2 .. line3 .. line4 =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
set ft=bindzone
# BAAN
elseif line1 =~ '|\*\{1,80}' && line2 =~ 'VRC '
|| line2 =~ '|\*\{1,80}' && line3 =~ 'VRC '
set ft=baan
# Valgrind
elseif line1 =~ '^==\d\+== valgrind' || line3 =~ '^==\d\+== Using valgrind'
set ft=valgrind
# Go docs
elseif line1 =~ '^PACKAGE DOCUMENTATION$'
set ft=godoc
# Renderman Interface Bytestream
elseif line1 =~ '^##RenderMan'
set ft=rib
# Scheme scripts
elseif line1 =~ 'exec\s\+\S*scheme' || line2 =~ 'exec\s\+\S*scheme'
set ft=scheme
# Git output
elseif line1 =~ '^\(commit\|tree\|object\) \x\{40,\}\>\|^tag \S\+$'
set ft=git
# Gprof (gnu profiler)
elseif line1 == 'Flat profile:'
&& line2 == ''
&& line3 =~ '^Each sample counts as .* seconds.$'
set ft=gprof
# Erlang terms
# (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
elseif line1 =~? '-\*-.*erlang.*-\*-'
set ft=erlang
# YAML
elseif line1 =~ '^%YAML'
set ft=yaml
# MikroTik RouterOS script
elseif line1 =~ '^#.*by RouterOS.*$'
set ft=routeros
# Sed scripts
# #ncomment is allowed but most likely a false positive so require a space
# before any trailing comment text
elseif line1 =~ '^#n\%($\|\s\)'
set ft=sed
else
var lnum = 1
while getline(lnum) =~ "^? " && lnum < line("$")
lnum += 1
endwhile
if getline(lnum) =~ '^Index:\s\+\f\+$'
# CVS diff
set ft=diff
# locale input files: Formal Definitions of Cultural Conventions
# filename must be like en_US, fr_FR@euro or en_US.UTF-8
elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
lnum = 1
while lnum < 100 && lnum < line("$")
if getline(lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
setf fdcc
break
endif
lnum += 1
endwhile
endif
endif
enddef

View File

@@ -0,0 +1,41 @@
" Vim filetype plugin file
" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2021 Mar 16
" Dialects can be one of fb, qb, fblite, or deprecated
" Precedence is forcelang > #lang > lang
function! freebasic#GetDialect() abort
if exists("g:freebasic_forcelang")
return g:freebasic_forcelang
endif
if exists("g:freebasic_lang")
let dialect = g:freebasic_lang
else
let dialect = "fb"
endif
" override with #lang directive or metacommand
let skip = "has('syntax_items') && synIDattr(synID(line('.'), col('.'), 1), 'name') =~ 'Comment$'"
let pat = '\c^\s*\%(#\s*lang\s\+\|''\s*$lang\s*:\s*\)"\([^"]*\)"'
let save_cursor = getcurpos()
call cursor(1, 1)
let lnum = search(pat, 'n', '', '', skip)
call setpos('.', save_cursor)
if lnum
let word = matchlist(getline(lnum), pat)[1]
if word =~? '\%(fb\|deprecated\|fblite\|qb\)'
let dialect = word
else
echomsg "freebasic#GetDialect: Invalid lang, found '" .. word .. "' at line " .. lnum .. " " .. getline(lnum)
endif
endif
return dialect
endfunction
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.2. Last change: 2022 Jan 21
*autocmd.txt* For Vim version 8.2. Last change: 2022 Feb 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -326,6 +326,7 @@ Name triggered by ~
|FileChangedRO| before making the first change to a read-only file
|DiffUpdated| after diffs have been updated
|DirChangedPre| before the working directory will change
|DirChanged| after the working directory has changed
|ShellCmdPost| after executing a shell command
@@ -738,6 +739,11 @@ DiffUpdated After diffs have been updated. Depending on
what kind of diff is being used (internal or
external) this can be triggered on every
change or when doing |:diffupdate|.
*DirChangedPre*
DirChangedPre The working directory is going to be changed,
as with |DirChanged|. The pattern is like
with |DirChanged|. The new directory can be
found in v:event.directory.
*DirChanged*
DirChanged The working directory has changed in response
to the |:cd| or |:tcd| or |:lcd| commands, or

View File

@@ -1,4 +1,4 @@
*builtin.txt* For Vim version 8.2. Last change: 2022 Jan 22
*builtin.txt* For Vim version 8.2. Last change: 2022 Feb 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -641,10 +641,7 @@ test_feedinput({string}) none add key sequence to input buffer
test_garbagecollect_now() none free memory right now for testing
test_garbagecollect_soon() none free memory soon for testing
test_getvalue({string}) any get value of an internal variable
test_gui_drop_files({list}, {row}, {col}, {mods})
none drop a list of files in a window
test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
none add a mouse event to the input buffer
test_gui_event({event}, {args}) bool generate a GUI event for testing
test_ignore_error({expr}) none ignore a specific error
test_null_blob() Blob null value for testing
test_null_channel() Channel null value for testing
@@ -657,8 +654,6 @@ test_null_string() String null value for testing
test_option_not_set({name}) none reset flag indicating option was set
test_override({expr}, {val}) none test with Vim internal overrides
test_refcount({expr}) Number get the reference count of {expr}
test_scrollbar({which}, {value}, {dragging})
none scroll in the GUI for testing
test_setmouse({row}, {col}) none set the mouse position for testing
test_settime({expr}) none set current time for testing
test_srand_seed([seed]) none set seed for testing srand()
@@ -1890,12 +1885,13 @@ digraph_getlist([{listall}]) *digraph_getlist()*
display an error message.
digraph_set({chars}, {digraph}) *digraph_set()* *E1205*
digraph_set({chars}, {digraph}) *digraph_set()*
Add digraph {chars} to the list. {chars} must be a string
with two characters. {digraph} is a string with one UTF-8
encoded character. Be careful, composing characters are NOT
ignored. This function is similar to |:digraphs| command, but
useful to add digraphs start with a white space.
encoded character. *E1215*
Be careful, composing characters are NOT ignored. This
function is similar to |:digraphs| command, but useful to add
digraphs start with a white space.
The function result is v:true if |digraph| is registered. If
this fails an error message is given and v:false is returned.
@@ -1918,7 +1914,7 @@ digraph_setlist({digraphlist}) *digraph_setlist()*
Similar to |digraph_set()| but this function can add multiple
digraphs at once. {digraphlist} is a list composed of lists,
where each list contains two strings with {chars} and
{digraph} as in |digraph_set()|.
{digraph} as in |digraph_set()|. *E1216*
Example: >
call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
<
@@ -2082,6 +2078,22 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
For checking if a file exists use |filereadable()|.
The {expr} argument is a string, which contains one of these:
varname internal variable (see
dict.key |internal-variables|). Also works
list[i] for |curly-braces-names|, |Dictionary|
import.Func entries, |List| items, imported
items,etc.
Does not work for local variables in a
compiled `:def` function.
Beware that evaluating an index may
cause an error message for an invalid
expression. E.g.: >
:let l = [1, 2, 3]
:echo exists("l[5]")
< 0 >
:echo exists("l[xx]")
< E121: Undefined variable: xx
0
&option-name Vim option (only checks if it exists,
not if it really works)
+option-name Vim option that works.
@@ -2096,21 +2108,6 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
?funcname built-in function that could be
implemented; to be used to check if
"funcname" is valid
varname internal variable (see
|internal-variables|). Also works
for |curly-braces-names|, |Dictionary|
entries, |List| items, etc.
Does not work for local variables in a
compiled `:def` function.
Beware that evaluating an index may
cause an error message for an invalid
expression. E.g.: >
:let l = [1, 2, 3]
:echo exists("l[5]")
< 0 >
:echo exists("l[xx]")
< E121: Undefined variable: xx
0
:cmdname Ex command: built-in command, user
command or command modifier |:command|.
Returns:
@@ -3755,7 +3752,7 @@ getreg([{regname} [, 1 [, {list}]]]) *getreg()*
:let cliptext = getreg('*')
< When register {regname} was not set the result is an empty
string.
The {regname} argument must be a string.
The {regname} argument must be a string. *E1162*
getreg('=') returns the last evaluated value of the expression
register. (For use in maps.)
@@ -4673,9 +4670,11 @@ islocked({expr}) *islocked()* *E786*
:echo islocked('alist') " 1
:echo islocked('alist[1]') " 0
< 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.
< When {expr} is a variable that does not exist -1 is returned.
If {expr} uses a range, list or dict index that is out of
range or does not exist you get an error message. Use
|exists()| to check for existence.
In Vim9 script it does not work for local function variables.
Can also be used as a |method|: >
GetName()->islocked()
@@ -4787,7 +4786,7 @@ json_encode({expr}) *json_encode()*
Encode {expr} as JSON and return this as a string.
The encoding is specified in:
https://tools.ietf.org/html/rfc7159.html
Vim values are converted as follows:
Vim values are converted as follows: *E1161*
|Number| decimal number
|Float| floating point number
Float nan "NaN"
@@ -4901,7 +4900,7 @@ libcallnr({libname}, {funcname}, {argument})
line({expr} [, {winid}]) *line()*
The result is a Number, which is the line number of the file
position given with {expr}. The {expr} argument is a string.
The accepted positions are:
The accepted positions are: *E1209*
. the cursor position
$ the last line in the current buffer
'x position of mark x (if the mark is not set, 0 is
@@ -6531,7 +6530,7 @@ reduce({object}, {func} [, {initial}]) *reduce()* *E998*
{func} is called for every item in {object}, which can be a
|String|, |List| or a |Blob|. {func} is called with two
arguments: the result so far and current item. After
processing all items the result is returned.
processing all items the result is returned. *E1132*
{initial} is the initial result. When omitted, the first item
in {object} is used and {func} is first called for the second
@@ -7390,7 +7389,7 @@ setcellwidths({list}) *setcellwidths()*
setcellwidths([[0xad, 0xad, 1],
\ [0x2194, 0x2199, 2]])
< *E1109* *E1110* *E1111* *E1112* *E1113*
< *E1109* *E1110* *E1111* *E1112* *E1113* *E1114*
The {list} argument is a list of lists with each three
numbers. These three numbers are [low, high, width]. "low"
and "high" can be the same, in which case this refers to one
@@ -7648,10 +7647,12 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
module name of a module; if given it will be used in
quickfix error window instead of the filename.
lnum line number in the file
end_lnum end of lines, if the item spans multiple lines
pattern search pattern used to locate the error
col column number
vcol when non-zero: "col" is visual column
when zero: "col" is byte index
end_col end column, if the item spans multiple columns
nr error number
text description of the error
type single-character error type, 'E', 'W', etc.

View File

@@ -1,4 +1,4 @@
*change.txt* For Vim version 8.2. Last change: 2021 Dec 29
*change.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -782,7 +782,7 @@ This deletes "TESTING" from all lines, but only one per line.
For compatibility with Vi these two exceptions are allowed:
"\/{string}/" and "\?{string}?" do the same as "//{string}/r".
"\&{string}&" does the same as "//{string}/".
*pattern-delimiter* *E146*
*pattern-delimiter* *E146* *E1241* *E1242*
Instead of the '/' which surrounds the pattern and replacement string, you can
use another single-byte character. This is useful if you want to include a
'/' in the search pattern or replacement string. Example: >
@@ -1076,7 +1076,7 @@ inside of strings can change! Also see 'softtabstop' option. >
in [range] (default: current line |cmdline-ranges|),
[into register x].
*p* *put* *E353*
*p* *put* *E353* *E1240*
["x]p Put the text [from register x] after the cursor
[count] times.
@@ -1176,10 +1176,13 @@ register. With blockwise selection it also depends on the size of the block
and whether the corners are on an existing character. (Implementation detail:
it actually works by first putting the register after the selection and then
deleting the selection.)
The previously selected text is put in the unnamed register. If you want to
put the same text into a Visual selection several times you need to use
With 'p' the previously selected text is put in the unnamed register. This is
useful if you want to put that text somewhere else. But you cannot repeat the
same change.
With 'P' the unnamed register is not changed, you can repeat the same change.
But the deleted text cannot be used. If you do need it you can use 'p' with
another register. E.g., yank the text to copy, Visually select the text to
replace and use "0p . You can repeat this as many times as you like, the
replace and use "0p . You can repeat this as many times as you like, and the
unnamed register will be changed each time.
When you use a blockwise Visual mode command and yank only a single line into

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 8.2. Last change: 2022 Jan 08
*cmdline.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -730,7 +730,7 @@ If more line specifiers are given than required for the command, the first
one(s) will be ignored.
Line numbers may be specified with: *:range* *{address}*
{number} an absolute line number
{number} an absolute line number *E1247*
. the current line *:.*
$ the last line in the file *:$*
% equal to 1,$ (the entire file) *:%*

View File

@@ -1,4 +1,4 @@
*editing.txt* For Vim version 8.2. Last change: 2022 Jan 21
*editing.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -633,7 +633,7 @@ list of the current window.
Also see |++opt| and |+cmd|.
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
:[count]arga[dd]
:[count]arga[dd] *E1156*
Add the {name}s to the argument list. When {name} is
omitted add the current buffer name to the argument
list.
@@ -1650,6 +1650,11 @@ If you don't get warned often enough you can use the following command.
if it exists now.
Once a file has been checked the timestamp is reset,
you will not be warned again.
Syntax highlighting, marks, diff status,
'fileencoding', 'fileformat' and 'binary' options
are not changed. See |v:fcs_choice| to reload these
too (for example, if a code formatting tools has
changed the file).
:[N]checkt[ime] {filename}
:[N]checkt[ime] [N]
@@ -1772,10 +1777,8 @@ There are three different types of searching:
/u/user_x/include
< Note: If your 'path' setting includes a non-existing directory, Vim will
skip the non-existing directory, but continues searching in the parent of
the non-existing directory if upwards searching is used. E.g. when
searching "../include" and that doesn't exist, and upward searching is
used, also searches in "..".
skip the non-existing directory, and also does not search in the parent of
the non-existing directory if upwards searching is used.
3) Combined up/downward search:
If Vim's current path is /u/user_x/work/release and you do >

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.2. Last change: 2022 Jan 21
*eval.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -44,7 +44,8 @@ Profiling is documented at |profiling|.
1. Variables *variables*
1.1 Variable types ~
*E712* *E896* *E897* *E899*
*E712* *E896* *E897* *E899* *E1098*
*E1107* *E1135* *E1138*
There are ten types of variables:
*Number* *Integer*
@@ -180,7 +181,7 @@ You will not get an error if you try to change the type of a variable.
1.2 Function references ~
*Funcref* *E695* *E718*
*Funcref* *E695* *E718* *E1086* *E1192*
A Funcref variable is obtained with the |function()| function, the |funcref()|
function or created with the lambda expression |expr-lambda|. It can be used
in an expression in the place of a function name, before the parenthesis
@@ -764,7 +765,7 @@ length minus one is used: >
Blob modification ~
*blob-modification*
*blob-modification* *E1182* *E1184*
To change a specific byte of a blob use |:let| this way: >
:let blob[4] = 0x44
@@ -835,7 +836,7 @@ In legacy script it is possible to form a variable name with curly braces, see
==============================================================================
2. Expression syntax *expression-syntax*
*E1143*
Expression syntax summary, from least to most significant:
|expr1| expr2
@@ -916,6 +917,9 @@ Example: >
All expressions within one level are parsed from left to right.
Expression nesting is limited to 1000 levels deep (300 when build with MSVC)
to avoid running out of stack and crashing. *E1169*
expr1 *expr1* *trinary* *falsy-operator* *??* *E109*
-----
@@ -1014,7 +1018,7 @@ This is valid whether "b" has been defined or not. The second clause will
only be evaluated if "b" has been defined.
expr4 *expr4*
expr4 *expr4* *E1153*
-----
expr5 {cmp} expr5
@@ -1172,6 +1176,7 @@ When dividing a Number by zero the result depends on the value:
>0 / 0 = 0x7fffffff (like positive infinity)
<0 / 0 = -0x7fffffff (like negative infinity)
(before Vim 7.2 it was always 0x7fffffff)
In |Vim9| script dividing a number by zero is an error. *E1154*
When 64-bit Number support is enabled:
0 / 0 = -0x8000000000000000 (like NaN for Float)
@@ -1239,7 +1244,7 @@ recognize multibyte encodings, see `byteidx()` for an alternative, or use
byte under the cursor: >
:let c = getline(".")[col(".") - 1]
In |Vim9| script:
In |Vim9| script: *E1147* *E1148*
If expr9 is a String this results in a String that contains the expr1'th
single character (including any composing characters) from expr9. To use byte
indexes use |strpart()|.
@@ -1319,7 +1324,7 @@ for a sublist: >
expr9.name entry in a |Dictionary| *expr-entry*
*E1203* *E1229*
If expr9 is a |Dictionary| and it is followed by a dot, then the following
name will be used as a key in the |Dictionary|. This is just like:
expr9[name].
@@ -1339,14 +1344,14 @@ Note that the dot is also used for String concatenation. To avoid confusion
always put spaces around the dot for String concatenation.
expr9(expr1, ...) |Funcref| function call
expr9(expr1, ...) |Funcref| function call *E1085*
When expr9 is a |Funcref| type variable, invoke the function it refers to.
expr9->name([args]) method call *method* *->*
expr9->{lambda}([args])
*E260* *E276*
*E260* *E276* *E1265*
For methods that are also available as global functions this is the same as: >
name(expr9 [, args])
There can also be methods specifically for the type of "expr9".
@@ -1546,7 +1551,7 @@ When using the '=' register you get the expression itself, not what it
evaluates to. Use |eval()| to evaluate it.
nesting *expr-nesting* *E110*
nesting *expr-nesting* *E110*
-------
(expr1) nested expression
@@ -1577,7 +1582,7 @@ The first one probably doesn't echo anything, the second echoes the $shell
variable (if your shell supports it).
internal variable *expr-variable* *E1015*
internal variable *expr-variable* *E1015* *E1089*
-----------------
variable internal variable
See below |internal-variables|.
@@ -2065,6 +2070,11 @@ v:fcs_choice What should happen after a |FileChangedShell| event was
do with the affected buffer:
reload Reload the buffer (does not work if
the file was deleted).
edit Reload the buffer and detect the
values for options such as
'fileformat', 'fileencoding', 'binary'
(does not work if the file was
deleted).
ask Ask the user what to do, as if there
was no autocommand. Except that when
only the timestamp changed nothing
@@ -2690,7 +2700,7 @@ See |:verbose-cmd| for more information.
implies that the effect of |:nohlsearch| is undone
when the function returns.
*:endf* *:endfunction* *E126* *E193* *W22*
*:endf* *:endfunction* *E126* *E193* *W22* *E1151*
:endf[unction] [argument]
The end of a function definition. Best is to put it
on a line by its own, without [argument].
@@ -2709,7 +2719,7 @@ See |:verbose-cmd| for more information.
command, use line breaks instead of |:bar|: >
:exe "func Foo()\necho 'foo'\nendfunc"
<
*:delf* *:delfunction* *E131* *E933*
*:delf* *:delfunction* *E131* *E933* *E1084*
:delf[unction][!] {name}
Delete function {name}.
{name} can also be a |Dictionary| entry that is a
@@ -2726,8 +2736,11 @@ See |:verbose-cmd| for more information.
If "[expr]" is not given, the number 0 is returned.
When a function ends without an explicit ":return",
the number 0 is returned.
Note that there is no check for unreachable lines,
thus there is no warning if commands follow ":return".
In a :def function *E1095* is given if unreachable
code follows after the `:return`.
In legacy script there is no check for unreachable
lines, thus there is no warning if commands follow
`:return`.
If the ":return" is used after a |:try| but before the
matching |:finally| (if present), the commands
@@ -2746,7 +2759,7 @@ may optionally be following. In the function the extra arguments can be used
as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which
can be 0). "a:000" is set to a |List| that contains these arguments. Note
that "a:1" is the same as "a:000[0]".
*E742*
*E742* *E1090*
The a: scope and the variables in it cannot be changed, they are fixed.
However, if a composite type is used, such as |List| or |Dictionary| , you can
change their contents. Thus you can pass a |List| to a function and have the
@@ -3054,7 +3067,7 @@ declarations and assignments do not use a command. |vim9-declaration|
from the {expr}. If {var-name} didn't exist yet, it
is created.
:let {var-name}[{idx}] = {expr1} *E689*
:let {var-name}[{idx}] = {expr1} *E689* *E1141*
Set a list item to the result of the expression
{expr1}. {var-name} must refer to a list and {idx}
must be a valid index in that list. For nested list
@@ -3067,7 +3080,7 @@ declarations and assignments do not use a command. |vim9-declaration|
length of the blob, in which case one byte is
appended.
*E711* *E719*
*E711* *E719* *E1165* *E1166* *E1183*
:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710*
Set a sequence of items in a |List| to the result of
the expression {expr1}, which must be a list with the
@@ -3161,7 +3174,7 @@ declarations and assignments do not use a command. |vim9-declaration|
:let &g:{option-name} -= {expr1}
Like above, but only set the global value of an option
(if there is one). Works like |:setglobal|.
*E1093*
:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688*
{expr1} must evaluate to a |List|. The first item in
the list is assigned to {name1}, the second item to
@@ -3202,7 +3215,7 @@ declarations and assignments do not use a command. |vim9-declaration|
|List| item.
*:let=<<* *:let-heredoc*
*E990* *E991* *E172* *E221*
*E990* *E991* *E172* *E221* *E1145*
:let {var-name} =<< [trim] {endmarker}
text...
text...
@@ -3355,7 +3368,7 @@ text...
:lockvar v
:let v = 'asdf' " fails!
:unlet v " works
< *E741* *E940*
< *E741* *E940* *E1118* *E1119* *E1120* *E1121* *E1122*
If you try to change a locked variable you get an
error message: "E741: Value is locked: {name}".
If you try to lock or unlock a built-in variable you
@@ -3403,7 +3416,7 @@ text...
See |deepcopy()|.
:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo*
:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* *E1246*
Unlock the internal variable {name}. Does the
opposite of |:lockvar|.
@@ -3464,7 +3477,7 @@ text...
:endfo[r] *:endfo* *:endfor*
Repeat the commands between ":for" and ":endfor" for
each item in {object}. {object} can be a |List| or
a |Blob|.
a |Blob|. *E1177*
Variable {var} is set to the value of each item.
In |Vim9| script the loop variable must not have been
@@ -3498,7 +3511,7 @@ text...
|Blob| does not affect the iteration.
:for [{var1}, {var2}, ...] in {listlist}
:endfo[r]
:endfo[r] *E1140*
Like ":for" above, but each item in {listlist} must be
a list, of which each item is assigned to {var1},
{var2}, etc. Example: >
@@ -3601,7 +3614,7 @@ text...
|:break|, |:finish|, or |:return|, or by an error or
interrupt or exception (see |:throw|).
*:th* *:throw* *E608*
*:th* *:throw* *E608* *E1129*
:th[row] {expr1} The {expr1} is evaluated and thrown as an exception.
If the ":throw" is used after a |:try| but before the
first corresponding |:catch|, commands are skipped
@@ -3718,6 +3731,9 @@ text...
the `append()` call appends the List with text to the
buffer. This is similar to `:call` but works with any
expression.
In |Vim9| script an expression without an effect will
result in error *E1207* . This should help noticing
mistakes.
The command can be shortened to `:ev` or `:eva`, but
these are hard to recognize and therefore not to be
@@ -4885,6 +4901,9 @@ explicit the |:scriptversion| command can be used. When a Vim script is not
compatible with older versions of Vim this will give an explicit error,
instead of failing in mysterious ways.
When using a legacy function, defined with `:function`, in |Vim9| script then
scriptversion 4 is used.
*scriptversion-1* >
:scriptversion 1
< This is the original Vim script, same as not using a |:scriptversion|

View File

@@ -142,7 +142,8 @@ variables can be used to overrule the filetype used for certain extensions:
*.asm g:asmsyntax |ft-asm-syntax|
*.asp g:filetype_asp |ft-aspvbs-syntax| |ft-aspperl-syntax|
*.bas g:filetype_bas |ft-basic-syntax|
*.fs g:filetype_fs |ft-forth-syntax|
*.frm g:filetype_frm |ft-form-syntax|
*.fs g:filetype_fs |ft-forth-syntax|
*.i g:filetype_i |ft-progress-syntax|
*.inc g:filetype_inc
*.m g:filetype_m |ft-mathematica-syntax|

View File

@@ -1,4 +1,4 @@
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 08
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 28
VIM REFERENCE MANUAL by Sven Verdoolaege
@@ -103,7 +103,7 @@ Here are some things you can try: >
:perldo $_ = reverse($_);1
:perl VIM::Msg("hello")
:perl $line = $curbuf->Get(42)
<
< *E299*
Executing Perl commands in the |sandbox| is limited. ":perldo" will not be
possible at all. ":perl" will be evaluated in the Safe environment, if
possible.

View File

@@ -1,4 +1,4 @@
*if_pyth.txt* For Vim version 8.2. Last change: 2021 Nov 12
*if_pyth.txt* For Vim version 8.2. Last change: 2022 Feb 07
VIM REFERENCE MANUAL by Paul Moore
@@ -65,7 +65,7 @@ There is no need to import sys, it's done by default.
*python-environment*
Environment variables set in Vim are not always available in Python. This
depends on how Vim and Python were build. Also see
depends on how Vim and Python were built. Also see
https://docs.python.org/3/library/os.html#os.environ
Note: Python is very sensitive to the indenting. Make sure the "class" line
@@ -834,6 +834,19 @@ To work around such problems there are these options:
Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
:py vim.command("qall!")
<
*E1266*
This error can occur when python 3 cannot load the required modules. This
means that your python 3 is not correctly installed or there are some mistakes
in your settings. Please check the following items:
1. Make sure that python 3 is correctly installed. Also check the version of
python.
2. Check the 'pythonthreedll' option.
3. Check the 'pythonthreehome' option.
4. Check the PATH environment variable if you don't set 'pythonthreedll'.
On MS-Windows, you can use where.exe to check which dll will be loaded.
E.g. >
where.exe python310.dll
5. Check the PYTHONPATH and PYTHONHOME environment variables.
*has-python*
You can test what Python version is available with: >

View File

@@ -1,4 +1,4 @@
*indent.txt* For Vim version 8.2. Last change: 2019 Dec 07
*indent.txt* For Vim version 8.2. Last change: 2022 Jan 31
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -778,6 +778,15 @@ You can set the indent for the first line after <script> and <style>
"auto" auto indent (same indent as the blocktag)
"inc" auto indent + one indent step
You can set the indent for attributes after an open <tag line: >
:let g:html_indent_attribute = 1
<
VALUE MEANING ~
1 auto indent, one indent step more than <tag
2 auto indent, two indent steps (default)
> 2 auto indent, more indent steps
Many tags increase the indent for what follows per default (see "Add Indent
Tags" in the script). You can add further tags with: >

View File

@@ -1,4 +1,4 @@
*index.txt* For Vim version 8.2. Last change: 2021 Aug 31
*index.txt* For Vim version 8.2. Last change: 2022 Feb 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -937,7 +937,9 @@ tag command note action in Visual mode ~
before the highlighted area
|v_J| J 2 join the highlighted lines
|v_K| K run 'keywordprg' on the highlighted area
|v_O| O Move horizontally to other corner of area.
|v_O| O move horizontally to other corner of area
|v_P| P replace highlighted area with register
contents; unnamed register is unchanged
Q does not start Ex mode
|v_R| R 2 delete the highlighted lines and start
insert
@@ -1000,6 +1002,8 @@ tag command note action in Visual mode ~
|v_i{| i{ same as iB
|v_i}| i} same as iB
|v_o| o move cursor to other corner of area
|v_p| p replace highlighted area with register
contents; deleted text in unnamed register
|v_r| r 2 replace highlighted area with a character
|v_s| s 2 delete highlighted area and start insert
|v_u| u 2 make highlighted area lowercase
@@ -1148,7 +1152,7 @@ tag command action ~
|:&| :& repeat last ":substitute"
|:star| :* execute contents of a register
|:<| :< shift lines one 'shiftwidth' left
|:=| := print the cursor line number
|:=| := print the last line number
|:>| :> shift lines one 'shiftwidth' right
|:@| :@ execute contents of a register
|:@@| :@@ repeat the previous ":@"

View File

@@ -1,4 +1,4 @@
*message.txt* For Vim version 8.2. Last change: 2022 Jan 19
*message.txt* For Vim version 8.2. Last change: 2022 Jan 26
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -82,7 +82,6 @@ LIST OF MESSAGES
Add to read buffer ~
makemap: Illegal mode ~
Cannot create BalloonEval with both message and callback ~
Hangul automata ERROR ~
block was not locked ~
Didn't get block nr {N}? ~
ml_upd_block0(): Didn't get block 0?? ~
@@ -92,12 +91,12 @@ LIST OF MESSAGES
u_undo: line numbers wrong ~
undo list corrupt ~
undo line missing ~
ml_get: cannot find line {N} ~
cannot find line {N} ~
ml_get: cannot find line {N} in buffer {nr} {name} ~
line number out of range: {N} past the end ~
line count wrong in block {N} ~
Internal error ~
Internal error: lalloc(0, ) ~
Internal error: {function} ~
Internal error in regexp ~
fatal error in cs_manage_matches ~
Invalid count for del_bytes(): {N} ~
@@ -728,6 +727,7 @@ specified.
*E488*
Trailing characters ~
Trailing characters: {text} ~
An argument has been added to an Ex command that does not permit one.
Or the argument has invalid characters and has not been recognized.
@@ -798,7 +798,7 @@ This is an (incomplete) overview of various messages that Vim gives:
*hit-enter* *press-enter* *hit-return*
*press-return* *hit-enter-prompt*
Press ENTER or type command to continue
Press ENTER or type command to continue ~
This message is given when there is something on the screen for you to read,
and the screen is about to be redrawn:

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2022 Jan 22
*options.txt* For Vim version 8.2. Last change: 2022 Feb 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -800,6 +800,7 @@ A jump table for the options with a short description can be found at |Q_op|.
need proper setting-up, so whenever the shell's pwd changes an OSC 7
escape sequence will be emitted. For example, on Linux, you can source
/etc/profile.d/vte.sh in your shell profile if you use bash or zsh.
When the parsing of the OSC sequence fails you get *E1179* .
*'arabic'* *'arab'* *'noarabic'* *'noarab'*
'arabic' 'arab' boolean (default off)
@@ -1558,8 +1559,8 @@ A jump table for the options with a short description can be found at |Q_op|.
preferred, because it is much faster.
'charconvert' is not used when reading stdin |--|, because there is no
file to convert from. You will have to save the text in a file first.
The expression must return zero or an empty string for success,
non-zero for failure.
The expression must return zero, false or an empty string for success,
non-zero or true for failure.
The possible encoding names encountered are in 'encoding'.
Additionally, names given in 'fileencodings' and 'fileencoding' are
used.
@@ -1583,9 +1584,18 @@ A jump table for the options with a short description can be found at |Q_op|.
Note that v:fname_in and v:fname_out will never be the same.
Note that v:charconvert_from and v:charconvert_to may be different
from 'encoding'. Vim internally uses UTF-8 instead of UCS-2 or UCS-4.
Encryption is not done by Vim when using 'charconvert'. If you want
to encrypt the file after conversion, 'charconvert' should take care
of this.
If the 'charconvert' expression starts with s: or |<SID>|, then it is
replaced with the script ID (|local-function|). Example: >
set charconvert=s:MyConvert()
set charconvert=<SID>SomeConvert()
< Otherwise the expression is evaluated in the context of the script
where the option was set, thus script-local items are available.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
@@ -2467,7 +2477,7 @@ A jump table for the options with a short description can be found at |Q_op|.
you write the file the encrypted bytes will be
different. The whole undo file is encrypted, not just
the pieces of text.
*E1193* *E1194* *E1195* *E1196*
*E1193* *E1194* *E1195* *E1196* *E1230*
*E1197* *E1198* *E1199* *E1200* *E1201*
xchacha20 XChaCha20 Cipher with Poly1305 Message Authentication
Code. Medium strong till strong encryption.
@@ -6714,6 +6724,9 @@ A jump table for the options with a short description can be found at |Q_op|.
See |option-backslash| about including spaces and backslashes.
Environment variables are expanded |:set_env|.
In |restricted-mode| shell commands will not be possible. This mode
is used if the value of $SHELL ends in "false" or "nologin".
If the name of the shell contains a space, you need to enclose it in
quotes and escape the space. Example with quotes: >
:set shell=\"c:\program\ files\unix\sh.exe\"\ -f
@@ -7363,6 +7376,12 @@ A jump table for the options with a short description can be found at |Q_op|.
suggestions is never more than the value of 'lines'
minus two.
timeout:{millisec} Limit the time searching for suggestions to
{millisec} milli seconds. Applies to the following
methods. When omitted the limit is 5000. When
negative there is no limit. {only works when built
with the +reltime feature}
file:{filename} Read file {filename}, which must have two columns,
separated by a slash. The first column contains the
bad word, the second column the suggested good word.
@@ -7771,10 +7790,11 @@ A jump table for the options with a short description can be found at |Q_op|.
'tabstop' 'ts' number (default 8)
local to buffer
Number of spaces that a <Tab> in the file counts for. Also see
|:retab| command, and 'softtabstop' option.
the |:retab| command, and the 'softtabstop' option.
Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).
appear wrong in many places, e.g., when printing it.
The value must be more than 0 and less than 10000.
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
@@ -8954,7 +8974,8 @@ A jump table for the options with a short description can be found at |Q_op|.
mode. On pressing 'wildchar' (usually <Tab>) to invoke completion,
the possible matches are shown just above the command line, with the
first match highlighted (overwriting the status line, if there is
one). Keys that show the previous/next match, such as <Tab> or
one). This is the behavior without "pum" in 'wildoptions.
Keys that show the previous/next match, such as <Tab> or
CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
When 'wildmode' is used, "wildmenu" mode is used where "full" is
specified. "longest" and "list" do not start "wildmenu" mode.
@@ -8962,10 +8983,12 @@ A jump table for the options with a short description can be found at |Q_op|.
If there are more matches than can fit in the line, a ">" is shown on
the right and/or a "<" is shown on the left. The status line scrolls
as needed.
When 'wildoptions' contains "pum", then the completion matches are
shown in a popup menu.
The "wildmenu" mode is abandoned when a key is hit that is not used
for selecting a completion.
While the "wildmenu" is active the following keys have special
meanings:
While the "wildmenu" is active, not using the popup menu, the
following keys have special meanings:
<Left> <Right> - select previous/next match (like CTRL-P/CTRL-N)
<Down> - in filename/menu name completion: move into a
@@ -8975,6 +8998,21 @@ A jump table for the options with a short description can be found at |Q_op|.
<Up> - in filename/menu name completion: move up into
parent directory or parent menu.
When using the popup menu for command line completion, the following
keys have special meanings:
<Down> - select next match (like CTRL-N)
<Left> - in filename/menu name completion: move up into
parent directory or parent menu.
<Right> - in filename/menu name completion: move into a
subdirectory or submenu.
<Up> - select previous match (like CTRL-P)
CTRL-E - end completion, go back to what was there before
selecting a match.
CTRL-N - go to the next entry
CTRL-P - go to the previous entry
CTRL-Y - accept the currently selected match and stop
completion.
This makes the menus accessible from the console |console-menus|.
If you prefer the <Left> and <Right> keys to move the cursor instead
@@ -9037,14 +9075,15 @@ A jump table for the options with a short description can be found at |Q_op|.
global
{not available when compiled without the |+wildignore|
feature}
A list of words that change how command line completion is done.
Currently only one word is allowed:
A list of words that change how |cmdline-completion| is done.
The following values are supported:
pum Display the completion matches using the popupmenu
in the same style as the |ins-completion-menu|.
tagfile When using CTRL-D to list matching tags, the kind of
tag and the file of the tag is listed. Only one match
is displayed per line. Often used tag kinds are:
d #define
f function
Also see |cmdline-completion|.
*'winaltkeys'* *'wak'*
'winaltkeys' 'wak' string (default "menu")

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.2. Last change: 2022 Jan 08
*pattern.txt* For Vim version 8.2. Last change: 2022 Feb 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -925,7 +925,7 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
becomes invalid. Vim doesn't automatically update the matches.
Similar to moving the cursor for "\%#" |/\%#|.
*/\%l* */\%>l* */\%<l* *E951*
*/\%l* */\%>l* */\%<l* *E951* *E1204*
\%23l Matches in a specific line.
\%<23l Matches above a specific line (lower line number).
\%>23l Matches below a specific line (higher line number).

View File

@@ -1,4 +1,4 @@
*print.txt* For Vim version 8.2. Last change: 2021 Oct 04
*print.txt* For Vim version 8.2. Last change: 2022 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -178,7 +178,9 @@ If the expression starts with s: or |<SID>|, then it is replaced with the
script ID (|local-function|). Example: >
set printexpr=s:MyPrintFile()
set printexpr=<SID>SomePrintFile()
<
Otherwise, the expression is evaluated in the context of the script where the
option was set, thus script-local items are available.
This option cannot be set from a |modeline| or in the |sandbox|, for security
reasons.

View File

@@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 8.2. Last change: 2022 Jan 04
*quickfix.txt* For Vim version 8.2. Last change: 2022 Feb 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1385,12 +1385,17 @@ Basic items
%f file name (finds a string)
%o module name (finds a string)
%l line number (finds a number)
%e end line number (finds a number)
%c column number (finds a number representing character
column of the error, byte index, a <tab> is 1
character column)
%v virtual column number (finds a number representing
screen column of the error (1 <tab> == 8 screen
columns))
%k end column number (finds a number representing
the character column of the error, byte index, or a
number representing screen end column of the error if
it's used with %v)
%t error type (finds a single character):
e - error message
w - warning message

View File

@@ -1,4 +1,4 @@
*starting.txt* For Vim version 8.2. Last change: 2022 Jan 20
*starting.txt* For Vim version 8.2. Last change: 2022 Feb 01
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -256,6 +256,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
Interfaces, such as Python, Ruby and Lua, are also disabled,
since they could be used to execute shell commands. Perl uses
the Safe module.
For Unix restricted mode is used when the last part of $SHELL
is "nologin" or "false".
Note that the user may still find a loophole to execute a
shell command, it has only been made difficult.

View File

@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 8.2. Last change: 2021 Nov 20
*syntax.txt* For Vim version 8.2. Last change: 2022 Feb 06
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -215,7 +215,8 @@ A syntax group name doesn't specify any color or attributes itself.
The name for a highlight or syntax group must consist of ASCII letters, digits
and the underscore. As a regexp: "[a-zA-Z0-9_]*". However, Vim does not give
an error when using other characters.
an error when using other characters. The maxium length of a group name is
about 200 bytes. *E1249*
To be able to allow each user to pick their favorite set of colors, there must
be preferred names for highlight groups that are common for many languages.
@@ -1536,6 +1537,14 @@ The enhanced mode also takes advantage of additional color features for a dark
gvim display. Here, statements are colored LightYellow instead of Yellow, and
conditionals are LightBlue for better distinction.
Both Visual Basic and FORM use the extension ".frm". To detect which one
should be used, Vim checks for the string "VB_Name" in the first five lines of
the file. If it is found, filetype will be "vb", otherwise "form".
If the automatic detection doesn't work for you or you only edit, for
example, FORM files, use this in your startup vimrc: >
:let filetype_frm = "form"
FORTH *forth.vim* *ft-forth-syntax*
@@ -3704,12 +3713,13 @@ DEFINING CASE *:syn-case* *E390*
items until the next ":syntax case" command are affected.
:sy[ntax] case
Show either "syntax case match" or "syntax case ignore" (translated).
Show either "syntax case match" or "syntax case ignore".
DEFINING FOLDLEVEL *:syn-foldlevel*
:sy[ntax] foldlevel [start | minimum]
:sy[ntax] foldlevel start
:sy[ntax] foldlevel minimum
This defines how the foldlevel of a line is computed when using
foldmethod=syntax (see |fold-syntax| and |:syn-fold|):
@@ -3722,13 +3732,16 @@ DEFINING FOLDLEVEL *:syn-foldlevel*
may close and open horizontally within a line.
:sy[ntax] foldlevel
Show either "syntax foldlevel start" or "syntax foldlevel minimum".
Show the current foldlevel method, either "syntax foldlevel start" or
"syntax foldlevel minimum".
{not meaningful when Vim was compiled without |+folding| feature}
SPELL CHECKING *:syn-spell*
:sy[ntax] spell [toplevel | notoplevel | default]
:sy[ntax] spell toplevel
:sy[ntax] spell notoplevel
:sy[ntax] spell default
This defines where spell checking is to be done for text that is not
in a syntax item:
@@ -3743,8 +3756,8 @@ SPELL CHECKING *:syn-spell*
To activate spell checking the 'spell' option must be set.
:sy[ntax] spell
Show either "syntax spell toplevel", "syntax spell notoplevel" or
"syntax spell default" (translated).
Show the current syntax spell checking method, either "syntax spell
toplevel", "syntax spell notoplevel" or "syntax spell default".
SYNTAX ISKEYWORD SETTING *:syn-iskeyword*
@@ -4343,7 +4356,7 @@ IMPLICIT CONCEAL *:syn-conceal-implicit*
given explicitly.
:sy[ntax] conceal
Show either "syntax conceal on" or "syntax conceal off" (translated).
Show either "syntax conceal on" or "syntax conceal off".
==============================================================================
8. Syntax patterns *:syn-pattern* *E401* *E402*

View File

@@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 8.2. Last change: 2020 Oct 14
*tabpage.txt* For Vim version 8.2. Last change: 2022 Feb 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -143,7 +143,9 @@ something else.
:tabclose 3 " close the third tab page
:tabclose $ " close the last tab page
:tabclose # " close the last accessed tab page
<
When a tab is closed the next tab page will become the current one.
*:tabo* *:tabonly*
:tabo[nly][!] Close all other tab pages.
When the 'hidden' option is set, all buffers in closed windows

View File

@@ -3948,6 +3948,7 @@ Dictionary-function eval.txt /*Dictionary-function*
DiffUpdated autocmd.txt /*DiffUpdated*
Digraphs digraph.txt /*Digraphs*
DirChanged autocmd.txt /*DirChanged*
DirChangedPre autocmd.txt /*DirChangedPre*
E motion.txt /*E*
E10 message.txt /*E10*
E100 diff.txt /*E100*
@@ -4033,30 +4034,126 @@ E1077 vim9.txt /*E1077*
E108 eval.txt /*E108*
E1081 eval.txt /*E1081*
E1083 editing.txt /*E1083*
E1084 eval.txt /*E1084*
E1085 eval.txt /*E1085*
E1086 eval.txt /*E1086*
E1087 vim9.txt /*E1087*
E1089 eval.txt /*E1089*
E109 eval.txt /*E109*
E1090 eval.txt /*E1090*
E1091 vim9.txt /*E1091*
E1092 various.txt /*E1092*
E1093 eval.txt /*E1093*
E1094 vim9.txt /*E1094*
E1095 eval.txt /*E1095*
E1096 vim9.txt /*E1096*
E1097 vim9.txt /*E1097*
E1098 eval.txt /*E1098*
E1099 vim9.txt /*E1099*
E11 cmdline.txt /*E11*
E110 eval.txt /*E110*
E1100 vim9.txt /*E1100*
E1101 vim9.txt /*E1101*
E1102 vim9.txt /*E1102*
E1103 vim9.txt /*E1103*
E1104 vim9.txt /*E1104*
E1105 vim9.txt /*E1105*
E1106 vim9.txt /*E1106*
E1107 eval.txt /*E1107*
E1108 vim9.txt /*E1108*
E1109 builtin.txt /*E1109*
E111 eval.txt /*E111*
E1110 builtin.txt /*E1110*
E1111 builtin.txt /*E1111*
E1112 builtin.txt /*E1112*
E1113 builtin.txt /*E1113*
E1114 builtin.txt /*E1114*
E1115 testing.txt /*E1115*
E1116 testing.txt /*E1116*
E1117 vim9.txt /*E1117*
E1118 eval.txt /*E1118*
E1119 eval.txt /*E1119*
E112 eval.txt /*E112*
E1120 eval.txt /*E1120*
E1121 eval.txt /*E1121*
E1122 eval.txt /*E1122*
E1123 vim9.txt /*E1123*
E1124 vim9.txt /*E1124*
E1125 vim9.txt /*E1125*
E1126 vim9.txt /*E1126*
E1127 vim9.txt /*E1127*
E1128 vim9.txt /*E1128*
E1129 eval.txt /*E1129*
E113 eval.txt /*E113*
E1130 vim9.txt /*E1130*
E1131 vim9.txt /*E1131*
E1132 builtin.txt /*E1132*
E1133 vim9.txt /*E1133*
E1134 vim9.txt /*E1134*
E1135 eval.txt /*E1135*
E1136 map.txt /*E1136*
E1137 map.txt /*E1137*
E1138 eval.txt /*E1138*
E1139 vim9.txt /*E1139*
E114 eval.txt /*E114*
E1140 eval.txt /*E1140*
E1141 eval.txt /*E1141*
E1142 testing.txt /*E1142*
E1143 eval.txt /*E1143*
E1144 vim9.txt /*E1144*
E1145 eval.txt /*E1145*
E1146 vim9.txt /*E1146*
E1147 eval.txt /*E1147*
E1148 eval.txt /*E1148*
E1149 vim9.txt /*E1149*
E115 eval.txt /*E115*
E1150 vim9.txt /*E1150*
E1151 eval.txt /*E1151*
E1152 vim9.txt /*E1152*
E1153 eval.txt /*E1153*
E1154 eval.txt /*E1154*
E1155 autocmd.txt /*E1155*
E1156 editing.txt /*E1156*
E1157 vim9.txt /*E1157*
E1158 vim9.txt /*E1158*
E1159 windows.txt /*E1159*
E116 eval.txt /*E116*
E1160 vim9.txt /*E1160*
E1161 builtin.txt /*E1161*
E1162 builtin.txt /*E1162*
E1163 vim9.txt /*E1163*
E1164 vim9.txt /*E1164*
E1165 eval.txt /*E1165*
E1166 eval.txt /*E1166*
E1167 vim9.txt /*E1167*
E1168 vim9.txt /*E1168*
E1169 eval.txt /*E1169*
E117 eval.txt /*E117*
E1170 vim9.txt /*E1170*
E1171 vim9.txt /*E1171*
E1172 vim9.txt /*E1172*
E1173 vim9.txt /*E1173*
E1174 vim9.txt /*E1174*
E1175 vim9.txt /*E1175*
E1176 vim9.txt /*E1176*
E1177 eval.txt /*E1177*
E1178 vim9.txt /*E1178*
E1179 options.txt /*E1179*
E118 eval.txt /*E118*
E1180 vim9.txt /*E1180*
E1181 vim9.txt /*E1181*
E1182 eval.txt /*E1182*
E1183 eval.txt /*E1183*
E1184 eval.txt /*E1184*
E1185 various.txt /*E1185*
E1186 vim9.txt /*E1186*
E1187 starting.txt /*E1187*
E1188 cmdline.txt /*E1188*
E1189 vim9.txt /*E1189*
E119 eval.txt /*E119*
E1190 vim9.txt /*E1190*
E1191 vim9.txt /*E1191*
E1192 eval.txt /*E1192*
E1193 options.txt /*E1193*
E1194 options.txt /*E1194*
E1195 options.txt /*E1195*
@@ -4068,25 +4165,77 @@ E12 message.txt /*E12*
E120 eval.txt /*E120*
E1200 options.txt /*E1200*
E1201 options.txt /*E1201*
E1205 builtin.txt /*E1205*
E1202 vim9.txt /*E1202*
E1203 eval.txt /*E1203*
E1204 pattern.txt /*E1204*
E1205 vim9.txt /*E1205*
E1206 vim9.txt /*E1206*
E1207 eval.txt /*E1207*
E1208 map.txt /*E1208*
E1209 builtin.txt /*E1209*
E121 eval.txt /*E121*
E1210 vim9.txt /*E1210*
E1211 vim9.txt /*E1211*
E1212 vim9.txt /*E1212*
E1213 vim9.txt /*E1213*
E1214 builtin.txt /*E1214*
E1215 builtin.txt /*E1215*
E1216 builtin.txt /*E1216*
E1217 vim9.txt /*E1217*
E1218 vim9.txt /*E1218*
E1219 vim9.txt /*E1219*
E122 eval.txt /*E122*
E1220 vim9.txt /*E1220*
E1221 vim9.txt /*E1221*
E1222 vim9.txt /*E1222*
E1223 vim9.txt /*E1223*
E1224 vim9.txt /*E1224*
E1225 vim9.txt /*E1225*
E1226 vim9.txt /*E1226*
E1227 vim9.txt /*E1227*
E1228 vim9.txt /*E1228*
E1229 eval.txt /*E1229*
E123 eval.txt /*E123*
E1230 options.txt /*E1230*
E1231 map.txt /*E1231*
E1232 builtin.txt /*E1232*
E1233 builtin.txt /*E1233*
E1234 vim9.txt /*E1234*
E1235 vim9.txt /*E1235*
E1236 vim9.txt /*E1236*
E1237 map.txt /*E1237*
E1238 vim9.txt /*E1238*
E1239 builtin.txt /*E1239*
E124 eval.txt /*E124*
E1240 change.txt /*E1240*
E1241 change.txt /*E1241*
E1242 change.txt /*E1242*
E1243 options.txt /*E1243*
E1244 message.txt /*E1244*
E1245 cmdline.txt /*E1245*
E1246 eval.txt /*E1246*
E1247 cmdline.txt /*E1247*
E1248 vim9.txt /*E1248*
E1249 syntax.txt /*E1249*
E125 eval.txt /*E125*
E1250 vim9.txt /*E1250*
E1251 vim9.txt /*E1251*
E1252 vim9.txt /*E1252*
E1253 vim9.txt /*E1253*
E1254 vim9.txt /*E1254*
E1255 map.txt /*E1255*
E1256 vim9.txt /*E1256*
E1257 vim9.txt /*E1257*
E1258 vim9.txt /*E1258*
E1259 vim9.txt /*E1259*
E126 eval.txt /*E126*
E1260 vim9.txt /*E1260*
E1261 vim9.txt /*E1261*
E1262 vim9.txt /*E1262*
E1263 eval.txt /*E1263*
E1264 vim9.txt /*E1264*
E1265 eval.txt /*E1265*
E1266 if_pyth.txt /*E1266*
E127 eval.txt /*E127*
E128 eval.txt /*E128*
E129 eval.txt /*E129*
@@ -4269,6 +4418,7 @@ E295 message.txt /*E295*
E296 message.txt /*E296*
E297 message.txt /*E297*
E298 message.txt /*E298*
E299 if_perl.txt /*E299*
E30 change.txt /*E30*
E300 message.txt /*E300*
E301 message.txt /*E301*
@@ -6072,6 +6222,7 @@ conversion-server mbyte.txt /*conversion-server*
convert-to-HTML syntax.txt /*convert-to-HTML*
convert-to-XHTML syntax.txt /*convert-to-XHTML*
convert-to-XML syntax.txt /*convert-to-XML*
convert_legacy_function_to_vim9 vim9.txt /*convert_legacy_function_to_vim9*
copy() builtin.txt /*copy()*
copy-diffs diff.txt /*copy-diffs*
copy-move change.txt /*copy-move*
@@ -9865,8 +10016,7 @@ test_feedinput() testing.txt /*test_feedinput()*
test_garbagecollect_now() testing.txt /*test_garbagecollect_now()*
test_garbagecollect_soon() testing.txt /*test_garbagecollect_soon()*
test_getvalue() testing.txt /*test_getvalue()*
test_gui_drop_files() testing.txt /*test_gui_drop_files()*
test_gui_mouse_event() testing.txt /*test_gui_mouse_event()*
test_gui_event() testing.txt /*test_gui_event()*
test_ignore_error() testing.txt /*test_ignore_error()*
test_null_blob() testing.txt /*test_null_blob()*
test_null_channel() testing.txt /*test_null_channel()*
@@ -9879,7 +10029,6 @@ test_null_string() testing.txt /*test_null_string()*
test_option_not_set() testing.txt /*test_option_not_set()*
test_override() testing.txt /*test_override()*
test_refcount() testing.txt /*test_refcount()*
test_scrollbar() testing.txt /*test_scrollbar()*
test_setmouse() testing.txt /*test_setmouse()*
test_settime() testing.txt /*test_settime()*
test_srand_seed() testing.txt /*test_srand_seed()*

View File

@@ -1,4 +1,4 @@
*testing.txt* For Vim version 8.2. Last change: 2022 Jan 20
*testing.txt* For Vim version 8.2. Last change: 2022 Feb 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -65,8 +65,9 @@ test_garbagecollect_now() *test_garbagecollect_now()*
Like garbagecollect(), but executed right away. This must
only be called directly to avoid any structure to exist
internally, and |v:testing| must have been set before calling
any function. This will not work when called from a :def
function, because variables on the stack will be freed.
any function. *E1142*
This will not work when called from a :def function, because
variables on the stack will be freed.
test_garbagecollect_soon() *test_garbagecollect_soon()*
@@ -82,46 +83,113 @@ test_getvalue({name}) *test_getvalue()*
Can also be used as a |method|: >
GetName()->test_getvalue()
<
*test_gui_drop_files()*
test_gui_drop_files({list}, {row}, {col}, {mods})
Drop one or more files in {list} in the window at {row}, {col}.
This function only works when the GUI is running and the
|drop_file| feature is present.
*test_gui_event()*
test_gui_event({event}, {args})
Generate a GUI {event} with arguments {args} for testing Vim
functionality. This function works only when the GUI is
running.
The supported values for {mods} are:
0x4 Shift
0x8 Alt
0x10 Ctrl
The files are added to the |argument-list| and the first file
in {list} is edited in the window. See |drag-n-drop| for more
information.
{event} is a String and the supported values are:
"dropfiles" drop one or more files in a window.
"findrepl" search and replace text
"mouse" mouse button click event.
"scrollbar" move or drag the scrollbar
"tabline" select a tab page by mouse click.
"tabmenu" select a tabline menu entry.
*test_gui_mouse_event()*
test_gui_mouse_event({button}, {row}, {col}, {multiclick}, {modifiers})
Inject a mouse button click event. This function only works
when the GUI is running.
The supported values for {button} are:
0 right mouse button
1 middle mouse button
2 left mouse button
3 mouse button release
4 scroll wheel down
5 scroll wheel up
6 scroll wheel left
7 scroll wheel right
{row} and {col} specify the location of the mouse click. The
first row of the Vim window is 1 and the last row is 'lines'.
The maximum value of {col} is 'columns'.
To inject a multiclick event, set {multiclick} to 1.
The supported values for {modifiers} are:
4 shift is pressed
8 alt is pressed
16 ctrl is pressed
After injecting the mouse event you probably should call
{args} is a Dict and contains the arguments for the event.
"dropfiles":
Drop one or more files in a specified window. The supported
items in {args} are:
files: List of file names
row: window row number
col: window column number
modifiers: key modifiers. The supported values are:
0x4 Shift
0x8 Alt
0x10 Ctrl
The files are added to the |argument-list| and the first
file in {files} is edited in the window. See |drag-n-drop|
for more information. This event works only when the
|drop_file| feature is present.
"findrepl":
{only available when the GUI has a find/replace dialog}
Perform a search and replace of text. The supported items
in {args} are:
find_text: string to find.
repl_text: replacement string
flags: flags controlling the find/replace. Supported
values are:
1 search next string (find dialog)
2 search next string (replace dialog)
3 replace string once
4 replace all matches
8 match whole words only
16 match case
forward: set to 1 for forward search.
"mouse":
Inject a mouse button click event. The supported items in
{args} are:
button: mouse button. The supported values are:
0 right mouse button
1 middle mouse button
2 left mouse button
3 mouse button release
4 scroll wheel down
5 scroll wheel up
6 scroll wheel left
7 scroll wheel right
row: mouse click row number. The first row of the
Vim window is 1 and the last row is 'lines'.
col: mouse click column number. The maximum value
of {col} is 'columns'.
multiclick: set to 1 to inject a multiclick mouse event.
modifiers: key modifiers. The supported values are:
4 shift is pressed
8 alt is pressed
16 ctrl is pressed
"scrollbar":
Set or drag the left, right or horizontal scrollbar. Only
works when the scrollbar actually exists. The supported
items in {args} are:
which: scrollbar. The supported values are:
left Left scrollbar of the current window
right Right scrollbar of the current window
hor Horizontal scrollbar
value: amount to scroll. For the vertical scrollbars
the value can be 1 to the line-count of the
buffer. For the horizontal scrollbar the
value can be between 1 and the maximum line
length, assuming 'wrap' is not set.
dragging: 1 to drag the scrollbar and 0 to click in the
scrollbar.
"tabline":
Inject a mouse click event on the tabline to select a
tabpage. The supported items in {args} are:
tabnr: tab page number
"tabmenu":
Inject an event to select a tabline menu entry. The
supported items in {args} are:
tabnr: tab page number
item: tab page menu item number. 1 for the first
menu item, 2 for the second item and so on.
After injecting the GUI events you probably should call
|feedkeys()| to have them processed, e.g.: >
call feedkeys("y", 'Lx!')
<
Returns TRUE if the event is successfully added, FALSE if
there is a failure.
Can also be used as a |method|: >
GetEvent()->test_gui_event({args})
<
test_ignore_error({expr}) *test_ignore_error()*
Ignore any error containing {expr}. A normal message is given
instead.
@@ -235,27 +303,6 @@ test_refcount({expr}) *test_refcount()*
GetVarname()->test_refcount()
test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()*
Pretend using scrollbar {which} to move it to position
{value}. {which} can be:
left Left scrollbar of the current window
right Right scrollbar of the current window
hor Horizontal scrollbar
For the vertical scrollbars {value} can be 1 to the
line-count of the buffer. For the horizontal scrollbar the
{value} can be between 1 and the maximum line length, assuming
'wrap' is not set.
When {dragging} is non-zero it's like dragging the scrollbar,
otherwise it's like clicking in the scrollbar.
Only works when the {which} scrollbar actually exists,
obviously only when using the GUI.
Can also be used as a |method|: >
GetValue()->test_scrollbar('right', 0)
test_setmouse({row}, {col}) *test_setmouse()*
Set the mouse position to be used for the next mouse action.
{row} and {col} are one based.
@@ -372,12 +419,12 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
<
If {msg} is empty then it is not used. Do this to get the
default message when passing the {lnum} argument.
*E1115*
When {lnum} is present and not negative, and the {error}
argument is present and matches, then this is compared with
the line number at which the error was reported. That can be
the line number in a function or in a script.
*E1116*
When {context} is present it is used as a pattern and matched
against the context (script name or function name) where
{lnum} is located in.

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 22
*todo.txt* For Vim version 8.2. Last change: 2022 Feb 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,15 +38,18 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
Also set the script context for other "expr" options, like for 'foldexpr'?
'printexpr' eval_printexpr()
"expr:" part of 'spellsuggest eval_spell_expr()
Disallow using "s:" in Vim9 script at the script level.
Disallow a legacy function creating an s: variable in Vim9 script.
Once Vim9 is stable:
- Add all the error numbers in a good place in documentation.
done until E1083
- Check code coverage, add more tests if needed.
- Use Vim9 for runtime files.
- Check code coverage, add more tests if needed.
vim9compile.c
vim9execute.c
vim9expr.c
vim9instr.c
vim9script.c
vim9type.c
Further Vim9 improvements, possibly after launch:
- Check performance with callgrind and kcachegrind.
@@ -62,6 +65,8 @@ Further Vim9 improvements, possibly after launch:
evaluation.
Use the location where the option was set for deciding whether it's to be
evaluated in Vim9 script context.
- Implement "import lazy" - like autoload but with a relative or absolute
path. #9595
- implement :type
- implement :enum
- implement :class and :interface: See |vim9-classes|
@@ -78,6 +83,7 @@ Further Vim9 improvements, possibly after launch:
Update list of features to vote on:
- multiple cursors
- built-in LSP support
- start first line halfway
Popup windows:
- Preview popup not properly updated when it overlaps with completion menu.
@@ -235,6 +241,8 @@ Memory leak in test_alot with pyeval() (allocating partial)
Memory leak in test_alot with expand()
Memory leaks in test_channel? (or is it because of fork())
PR to support %e and %k in 'errorformat'. #9624
Idea: when typing ":e /some/dir/" and "dir" does not exist, highlight in red.
":set &shellpipe" and ":set &shellredir" should use the logic from
@@ -4835,9 +4843,6 @@ Autocommands:
CursorHoldC - CursorHold while command-line editing
WinMoved - when windows have been moved around, e.g, ":wincmd J"
SearchPost - After doing a search command (e.g. to do "M")
PreDirChanged/PostDirChanged
- Before/after ":cd" has been used (for changing the
window title)
ShutDown - when the system is about to shut down
InsertCharPost - user typed a character in Insert mode, after inserting
the char.

View File

@@ -1,4 +1,4 @@
*uganda.txt* For Vim version 8.2. Last change: 2020 Jan 08
*uganda.txt* For Vim version 8.2. Last change: 2022 Feb 05
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -11,9 +11,9 @@ Vim is Charityware. You can use and copy it as much as you like, but you are
encouraged to make a donation for needy children in Uganda. Please see |kcc|
below or visit the ICCF web site, available at these URLs:
http://iccf-holland.org/
http://www.vim.org/iccf/
http://www.iccf.nl/
https://iccf-holland.org/
https://www.vim.org/iccf/
https://www.iccf.nl/
You can also sponsor the development of Vim. Vim sponsors can vote for
features. See |sponsor|. The money goes to Uganda anyway.
@@ -169,10 +169,11 @@ households are stimulated to build a proper latrine. I helped setting up a
production site for cement slabs. These are used to build a good latrine.
They are sold below cost price.
There is a small clinic at the project, which provides children and their
family with medical help. When needed, transport to a hospital is offered.
Immunization programs are carried out and help is provided when an epidemic is
breaking out (measles and cholera have been a problem).
There is a clinic at the project, which provides children and their family
medical help. Since 2020 a maternity ward was added and 24/7 service is
available. When needed, transport to a hospital is offered. Immunization
programs are carried out and help is provided when an epidemic is breaking out
(measles and cholera have been a problem).
*donate*
Summer 1994 to summer 1995 I spent a whole year at the centre, working as a
volunteer. I have helped to expand the centre and worked in the area of water
@@ -214,44 +215,29 @@ Check the ICCF web site for the latest information! See |iccf| for the URL.
USA: The methods mentioned below can be used.
Sending a check to the Nehemiah Group Outreach Society (NGOS)
is no longer possible, unfortunately. We are looking for
another way to get you an IRS tax receipt.
For sponsoring a child contact KCF in Canada (see below). US
checks can be sent to them to lower banking costs.
If you must send a check send it to our Canadian partner:
https://www.kuwasha.net/
Canada: Contact Kibaale Children's Fund (KCF) in Surrey, Canada. They
take care of the Canadian sponsors for the children in
Kibaale. KCF forwards 100% of the money to the project in
Uganda. You can send them a one time donation directly.
Canada: Contact Kuwasha in Surrey, Canada. They take care of the
Canadian sponsors for the children in Kibaale. Kuwasha
forwards 100% of the money to the project in Uganda. You can
send them a one time donation directly.
Please send me a note so that I know what has been donated
because of Vim. Ask KCF for information about sponsorship.
Kibaale Children's Fund c/o Pacific Academy
10238-168 Street
Surrey, B.C. V4N 1Z4
Canada
Phone: 604-581-5353
If you make a donation to Kibaale Children's Fund (KCF) you
will receive a tax receipt which can be submitted with your
tax return.
because of Vim. Look on their site for information about
sponsorship: https://www.kuwasha.net/
If you make a donation to Kuwasha you will receive a tax
receipt which can be submitted with your tax return.
Holland: Transfer to the account of "Stichting ICCF Holland" in Lisse.
This will allow for tax deduction if you live in Holland.
Postbank, nr. 4548774
IBAN: NL95 INGB 0004 5487 74
Holland: Transfer to the account of "Stichting ICCF Holland" in
Amersfoort. This will allow for tax deduction if you live in
Holland. ING bank, IBAN: NL95 INGB 0004 5487 74
Germany: It is possible to make donations that allow for a tax return.
Check the ICCF web site for the latest information:
http://iccf-holland.org/germany.html
https://iccf-holland.org/germany.html
World: Use a postal money order. That should be possible from any
country, mostly from the post office. Use this name (which is
in my passport): "Abraham Moolenaar". Use Euro for the
currency if possible.
Europe: Use a bank transfer if possible. Your bank should have a form
that you can use for this. See "Others" below for the swift
code and IBAN number.
Europe: Use a bank transfer if possible. See "Others" below for the
swift code and IBAN number.
Any other method should work. Ask for information about
sponsorship.
@@ -261,28 +247,12 @@ Credit Card: You can use PayPal to send money with a Credit card. This is
https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
The e-mail address for sending the money to is:
Bram@iccf-holland.org
For amounts above 400 Euro ($500) sending a check is
preferred.
Others: Transfer to one of these accounts if possible:
Postbank, account 4548774
Swift code: INGB NL 2A
IBAN: NL95 INGB 0004 5487 74
under the name "stichting ICCF Holland", Lisse
If that doesn't work:
Rabobank Lisse, account 3765.05.117
Swift code: RABO NL 2U
under the name "Bram Moolenaar", Lisse
Otherwise, send a check in euro or US dollars to the address
below. Minimal amount: $70 (my bank does not accept smaller
amounts for foreign check, sorry)
Others: Transfer to this account if possible:
ING bank: IBAN: NL95 INGB 0004 5487 74
Swift code: INGBNL2A
under the name "stichting ICCF Holland", Amersfoort
Checks are not accepted.
Address to send checks to:
Bram Moolenaar
Finsterruetihof 1
8134 Adliswil
Switzerland
This address is expected to be valid for a long time.
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 8.2. Last change: 2022 Jan 01
*usr_41.txt* For Vim version 8.2. Last change: 2022 Feb 11
VIM USER MANUAL - by Bram Moolenaar
@@ -1116,8 +1116,7 @@ Testing: *test-functions*
test_garbagecollect_now() free memory right now
test_garbagecollect_soon() set a flag to free memory soon
test_getvalue() get value of an internal variable
test_gui_drop_files() drop file(s) in a window
test_gui_mouse_event() add a GUI mouse event to the input buffer
test_gui_event() generate a GUI event for testing
test_ignore_error() ignore a specific error message
test_null_blob() return a null Blob
test_null_channel() return a null Channel
@@ -1131,7 +1130,6 @@ Testing: *test-functions*
test_setmouse() set the mouse position
test_feedinput() add key sequence to input buffer
test_option_not_set() reset flag indicating option was set
test_scrollbar() simulate scrollbar movement in the GUI
test_refcount() return an expression's reference count
test_srand_seed() set the seed value for srand()
test_unknown() return a value with unknown type
@@ -2502,7 +2500,7 @@ When the user does ":setfiletype xyz" the effect of the previous filetype
should be undone. Set the b:undo_ftplugin variable to the commands that will
undo the settings in your filetype plugin. Example: >
b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
\ .. "| unlet b:match_ignorecase b:match_words b:match_skip"
Using ":setlocal" with "<" after the option name resets the option to its
@@ -2514,6 +2512,8 @@ continuation, as mentioned above |use-cpo-save|.
For undoing the effect of an indent script, the b:undo_indent variable should
be set accordingly.
Both these variables use legacy script syntax, not |Vim9| syntax.
FILE NAME

View File

@@ -1,4 +1,4 @@
*various.txt* For Vim version 8.2. Last change: 2022 Jan 15
*various.txt* For Vim version 8.2. Last change: 2022 Feb 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -424,7 +424,7 @@ m *+mzscheme* Mzscheme interface |mzscheme|
m *+mzscheme/dyn* Mzscheme interface |mzscheme-dynamic| |/dyn|
m *+netbeans_intg* |netbeans|
T *+num64* 64-bit Number support |Number|
Always enabled since 8.2.0271, use v:numbersize to
Always enabled since 8.2.0271, use v:numbersize to
check the actual size of a Number.
m *+ole* Win32 GUI only: |ole-interface|
N *+packages* Loading |packages|
@@ -549,7 +549,7 @@ N *+X11* Unix only: can restore window title |X11|
backward compatibility, the ">" after the register
name can be omitted.
:redi[r] @">> Append messages to the unnamed register.
*E1092*
:redi[r] => {var} Redirect messages to a variable.
In legacy script: If the variable doesn't exist, then
it is created. If the variable exists, then it is
@@ -566,7 +566,7 @@ N *+X11* Unix only: can restore window title |X11|
:redi[r] =>> {var} Append messages to an existing variable. Only string
variables can be used.
*E1185*
:redi[r] END End redirecting messages.
*:filt* *:filter*
@@ -649,7 +649,7 @@ N *+X11* Unix only: can restore window title |X11|
used. In this example |:silent| is used to avoid the
message about reading the file and |:unsilent| to be
able to list the first line of each file. >
:silent argdo unsilent echo expand('%') . ": " . getline(1)
:silent argdo unsilent echo expand('%') . ": " . getline(1)
<
*:verb* *:verbose*

View File

@@ -1,4 +1,4 @@
*version8.txt* For Vim version 8.2. Last change: 2021 Jul 24
*version8.txt* For Vim version 8.2. Last change: 2022 Feb 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -25971,7 +25971,7 @@ Added functions:
|test_getvalue()|
|test_null_blob()|
|test_refcount()|
|test_scrollbar()|
test_scrollbar() (later replaced with |test_gui_event()|)
|test_setmouse()|
|win_execute()|
|win_splitmove()|

View File

@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 23
*vim9.txt* For Vim version 8.2. Last change: 2022 Feb 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -56,14 +56,14 @@ 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[cmd] {cmd} *:vim9* *:vim9cmd*
Execute {cmd} using Vim9 script syntax and semantics.
Useful when typing a command and in a legacy script or
function.
:vim9[cmd] {cmd} *:vim9* *:vim9cmd* *E1164*
Evaluate and 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.
:leg[acy] {cmd} *:leg* *:legacy* *E1189* *E1234*
Evaluate and 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.
@@ -72,7 +72,7 @@ rewrite old scripts, they keep working as before. You may want to use a few
2. Differences from legacy Vim script *vim9-differences*
Overview ~
*E1146*
Brief summary of the differences you will most often encounter when using Vim9
script and `:def` functions; details are below:
- Comments start with #, not ": >
@@ -82,7 +82,7 @@ script and `:def` functions; details are below:
.. yourName
.. ", how are you?"
- White space is required in many places to improve readability.
- Assign values without `:let`, declare variables with `:var`: >
- Assign values without `:let` *E1126* , declare variables with `:var`: >
var count = 0
count += 3
- Constants can be declared with `:final` and `:const`: >
@@ -128,7 +128,7 @@ To improve readability there must be a space between a command and the #
that starts a comment: >
var name = value # comment
var name = value# error!
< *E1170*
Do not start a comment with #{, it looks like the legacy dictionary literal
and produces an error where this might be confusing. #{{ or #{{{ are OK,
these can be used to start a fold.
@@ -139,7 +139,7 @@ arguments).
Vim9 functions ~
*E1099*
A function defined with `:def` is compiled. Execution is many times faster,
often 10 to 100 times.
@@ -153,7 +153,7 @@ Compilation is done when any of these is encountered:
- `:disassemble` is used for the function.
- a function that is compiled calls the function or uses it as a function
reference (so that the argument and return types can be checked)
*E1091*
*E1091* *E1191*
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
@@ -183,14 +183,14 @@ You can call a legacy dict function though: >
var d = {func: Legacy, value: 'text'}
d.func()
enddef
< *E1096* *E1174* *E1175*
The argument types and return type need to be specified. The "any" type can
be used, type checking will then be done at runtime, like with legacy
functions.
*E1106*
Arguments are accessed by name, without "a:", just like any other language.
There is no "a:" dictionary or "a:000" list.
*vim9-variable-arguments* *E1055*
*vim9-variable-arguments* *E1055* *E1160* *E1180*
Variable arguments are defined as the last argument, with a name and have a
list type, similar to TypeScript. For example, a list of numbers: >
def MyFunc(...itemlist: list<number>)
@@ -206,7 +206,7 @@ should use its default value. Example: >
enddef
MyFunc(v:none, 'LAST') # first argument uses default value 'one'
<
*vim9-ignored-argument*
*vim9-ignored-argument* *E1181*
The argument "_" (an underscore) can be used to ignore the argument. This is
most useful in callbacks where you don't need it, but do need to give an
argument to match the call. E.g. when using map() two arguments are passed,
@@ -219,34 +219,36 @@ be given.
Functions and variables are script-local by default ~
*vim9-scopes*
When using `:function` or `:def` to specify a new function at the script level
in a Vim9 script, the function is local to the script, as if "s:" was
prefixed. Using the "s:" prefix is optional. To define a global function or
variable the "g:" prefix must be used. For functions in an autoload script
the "name#" prefix is sufficient. >
in a Vim9 script, the function is local to the script. Like prefixing "s:" in
legacy script. To define a global function or variable the "g:" prefix must
be used. For functions in a script that is to be imported and in an autoload
script "export" needs to be used. >
def ThisFunction() # script-local
def s:ThisFunction() # script-local
def g:ThatFunction() # global
def scriptname#function() # autoload
export def Function() # for import and import autoload
< *E1058* *E1075*
When using `:function` or `:def` to specify a nested function inside a `:def`
function and no namespace was given, this nested function is local to the code
block it is defined in. In a `:def` function it is not possible to define a
script-local function. It is possible to define a global function by using
the "g:" prefix.
block it is defined in. It is not possible to define a script-local function.
It is possible to define a global function by using the "g:" prefix.
When referring to a function and no "s:" or "g:" prefix is used, Vim will
search for the function:
- in the function scope, in block scopes
- in the script scope, possibly imported
- in the list of global functions
However, it is recommended to always use "g:" to refer to a global function
for clarity.
Since a script-local function reference can be used without "s:" the name must
start with an upper case letter even when using the "s:" prefix. In legacy
script "s:funcref" could be used, because it could not be referred to with
"funcref". In Vim9 script it can, therefore "s:Funcref" must be used to avoid
that the name interferes with builtin functions.
*vim9-s-namespace*
The use of the "s:" prefix is not supported at the Vim9 script level. All
functions and variables without a prefix are script-local.
In :def functions the use of "s:" is optional. This is because in legacy
script the "s:" might be needed. Disallowing the use of "s:" only in a :def
function in Vim9 script would be a bit confusing.
In legacy functions the use of "s:" for script items is required, as before.
In all cases the function must be defined before used. That is when it is
called, when `:defcompile` causes it to be compiled, or when code that calls
@@ -255,7 +257,7 @@ it is being compiled (to figure out the return type).
The result is that functions and variables without a namespace can usually be
found in the script, either defined there or imported. Global functions and
variables could be defined anywhere (good luck finding out where!).
*E1102*
Global functions can still be defined and deleted at nearly any time. In
Vim9 script script-local functions are defined once when the script is sourced
and cannot be deleted or replaced.
@@ -267,7 +269,7 @@ You can use an autoload function if needed, or call a legacy function and have
Reloading a Vim9 script clears functions and variables by default ~
*vim9-reload*
*vim9-reload* *E1149* *E1150*
When loading a legacy Vim script a second time nothing is removed, the
commands will replace existing variables and functions and create new ones.
@@ -283,14 +285,16 @@ You want to use this in scripts that use a `finish` command to bail out at
some point when loaded again. E.g. when a buffer local option is set: >
vim9script noclear
setlocal completefunc=SomeFunc
if exists('*g:SomeFunc') | finish | endif
if exists('*g:SomeFunc')
finish
endif
def g:SomeFunc()
....
Variable declarations with :var, :final and :const ~
*vim9-declaration* *:var*
*E1017* *E1020* *E1054*
*vim9-declaration* *:var*
*E1017* *E1020* *E1054* *E1087* *E1108* *E1124*
Local variables need to be declared with `:var`. Local constants need to be
declared with `:final` or `:const`. We refer to both as "variables" in this
section.
@@ -321,7 +325,7 @@ The declaration must be done earlier: >
inner = 0
endif
echo inner
< *E1025*
< *E1025* *E1128*
To intentionally hide a variable from code that follows, a block can be
used: >
{
@@ -348,7 +352,8 @@ And with autocommands: >
}
Although using a :def function probably works better.
*E1022*
*E1022* *E1103* *E1130* *E1131* *E1133*
*E1134* *E1235*
Declaring a variable with a type but without an initializer will initialize to
false (for bool), empty (for string, list, dict, etc.) or zero (for number,
any, etc.). This matters especially when using the "any" type, the value will
@@ -358,13 +363,13 @@ In Vim9 script `:let` cannot be used. An existing variable is assigned to
without any command. The same for global, window, tab, buffer and Vim
variables, because they are not really declared. Those can also be deleted
with `:unlet`.
*E1178*
`:lockvar` does not work on local variables. Use `:const` and `:final`
instead.
The `exists()` and `exists_compiled()` functions do not work on local variables
or arguments.
*E1006* *E1041*
*E1006* *E1041* *E1167* *E1168* *E1213*
Variables, functions and function arguments cannot shadow previously defined
or imported variables and functions in the same script file.
Variables may shadow Ex commands, rename the variable if needed.
@@ -375,13 +380,12 @@ Global variables must be prefixed with "g:", also at the script level. >
g:global = 'value'
var Funcref = g:ThatFunction
Global functions must be prefixed with "g:" when defining them, but can be
called without "g:". >
Global functions must be prefixed with "g:": >
vim9script
def g:GlobalFunc(): string
return 'text'
enddef
echo GlobalFunc()
echo g:GlobalFunc()
The "g:" prefix is not needed for auto-load functions.
*vim9-function-defined-later*
@@ -418,7 +422,7 @@ similar to how a function argument can be ignored: >
[a, _, c] = theList
To ignore any remaining items: >
[a, b; _] = longList
< *E1163*
Declaring more than one variable at a time, using the unpack notation, is
possible. Each variable can have a type or infer it from the value: >
var [v1: number, v2] = GetValues()
@@ -440,7 +444,7 @@ Example: >
myList = [3, 4] # Error!
myList[0] = 9 # Error!
myList->add(3) # Error!
< *:final*
< *:final* *E1125*
`:final` is used for making only the variable a constant, the value can be
changed. This is well known from Java. Example: >
final myList = [1, 2]
@@ -460,7 +464,7 @@ The constant only applies to the value itself, not what it refers to. >
Omitting :call and :eval ~
*E1190*
Functions can be called without `:call`: >
writefile(lines, 'file')
Using `:call` is still possible, but this is discouraged.
@@ -520,7 +524,8 @@ because of the use of argument types.
To avoid these problems Vim9 script uses a different syntax for a lambda,
which is similar to JavaScript: >
var Lambda = (arg) => expression
var Lambda = (arg): type => expression
< *E1157*
No line break is allowed in the arguments of a lambda up to and including the
"=>" (so that Vim can tell the difference between an expression in parentheses
and lambda arguments). This is OK: >
@@ -536,7 +541,7 @@ But you can use a backslash to concatenate the lines before parsing: >
filter(list, (k,
\ v)
\ => v > 0)
< *vim9-lambda-arguments*
< *vim9-lambda-arguments* *E1172*
In legacy script a lambda could be called with any number of extra arguments,
there was no way to warn for not using them. In Vim9 script the number of
arguments must match. If you do want to accept any arguments, or any further
@@ -545,7 +550,7 @@ arguments, use "..._", which makes the function accept
var Callback = (..._) => 'anything'
echo Callback(1, 2, 3) # displays "anything"
< *inline-function*
< *inline-function* *E1171*
Additionally, a lambda can contain statements in {}: >
var Lambda = (arg) => {
g:was_called = 'yes'
@@ -600,7 +605,7 @@ Also when confused with the start of a command block: >
Automatic line continuation ~
*vim9-line-continuation*
*vim9-line-continuation* *E1097*
In many cases it is obvious that an expression continues on the next line. In
those cases there is no need to prefix the line with a backslash (see
|line-continuation|). For example, when a list spans multiple lines: >
@@ -708,6 +713,7 @@ second line is seen as a separate command: >
Now "exit_cb: Func})" is actually a valid command: save any changes to the
file "_cb: Func})" and exit. To avoid this kind of mistake in Vim9 script
there must be white space between most command names and the argument.
*E1144*
However, the argument of a command that is a command won't be recognized. For
example, after "windo echo expr" a line break inside "expr" will not be seen.
@@ -738,7 +744,7 @@ Notes:
White space ~
*E1004* *E1068* *E1069* *E1074*
*E1004* *E1068* *E1069* *E1074* *E1127* *E1202*
Vim9 script enforces proper use of white space. This is no longer allowed: >
var name=234 # Error!
var name= 234 # Error!
@@ -772,7 +778,7 @@ White space is not allowed:
Func(
arg # OK
)
< *E1205*
White space is not allowed in a `:set` command between the option name and a
following "&", "!", "<", "=", "+=", "-=" or "^=".
@@ -782,6 +788,11 @@ No curly braces expansion ~
|curly-braces-names| cannot be used.
Command modifiers are not ignored ~
*E1176*
Using a command modifier for a command that does not use it gives an error.
Dictionary literals ~
*vim9-literal-dict* *E1014*
Traditionally Vim has supported dictionary literals with a {} syntax: >
@@ -803,7 +814,7 @@ use another character, use a single or double quoted string: >
var dict = {'key with space': value}
var dict = {"key\twith\ttabs": value}
var dict = {'': value} # empty key
< *E1139*
In case the key needs to be an expression, square brackets can be used, just
like in JavaScript: >
var dict = {["key" .. nr]: value}
@@ -816,7 +827,7 @@ error. A number can be given with and without the []: >
No :xit, :t, :k, :append, :change or :insert ~
*E1100*
These commands are too easily confused with local variable names.
Instead of `:x` or `:xit` you can use `:exit`.
Instead of `:t` you can use `:copy`.
@@ -840,7 +851,7 @@ error. Example: >
For loop ~
*E1254*
The loop variable must not be declared yet: >
var i = 1
for i in [1, 2, 3] # Error!
@@ -1082,7 +1093,7 @@ Using ++var or --var in an expression is not supported yet.
{return-type}. When {return-type} is omitted or is
"void" the function is not expected to return
anything.
*E1077*
*E1077* *E1123*
{arguments} is a sequence of zero or more argument
declarations. There are three forms:
{name}: {type}
@@ -1100,13 +1111,13 @@ Using ++var or --var in an expression is not supported yet.
It is possible to nest `:def` inside another `:def` or
`:function` up to about 50 levels deep.
*E1117*
[!] is used as with `:function`. Note that
script-local functions cannot be deleted or redefined
later in Vim9 script. They can only be removed by
reloading the same script.
*:enddef* *E1057*
*:enddef* *E1057* *E1152* *E1173*
:enddef End of a function defined with `:def`. It should be on
a line by its own.
@@ -1185,6 +1196,67 @@ for each closure call a function to define it: >
echo range(5)->map((i, _) => flist[i]())
# Result: [0, 1, 2, 3, 4]
In some situations, especially when calling a Vim9 closure from legacy
context, the evaluation will fail. *E1248*
Converting a function from legacy to Vim9 ~
*convert_legacy_function_to_vim9*
These are the most changes that need to be made to convert a legacy function
to a Vim9 function:
- Change `func` or `function` to `def`.
- Change `endfunc` or `endfunction` to `enddef`.
- Add types to the function arguments.
- If the function returns something, add the return type.
- Change comments to start with # instead of ".
For example, a legacy function: >
func MyFunc(text)
" function body
endfunc
< Becomes: >
def MyFunc(text: string): number
# function body
enddef
- Remove "a:" used for arguments. E.g.: >
return len(a:text)
< Becomes: >
return len(text)
- Change `let` used to declare a variable to `var`.
- Remove `let` used to assign a value to a variable. This is for local
variables already declared and b: w: g: and t: variables.
For example, legacy function: >
let lnum = 1
let lnum += 3
let b:result = 42
< Becomes: >
var lnum = 1
lnum += 3
b:result = 42
- Insert white space in expressions where needed.
- Change "." used for concatenation to "..".
For example, legacy function: >
echo line(1).line(2)
< Becomes: >
echo line(1) .. line(2)
- line continuation does not always require a backslash: >
echo ['one',
\ 'two',
\ 'three'
\ ]
< Becomes: >
echo ['one',
'two',
'three'
]
==============================================================================
4. Types *vim9-types*
@@ -1211,7 +1283,7 @@ Not supported yet:
These types can be used in declarations, but no simple value will actually
have the "void" type. Trying to use a void (e.g. a function without a
return value) results in error *E1031* .
return value) results in error *E1031* *E1186* .
There is no array type, use list<{type}> instead. For a list constant an
efficient implementation is used that avoids allocating lot of small pieces of
@@ -1288,7 +1360,7 @@ expected to always be the same. For example, when declaring a list: >
At compile time Vim doesn't know the type of "g:two" and the expression type
becomes list<any>. An instruction is generated to check the list type before
doing the assignment, which is a bit inefficient.
*type-casting*
*type-casting* *E1104*
To avoid this, use a type cast: >
var l: list<number> = [1, <number>g:two]
The compiled code will then only check that "g:two" is a number and give an
@@ -1333,6 +1405,24 @@ Results in:
For script-local variables in Vim9 script the type is checked, also when the
variable was declared in a legacy function.
When a type has been declared this is attached to a List or Dictionary. When
later some expression attempts to change the type an error will be given: >
var ll: list<number> = [1, 2, 3]
ll->extend(['x']) # Error, 'x' is not a number
If the type is not declared then it is allowed to change: >
[1, 2, 3]->extend(['x']) # result: [1, 2, 3, 'x']
For a variable declaration an inferred type matters: >
var ll = [1, 2, 3]
ll->extend(['x']) # Error, 'x' is not a number
That is because the declaration looks like a list of numbers, thus is
equivalent to: >
var ll: list<number> = [1, 2, 3]
If you do want a more permissive list you need to declare the type: >
var ll: list<any = [1, 2, 3]
ll->extend(['x']) # OK
Stricter type checking ~
*type-checking*
@@ -1341,13 +1431,13 @@ automatically converted to a number. This was convenient for an actual number
such as "123", but leads to unexpected problems (and no error message) if the
string doesn't start with a number. Quite often this leads to hard-to-find
bugs.
*E1206* *E1210* *E1212*
In Vim9 script this has been made stricter. In most places it works just as
before, if the value used matches the expected type. There will sometimes be
an error, thus breaking backwards compatibility. For example:
- Using a number other than 0 or 1 where a boolean is expected. *E1023*
- Using a string value when setting a number option.
- Using a number where a string is expected. *E1024*
- Using a number where a string is expected. *E1024* *E1105*
One consequence is that the item type of a list or dict given to |map()| must
not change. This will give an error in Vim9 script: >
@@ -1363,9 +1453,15 @@ type. E.g. when a list of mixed types gets changed to a list of strings: >
# typename(mylist) == "list<any>"
map(mylist, (i, v) => 'item ' .. i)
# typename(mylist) == "list<string>", no error
< *E1158*
Same for |extend()|, use |extendnew()| instead, and for |flatten()|, use
|flattennew()| instead.
*E1211* *E1217* *E1218* *E1219* *E1220* *E1221*
*E1222* *E1223* *E1224* *E1225* *E1226* *E1227*
*E1228* *E1238* *E1250* *E1251* *E1252* *E1253*
*E1256*
Types are checked for most builtin functions to make it easier to spot
mistakes.
==============================================================================
@@ -1398,7 +1494,7 @@ global namespace. If a file starts with: >
var myvar = 'yes'
Then "myvar" will only exist in this file. While without `vim9script` it would
be available as `g:myvar` from any other script and function.
*E1101*
The variables at the file level are very much like the script-local "s:"
variables in legacy Vim script, but the "s:" is omitted. And they cannot be
deleted.
@@ -1454,23 +1550,23 @@ be exported. {not implemented yet: class, interface}
Import ~
*:import* *:imp* *E1094* *E1047*
*E1048* *E1049* *E1053* *E1071*
*:import* *:imp* *E1094* *E1047* *E1262*
*E1048* *E1049* *E1053* *E1071* *E1236*
The exported items can be imported in another Vim9 script: >
import "myscript.vim"
This makes each item available as "myscript.item".
*:import-as*
*:import-as* *E1257* *E1261*
In case the name is long or ambiguous, another name can be specified: >
import "thatscript.vim" as that
< *E1060*
< *E1060* *E1258* *E1259* *E1260*
Then you can use "that.EXPORTED_CONST", "that.someValue", etc. You are free
to choose the name "that". Use something that will be recognized as referring
to the imported script. Avoid command names and builtin function names,
because the name will shadow them. If the name starts with a capital letter
it can also shadow global user commands and functions. Also, you cannot use
the name for something else in the script, such as a function or variable
name.
to the imported script. Avoid command names, command modifiers and builtin
function names, because the name will shadow them.
If the name starts with a capital letter it can also shadow global user
commands and functions. Also, you cannot use the name for something else in
the script, such as a function or variable name.
In case the dot in the name is undesired, a local reference can be made for a
function: >
@@ -1521,17 +1617,19 @@ line, there can be no line break: >
echo that
.name # Error!
< *:import-cycle*
The `import` commands are executed when encountered. If that script (directly
or indirectly) imports the current script, then items defined after the
`import` won't be processed yet. Therefore cyclic imports can exist, but may
result in undefined items.
The `import` commands are executed when encountered. If script A imports
script B, and B (directly or indirectly) imports A, this will be skipped over.
At this point items in A after "import B" will not have been processed and
defined yet. Therefore cyclic imports can exist and not result in an error
directly, but may result in an error for items in A after "import B" not being
defined. This does not apply to autoload imports, see the next section.
Importing an autoload script ~
*vim9-autoload*
For optimal startup speed, loading scripts should be postponed until they are
actually needed. Using the autoload mechanism is recommended:
*E1264*
1. In the plugin define user commands, functions and/or mappings that refer to
items imported from an autoload script. >
import autoload 'for/search.vim'
@@ -1747,6 +1845,9 @@ Specific items from TypeScript we avoid:
- TypeScript has various "Readonly" types, which have limited usefulness,
since a type cast can remove the immutable nature. Vim locks the value,
which is more flexible, but is only checked at runtime.
- TypeScript has a complicated "import" statement that does not match how the
Vim import mechanism works. A much simpler mechanism is used instead, which
matches that the imported script is only sourced once.
Declarations ~

View File

@@ -265,6 +265,7 @@ Additionally the following commands can be used:
X delete (2) |v_X|
Y yank (2) |v_Y|
p put |v_p|
P put without unnamed register overwrite |v_P|
J join (1) |v_J|
U make uppercase |v_U|
u make lowercase |v_u|

View File

@@ -1,4 +1,4 @@
*windows.txt* For Vim version 8.2. Last change: 2022 Jan 08
*windows.txt* For Vim version 8.2. Last change: 2022 Feb 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -168,7 +168,7 @@ CTRL-W CTRL-S *CTRL-W_CTRL-S*
Note: CTRL-S does not work on all terminals and might block
further input, use CTRL-Q to get going again.
Also see |++opt| and |+cmd|.
*E242*
*E242* *E1159*
Be careful when splitting a window in an autocommand, it may
mess up the window layout if this happens while making other
window layout changes.

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2022 Jan 23
" Last Change: 2022 Jan 31
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -654,6 +654,9 @@ au BufNewFile,BufRead *.fsl setf framescript
" FStab
au BufNewFile,BufRead fstab,mtab setf fstab
" Fusion
au BufRead,BufNewFile *.fusion setf fusion
" F# or Forth
au BufNewFile,BufRead *.fs call dist#ft#FTfs()
@@ -666,6 +669,12 @@ au BufNewFile,BufRead .gdbinit,gdbinit setf gdb
" GDMO
au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
" GDscript
au BufNewFile,BufRead *.gd setf gdscript
" Godot resource
au BufRead,BufNewFile *.tscn,*.tres setf gdresource
" Gedcom
au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
@@ -696,6 +705,9 @@ au BufNewFile,BufRead *.git/*
" Gkrellmrc
au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc
" GLSL
au BufNewFile,BufRead *.glsl setf glsl
" GP scripts (2.0 and onward)
au BufNewFile,BufRead *.gp,.gprc setf gp
@@ -721,10 +733,14 @@ au BufNewFile,BufRead *.gpi,.gnuplot setf gnuplot
" Go (Google)
au BufNewFile,BufRead *.go setf go
au BufNewFile,BufRead Gopkg.lock setf toml
au BufRead,BufNewFile go.work setf gowork
" GrADS scripts
au BufNewFile,BufRead *.gs setf grads
" GraphQL
au BufNewFile,BufRead *.graphql,*.graphqls,*.gql setf graphql
" Gretl
au BufNewFile,BufRead *.gretl setf gretl
@@ -740,12 +756,18 @@ au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/
" GTK RC
au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
" Hack
au BufRead,BufNewFile *.hack,*.hackpartial setf hack
" Haml
au BufNewFile,BufRead *.haml setf haml
" Hamster Classic | Playground files
au BufNewFile,BufRead *.hsm setf hamster
" Handlebars
au BufNewFile,BufRead *.hbs setf handlebars
" Haskell
au BufNewFile,BufRead *.hs,*.hsc,*.hs-boot,*.hsig setf haskell
au BufNewFile,BufRead *.lhs setf lhaskell
@@ -758,12 +780,21 @@ au BufNewFile,BufRead cabal.config setf cabalconfig
au BufNewFile,BufRead *.ht setf haste
au BufNewFile,BufRead *.htpp setf hastepreproc
" HCL
au BufRead,BufNewFile *.hcl setf hcl
" Hercules
au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum setf hercules
" HEEx
au BufRead,BufNewFile *.heex setf heex
" HEX (Intel)
au BufNewFile,BufRead *.hex,*.h32 setf hex
" Hjson
au BufNewFile,BufRead *.hjson setf hjson
" Hollywood
au BufRead,BufNewFile *.hws setf hollywood
@@ -942,6 +973,9 @@ au BufNewFile,BufRead *.ldif setf ldif
" Ld loader
au BufNewFile,BufRead *.ld setf ld
" Ledger
au BufRead,BufNewFile *.ldg,*.ledger,*.journal setf ledger
" Less
au BufNewFile,BufRead *.less setf less
@@ -1179,6 +1213,9 @@ au BufNewFile,BufRead *.nginx,nginx*.conf,*nginx.conf,*/etc/nginx/*,*/usr/local/
" Ninja file
au BufNewFile,BufRead *.ninja setf ninja
" Nix
au BufRead,BufNewFile *.nix setf nix
" NPM RC file
au BufNewFile,BufRead npmrc,.npmrc setf dosini
@@ -1364,6 +1401,9 @@ au BufNewFile,BufRead *printcap
au BufNewFile,BufRead *termcap
\ let b:ptcap_type = "term" | setf ptcap
" Prisma
au BufRead,BufNewFile *.prisma setf prisma
" PCCTS / ANTLR
"au BufNewFile,BufRead *.g setf antlr
au BufNewFile,BufRead *.g setf pccts
@@ -1371,6 +1411,9 @@ au BufNewFile,BufRead *.g setf pccts
" PPWizard
au BufNewFile,BufRead *.it,*.ih setf ppwiz
" Pug
au BufRead,BufNewFile *.pug setf pug
" Puppet
au BufNewFile,BufRead Puppetfile setf ruby
@@ -1436,6 +1479,9 @@ au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc setf python
au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python
" QL
au BufRead,BufNewFile *.ql,*.qll setf ql
" Radiance
au BufNewFile,BufRead *.rad,*.mat setf radiance
@@ -1501,6 +1547,9 @@ au BufNewFile,BufRead *.r,*.R call dist#ft#FTr()
" Remind
au BufNewFile,BufRead .reminders,*.remind,*.rem setf remind
" ReScript
au BufNewFile,BufRead *.res,*.resi setf rescript
" Resolv.conf
au BufNewFile,BufRead resolv.conf setf resolv
@@ -1840,6 +1889,9 @@ au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers
" SVG (Scalable Vector Graphics)
au BufNewFile,BufRead *.svg setf svg
" Surface
au BufRead,BufNewFile *.sface setf surface
" Tads (or Nroff or Perl test file)
au BufNewFile,BufRead *.t
\ if !dist#ft#FTnroff() && !dist#ft#FTperl() | setf tads | endif
@@ -1857,6 +1909,9 @@ au BufRead,BufNewFile *.task setf taskedit
" Tcl (JACL too)
au BufNewFile,BufRead *.tcl,*.tm,*.tk,*.itcl,*.itk,*.jacl,.tclshrc,.wishrc setf tcl
" Teal
au BufRead,BufNewFile *.tl setf teal
" TealInfo
au BufNewFile,BufRead *.tli setf tli
@@ -1874,6 +1929,9 @@ au BufRead,BufNewFile *.ttl
" Terminfo
au BufNewFile,BufRead *.ti setf terminfo
" Terraform
au BufRead,BufNewFile *.tfvars setf terraform
" TeX
au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
au BufNewFile,BufRead *.tex call dist#ft#FTtex()
@@ -1891,7 +1949,13 @@ au BufNewFile,BufRead texmf.cnf setf texmf
au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf setf tidy
" TF mud client
au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf
au BufNewFile,BufRead .tfrc,tfrc setf tf
" TF mud client or terraform
au BufNewFile,BufRead *.tf call dist#ft#FTtf()
" TLA+
au BufNewFile,BufRead *.tla setf tla
" tmux configuration
au BufNewFile,BufRead {.,}tmux*.conf setf tmux
@@ -1900,7 +1964,7 @@ au BufNewFile,BufRead {.,}tmux*.conf setf tmux
au BufNewFile,BufRead *.toml setf toml
" TPP - Text Presentation Program
au BufNewFile,BufReadPost *.tpp setf tpp
au BufNewFile,BufRead *.tpp setf tpp
" Treetop
au BufRead,BufNewFile *.treetop setf treetop
@@ -1957,6 +2021,9 @@ au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart
au BufNewFile,BufRead */.config/upstart/*.conf setf upstart
au BufNewFile,BufRead */.config/upstart/*.override setf upstart
" Vala
au BufNewFile,BufRead *.vala setf vala
" Vera
au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera
@@ -1987,7 +2054,7 @@ au BufRead,BufNewFile *.hw,*.module,*.pkg
\ endif
" Visual Basic (also uses *.bas) or FORM
au BufNewFile,BufRead *.frm call dist#ft#FTVB("form")
au BufNewFile,BufRead *.frm call dist#ft#FTfrm()
" SaxBasic is close to Visual Basic
au BufNewFile,BufRead *.sba setf vb
@@ -2151,6 +2218,9 @@ au BufNewFile,BufRead *.raml setf raml
" yum conf (close enough to dosini)
au BufNewFile,BufRead */etc/yum.conf setf dosini
" YANG
au BufRead,BufNewFile *.yang setf yang
" Zimbu
au BufNewFile,BufRead *.zu setf zimbu
" Zimbu Templates

View File

@@ -1,35 +1,43 @@
" Vim support file to switch on loading plugins for file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2006 Apr 30
vim9script noclear
if exists("did_load_ftplugin")
# Vim support file to switch on loading plugins for file types
#
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last change: 2022 Feb 11
if exists("g:did_load_ftplugin")
finish
endif
let did_load_ftplugin = 1
g:did_load_ftplugin = 1
augroup filetypeplugin
au FileType * call s:LoadFTPlugin()
func! s:LoadFTPlugin()
if exists("b:undo_ftplugin")
exe b:undo_ftplugin
unlet! b:undo_ftplugin b:did_ftplugin
endif
let s = expand("<amatch>")
if s != ""
if &cpo =~# "S" && exists("b:did_ftplugin")
" In compatible mode options are reset to the global values, need to
" set the local values also when a plugin was already used.
unlet b:did_ftplugin
endif
" When there is a dot it is used to separate filetype names. Thus for
" "aaa.bbb" load "aaa" and then "bbb".
for name in split(s, '\.')
exe 'runtime! ftplugin/' . name . '.vim ftplugin/' . name . '_*.vim ftplugin/' . name . '/*.vim'
endfor
endif
endfunc
au FileType * call LoadFTPlugin()
augroup END
if exists('*LoadFTPlugin')
# No need to define the function again.
finish
endif
def LoadFTPlugin()
if exists("b:undo_ftplugin")
# We assume b:undo_ftplugin is using legacy script syntax
legacy exe b:undo_ftplugin
unlet! b:undo_ftplugin b:did_ftplugin
endif
var s = expand("<amatch>")
if s != ""
if &cpo =~# "S" && exists("b:did_ftplugin")
# In compatible mode options are reset to the global values, need to
# set the local values also when a plugin was already used.
unlet b:did_ftplugin
endif
# When there is a dot it is used to separate filetype names. Thus for
# "aaa.bbb" load "aaa" and then "bbb".
for name in split(s, '\.')
exe 'runtime! ftplugin/' .. name .. '.vim ftplugin/' .. name .. '_*.vim ftplugin/' .. name .. '/*.vim'
endfor
endif
enddef

View File

@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: BASIC
" Language: BASIC (QuickBASIC 4.5)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2015 Jan 10
" Last Change: 2021 Mar 16
if exists("b:did_ftplugin")
finish
@@ -11,17 +11,46 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal comments=:REM,:'
setlocal comments=:REM\ ,:Rem\ ,:rem\ ,:'
setlocal commentstring='\ %s
setlocal formatoptions-=t formatoptions+=croql
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" .
\ "All Files (*.*)\t*.*\n"
" TODO: support exit ... as middle matches?
if exists("loaded_matchit") && !exists("b:match_words")
let s:line_start = '\%(^\s*\)\@<='
let s:not_end = '\%(end\s\+\)\@<!'
let s:not_end_or_exit = '\%(\%(end\|exit\)\s\+\)\@<!'
let b:match_ignorecase = 1
let b:match_words =
\ s:not_end_or_exit .. '\<def\s\+fn:\<end\s\+def\>,' ..
\ s:not_end_or_exit .. '\<function\>:\<end\s\+function\>,' ..
\ s:not_end_or_exit .. '\<sub\>:\<end\s\+sub\>,' ..
\ s:not_end .. '\<type\>:\<end\s\+type\>,' ..
\ s:not_end .. '\<select\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
\ '\<do\>:\<loop\>,' ..
\ '\<for\>\%(\s\+\%(input\|output\|random\|append\|binary\)\)\@!:\<next\>,' ..
\ '\<while\>:\<wend\>,' ..
\ s:line_start .. 'if\%(.*\<then\s*\%($\|''\)\)\@=:\<\%(' .. s:line_start .. 'else\|elseif\)\>:\<end\s\+if\>,' ..
\ '\<lock\>:\<unlock\>'
let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string" || ' ..
\ 'strpart(getline("."), 0, col(".") ) =~? "\\<exit\\s\\+"'
unlet s:line_start s:not_end s:not_end_or_exit
endif
let b:undo_ftplugin = "setl fo< com< cms< sua<" .
\ " | unlet! b:browsefilter"
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" ..
\ "BASIC Include Files (*.bi, *.bm)\t*.bi;*.bm\n" ..
\ "All Files (*.*)\t*.*\n"
endif
let b:undo_ftplugin = "setl fo< com< cms<" ..
\ " | unlet! b:match_ignorecase b:match_skip b:match_words" ..
\ " | unlet! b:browsefilter"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@@ -1,13 +1,65 @@
" Vim filetype plugin file
" Language: FreeBasic
" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2015 Jan 10
" Last Change: 2021 Mar 16
" Setup {{{1
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
runtime! ftplugin/basic.vim
" vim: ts=8
let s:dialect = freebasic#GetDialect()
" Comments {{{1
" add ''comments before 'comments
let &l:comments = "sO:*\ -,mO:*\ \ ,exO:*/,s1:/',mb:',ex:'/,:''," .. &l:comments
" Match words {{{1
if exists("loaded_matchit")
let s:not_end = '\%(end\s\+\)\@<!'
let b:match_words ..= ','
if s:dialect == 'fb'
let b:match_words ..= s:not_end .. '\<constructor\>:\<end\s\+constructor\>,' ..
\ s:not_end .. '\<destructor\>:\<end\s\+destructor\>,' ..
\ s:not_end .. '\<property\>:\<end\s\+property\>,' ..
\ s:not_end .. '\<operator\>:\<end\s\+operator\>,' ..
\ s:not_end .. '\<extern\%(\s\+"\)\@=:\<end\s\+extern\>,'
endif
if s:dialect == 'fb' || s:dialect == 'deprecated'
let b:match_words ..= s:not_end .. '\<scope\>:\<end\s\+scope\>,'
endif
if s:dialect == 'qb'
let b:match_words ..= s:not_end .. '\<__asm\>:\<end\s\+__asm\>,' ..
\ s:not_end .. '\<__union\>:\<end\s\+__union\>,' ..
\ s:not_end .. '\<__with\>:\<end\s\+__with\>,'
else
let b:match_words ..= s:not_end .. '\<asm\>:\<end\s\+asm\>,' ..
\ s:not_end .. '\<namespace\>:\<end\s\+namespace\>,' ..
\ s:not_end .. '\<union\>:\<end\s\+union\>,' ..
\ s:not_end .. '\<with\>:\<end\s\+with\>,'
endif
let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' ..
\ '^#\s*\%(if\|ifdef\|ifndef\)\>:^#\s*\%(else\|elseif\)\>:^#\s*endif\>,' ..
\ '^#\s*macro\>:^#\s*endmacro\>'
" skip "function = <retval>"
let b:match_skip ..= '|| strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="'
unlet s:not_end
endif
" Cleanup {{{1
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

26
runtime/ftplugin/qb64.vim Normal file
View File

@@ -0,0 +1,26 @@
" Vim filetype plugin file
" Language: QB64
" Maintainer: Doug Kearns <dougkearns@gmail.com>
if exists("b:did_ftplugin")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
runtime! ftplugin/basic.vim
let s:not_end = '\%(end\s\+\)\@<!'
let b:match_words ..= ',' ..
\ s:not_end .. '\<declare\>:\<end\s\+declare\>,' ..
\ '\<select\s\+everycase\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
\ '$IF\>:$\%(ELSEIF\|ELSE\)\>:$END\s*IF\>'
unlet s:not_end
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@@ -1,13 +1,15 @@
" Vim support file to switch off loading plugins for file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2011 Oct 20
vim9script
if exists("did_load_ftplugin")
unlet did_load_ftplugin
# Vim support file to switch off loading plugins for file types
#
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last Change: 2022 Feb 09
if exists("g:did_load_ftplugin")
unlet g:did_load_ftplugin
endif
" Remove all autocommands in the filetypeplugin group, if any exist.
# Remove all autocommands in the filetypeplugin group, if any exist.
if exists("#filetypeplugin")
silent! au! filetypeplugin *
endif

View File

@@ -6,6 +6,7 @@ Name[de]=GVim
Name[eo]=GVim
Name[fi]=GVim
Name[fr]=GVim
Name[ga]=GVim
Name[it]=GVim
Name[ru]=GVim
Name[sr]=GVim
@@ -16,6 +17,7 @@ GenericName[de]=Texteditor
GenericName[eo]=Tekstoredaktilo
GenericName[fi]=Tekstinmuokkain
GenericName[fr]=Éditeur de texte
GenericName[ga]=Eagarthóir Téacs
GenericName[it]=Editor di testi
GenericName[ja]=テキストエディタ
GenericName[ru]=Текстовый редактор
@@ -27,6 +29,7 @@ Comment[de]=Textdateien bearbeiten
Comment[eo]=Redakti tekstajn dosierojn
Comment[fi]=Muokkaa tekstitiedostoja
Comment[fr]=Éditer des fichiers texte
Comment[ga]=Cuir comhaid téacs in eagar
Comment[it]=Edita file di testo
Comment[ja]=テキストファイルを編集します
Comment[ru]=Редактирование текстовых файлов
@@ -57,7 +60,6 @@ Comment[es]=Edita archivos de texto
Comment[et]=Redigeeri tekstifaile
Comment[eu]=Editatu testu-fitxategiak
Comment[fa]=ویرایش پرونده‌های متنی
Comment[ga]=Eagar comhad Téacs
Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
Comment[he]=ערוך קבצי טקסט
Comment[hi]=पाठ फ़ाइलें संपादित करें
@@ -107,6 +109,7 @@ Keywords[de]=Text;Editor;
Keywords[eo]=Teksto;redaktilo;
Keywords[fi]=Teksti;muokkain;editori;
Keywords[fr]=Texte;éditeur;
Keywords[ga]=Téacs;eagarthóir;
Keywords[it]=Testo;editor;
Keywords[ja]=テキスト;エディタ;
Keywords[ru]=текст;текстовый редактор;

View File

@@ -1,7 +1,7 @@
" Vim support file to switch on loading indent files for file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2008 Feb 22
" Last Change: 2022 Feb 11
if exists("did_indent_on")
finish
@@ -10,22 +10,23 @@ let did_indent_on = 1
augroup filetypeindent
au FileType * call s:LoadIndent()
func! s:LoadIndent()
if exists("b:undo_indent")
exe b:undo_indent
unlet! b:undo_indent b:did_indent
endif
let s = expand("<amatch>")
if s != ""
if exists("b:did_indent")
unlet b:did_indent
endif
" When there is a dot it is used to separate filetype names. Thus for
" "aaa.bbb" load "indent/aaa.vim" and then "indent/bbb.vim".
for name in split(s, '\.')
exe 'runtime! indent/' . name . '.vim'
endfor
endif
endfunc
augroup END
def s:LoadIndent()
if exists("b:undo_indent")
legacy exe b:undo_indent
unlet! b:undo_indent b:did_indent
endif
var s = expand("<amatch>")
if s != ""
if exists("b:did_indent")
unlet b:did_indent
endif
# When there is a dot it is used to separate filetype names. Thus for
# "aaa.bbb" load "indent/aaa.vim" and then "indent/bbb.vim".
for name in split(s, '\.')
exe 'runtime! indent/' .. name .. '.vim'
endfor
endif
enddef

11
runtime/indent/basic.vim Normal file
View File

@@ -0,0 +1,11 @@
" Vim indent file
" Language: BASIC (QuickBASIC 4.5)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 24
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/vb.vim

View File

@@ -0,0 +1,11 @@
" Vim indent file
" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 24
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/vb.vim

View File

@@ -1,7 +1,7 @@
" Vim indent script for HTML
" Maintainer: Bram Moolenaar
" Original Author: Andy Wokula <anwoku@yahoo.de>
" Last Change: 2021 Jun 13
" Last Change: 2022 Jan 31
" Version: 1.0 "{{{
" Description: HTML indent script with cached state for faster indenting on a
" range of lines.
@@ -149,6 +149,15 @@ func HtmlIndent_CheckUserSettings()
let b:html_indent_line_limit = 200
endif
endif
if exists('b:html_indent_attribute')
let b:hi_attr_indent = b:html_indent_attribute
elseif exists('g:html_indent_attribute')
let b:hi_attr_indent = g:html_indent_attribute
else
let b:hi_attr_indent = 2
endif
endfunc "}}}
" Init Script Vars
@@ -946,11 +955,11 @@ func s:InsideTag(foundHtmlString)
let idx = match(text, '<' . s:tagname . '\s\+\zs\w')
endif
if idx == -1
" after just "<tag" indent two levels more
" after just "<tag" indent two levels more by default
let idx = match(text, '<' . s:tagname . '$')
if idx >= 0
call cursor(lnum, idx + 1)
return virtcol('.') - 1 + shiftwidth() * 2
return virtcol('.') - 1 + shiftwidth() * b:hi_attr_indent
endif
endif
if idx > 0

11
runtime/indent/qb64.vim Normal file
View File

@@ -0,0 +1,11 @@
" Vim indent file
" Language: QB64
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 24
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/vb.vim

View File

@@ -1,4 +1,4 @@
" vim: set ft=html sw=4 :
" vim: set ft=html sw=4 ts=8 :
" START_INDENT
@@ -41,6 +41,11 @@ dd text
dt text
</dt>
</dl>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
@@ -50,6 +55,7 @@ dt text
% START_INDENT
% INDENT_EXE let g:html_indent_style1 = "inc"
% INDENT_EXE let g:html_indent_script1 = "zero"
% INDENT_EXE let g:html_indent_attribute = 1
% INDENT_EXE call HtmlIndent_CheckUserSettings()
<html>
<body>
@@ -61,6 +67,11 @@ div#d2 { color: green; }
var v1 = "v1";
var v2 = "v2";
</script>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
% END_INDENT

View File

@@ -1,4 +1,4 @@
" vim: set ft=html sw=4 :
" vim: set ft=html sw=4 ts=8 :
" START_INDENT
@@ -41,6 +41,11 @@ div#d2 { color: green; }
dt text
</dt>
</dl>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
@@ -50,6 +55,7 @@ div#d2 { color: green; }
% START_INDENT
% INDENT_EXE let g:html_indent_style1 = "inc"
% INDENT_EXE let g:html_indent_script1 = "zero"
% INDENT_EXE let g:html_indent_attribute = 1
% INDENT_EXE call HtmlIndent_CheckUserSettings()
<html>
<body>
@@ -61,6 +67,11 @@ div#d2 { color: green; }
var v1 = "v1";
var v2 = "v2";
</script>
<div
class="test"
style="color: yellow">
text
</div>
</body>
</html>
% END_INDENT

View File

@@ -1,52 +1,54 @@
" Script to define the syntax menu in synmenu.vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2019 Dec 07
vim9script
" This is used by "make menu" in the src directory.
# Script to define the syntax menu in synmenu.vim
# Maintainer: Bram Moolenaar <Bram@vim.org>
# Last Change: 2022 Feb 04
# This is used by "make menu" in the src directory.
edit <sfile>:p:h/synmenu.vim
/The Start Of The Syntax Menu/+1,/The End Of The Syntax Menu/-1d
let s:lnum = line(".") - 1
call append(s:lnum, "")
let s:lnum = s:lnum + 1
:/The Start Of The Syntax Menu/+1,/The End Of The Syntax Menu/-1d
var lnum = line(".") - 1
call append(lnum, "")
lnum += 1
" Use the SynMenu command and function to define all menu entries
command! -nargs=* SynMenu call <SID>Syn(<q-args>)
# Use the SynMenu command and function to define all menu entries
command! -nargs=* SynMenu call Syn(<q-args>)
let s:cur_menu_name = ""
let s:cur_menu_nr = 0
let s:cur_menu_item = 0
let s:cur_menu_char = ""
var cur_menu_name = ""
var cur_menu_nr = 0
var cur_menu_item = 0
var cur_menu_char = ""
fun! <SID>Syn(arg)
" isolate menu name: until the first dot
let i = match(a:arg, '\.')
let menu_name = strpart(a:arg, 0, i)
let r = strpart(a:arg, i + 1, 999)
" isolate submenu name: until the colon
let i = match(r, ":")
let submenu_name = strpart(r, 0, i)
" after the colon is the syntax name
let syntax_name = strpart(r, i + 1, 999)
def Syn(arg: string)
# isolate menu name: until the first dot
var i = match(arg, '\.')
var menu_name = strpart(arg, 0, i)
var r = strpart(arg, i + 1, 999)
# isolate submenu name: until the colon
i = match(r, ":")
var submenu_name = strpart(r, 0, i)
# after the colon is the syntax name
var syntax_name = strpart(r, i + 1, 999)
if s:cur_menu_name != menu_name
let s:cur_menu_name = menu_name
let s:cur_menu_nr = s:cur_menu_nr + 10
let s:cur_menu_item = 100
let s:cur_menu_char = submenu_name[0]
if cur_menu_name != menu_name
cur_menu_name = menu_name
cur_menu_nr += 10
cur_menu_item = 100
cur_menu_char = submenu_name[0]
else
" When starting a new letter, insert a menu separator.
let c = submenu_name[0]
# When starting a new letter, insert a menu separator.
var c = submenu_name[0]
if c != s:cur_menu_char
exe 'an 50.' . s:cur_menu_nr . '.' . s:cur_menu_item . ' &Syntax.' . menu_name . ".-" . c . '- <nul>'
let s:cur_menu_item = s:cur_menu_item + 10
let s:cur_menu_char = c
exe 'an 50.' .. s:cur_menu_nr .. '.' .. s:cur_menu_item .. ' &Syntax.' .. menu_name .. ".-" .. c .. '- <nul>'
cur_menu_item += 10
cur_menu_char = c
endif
endif
call append(s:lnum, 'an 50.' . s:cur_menu_nr . '.' . s:cur_menu_item . ' &Syntax.' . menu_name . "." . submenu_name . ' :cal SetSyn("' . syntax_name . '")<CR>')
let s:cur_menu_item = s:cur_menu_item + 10
let s:lnum = s:lnum + 1
endfun
append(lnum, 'an 50.' .. s:cur_menu_nr .. '.' .. s:cur_menu_item .. ' &Syntax.' .. menu_name .. "." .. submenu_name .. ' :cal SetSyn("' .. syntax_name .. '")<CR>')
cur_menu_item += 10
lnum += 1
enddef
SynMenu AB.A2ps\ config:a2ps
SynMenu AB.Aap:aap
@@ -676,6 +678,6 @@ SynMenu WXYZ.YAML:yaml
SynMenu WXYZ.Yacc:yacc
SynMenu WXYZ.Zimbu:zimbu
call append(s:lnum, "")
append(lnum, "")
wq

File diff suppressed because it is too large Load Diff

View File

@@ -763,9 +763,9 @@ fun! s:ParseSkip(str)
let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" ..
\ strpart(skip,2) .. "'"
elseif skip[0] == "r"
let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'"
let skip = "strpart(getline('.'),0,col('.'))=~'" .. strpart(skip,2) .. "'"
elseif skip[0] == "R"
let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'"
let skip = "strpart(getline('.'),0,col('.'))!~'" .. strpart(skip,2) .. "'"
endif
endif
return skip

View File

@@ -7,51 +7,57 @@
" Attached is a Vim script file for turning gvim into a shell script editor.
" It may also be used as an example how to use menus in Vim.
"
" Written by: Lennart Schultz <les@dmi.min.dk>
" Maintainer: Ada (Haowen) Yu <me@yuhaowen.com>
" Original author: Lennart Schultz <les@dmi.min.dk> (mail unreachable)
imenu Stmts.for for in
do
doneki kk0elli
imenu Stmts.case case in
) ;;
" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
" <CR> would not be recognized. See ":help 'cpoptions'".
let s:cpo_save = &cpo
set cpo&vim
imenu Stmts.for for in <CR>do<CR><CR>done<esc>ki <esc>kk0elli
imenu Stmts.case case in<CR>) ;;<CR>esac<esc>bki <esc>k0elli
imenu Stmts.if if <CR>then<CR><CR>fi<esc>ki <esc>kk0elli
imenu Stmts.if-else if <CR>then<CR><CR>else<CR><CR>fi<esc>ki <esc>kki <esc>kk0elli
imenu Stmts.elif elif <CR>then<CR><CR><esc>ki <esc>kk0elli
imenu Stmts.while while do<CR><CR>done<esc>ki <esc>kk0elli
imenu Stmts.break break
imenu Stmts.continue continue
then
imenu Stmts.function () {<CR><CR>}<esc>ki <esc>k0i
imenu Stmts.return return
imenu Stmts.return-true return 0
imenu Stmts.return-false return 1
imenu Stmts.exit exit
imenu Stmts.shift shift
imenu Stmts.trap trap
fiki kki kk0elli
imenu Stmts.elif elif
then
ki kk0elli
imenu Stmts.while while
do
doneki kk0elli
imenu Stmts.break break
imenu Stmts.continue continue
imenu Stmts.function () {
}ki k0i
imenu Stmts.return return
imenu Stmts.return-true return 0
imenu Stmts.return-false return 1
imenu Stmts.exit exit
imenu Stmts.shift shift
imenu Stmts.trap trap
imenu Test.existence [ -e ]hi
imenu Test.existence - file [ -f ]hi
imenu Test.existence - file (not empty) [ -s ]hi
imenu Test.existence - directory [ -d ]hi
imenu Test.existence - executable [ -x ]hi
imenu Test.existence - readable [ -r ]hi
imenu Test.existence - writable [ -w ]hi
imenu Test.existence [ -e ]<esc>hi
imenu Test.existence\ -\ file [ -f ]<esc>hi
imenu Test.existence\ -\ file\ (not\ empty) [ -s ]<esc>hi
imenu Test.existence\ -\ directory [ -d ]<esc>hi
imenu Test.existence\ -\ executable [ -x ]<esc>hi
imenu Test.existence\ -\ readable [ -r ]<esc>hi
imenu Test.existence\ -\ writable [ -w ]<esc>hi
imenu Test.String\ is\ empty [ x = "x$" ]<esc>hhi
imenu Test.String\ is\ not\ empty [ x != "x$" ]<esc>hhi
imenu Test.Strings\ is\ equal [ "" = "" ]<esc>hhhhhhhi
imenu Test.Strings\ is\ not\ equal [ "" != "" ]<esc>hhhhhhhhi
imenu Test.Values\ is\ greater\ than [ -gt ]<esc>hhhhhhi
imenu Test.Values\ is\ greater\ equal [ -ge ]<esc>hhhhhhi
imenu Test.Values\ is\ equal [ -eq ]<esc>hhhhhhi
imenu Test.Values\ is\ not\ equal [ -ne ]<esc>hhhhhhi
imenu Test.Values\ is\ less\ than [ -lt ]<esc>hhhhhhi
imenu Test.Values\ is\ less\ equal [ -le ]<esc>hhhhhhi
imenu ParmSub.Substitute\ word\ if\ parm\ not\ set ${:-}<esc>hhi
imenu ParmSub.Set\ parm\ to\ word\ if\ not\ set ${:=}<esc>hhi
imenu ParmSub.Substitute\ word\ if\ parm\ set\ else\ nothing ${:+}<esc>hhi
imenu ParmSub.If\ parm\ not\ set\ print\ word\ and\ exit ${:?}<esc>hhi
imenu SpShVars.Number\ of\ positional\ parameters ${#}
imenu SpShVars.All\ positional\ parameters\ (quoted\ spaces) ${*}
imenu SpShVars.All\ positional\ parameters\ (unquoted\ spaces) ${@}
imenu SpShVars.Flags\ set ${-}
imenu SpShVars.Return\ code\ of\ last\ command ${?}
imenu SpShVars.Process\ number\ of\ this\ shell ${$}
imenu SpShVars.Process\ number\ of\ last\ background\ command ${!}
imenu Environ.HOME ${HOME}
imenu Environ.PATH ${PATH}
imenu Environ.CDPATH ${CDPATH}
@@ -82,13 +88,17 @@ imenu Builtins.umask umask
imenu Builtins.wait wait
imenu Set.set set
imenu Set.unset unset
imenu Environ.SHELL ${SHELL}
imenu Environ.LC_CTYPE ${LC_CTYPE}
imenu Environ.LC_MESSAGES ${LC_MESSAGES}
imenu Builtins.cd cd
imenu Builtins.echo echo
imenu Builtins.eval eval
imenu Builtins.exec exec
imenu Builtins.export export
imenu Builtins.getopts getopts
imenu Builtins.hash hash
imenu Set.mark\ modified\ or\ modified\ variables set -a
imenu Set.exit\ when\ command\ returns\ non-zero\ exit\ code set -e
imenu Set.Disable\ file\ name\ generation set -f
imenu Set.remember\ function\ commands set -h
imenu Set.All\ keyword\ arguments\ are\ placed\ in\ the\ environment set -k
imenu Set.Read\ commands\ but\ do\ not\ execute\ them set -n
imenu Set.Exit\ after\ reading\ and\ executing\ one\ command set -t
imenu Set.Treat\ unset\ variables\ as\ an\ error\ when\ substituting set -u
imenu Set.Print\ shell\ input\ lines\ as\ they\ are\ read set -v
imenu Set.Print\ commands\ and\ their\ arguments\ as\ they\ are\ executed set -x
" Restore the previous value of 'cpoptions'.
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types in scripts
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2021 Jan 22
" Last change: 2022 Feb 13
" This file is called by an autocommand for every file that has just been
" loaded into a buffer. It checks if the type of file can be recognized by
@@ -12,7 +12,7 @@
" =~? instead. Do not use =~ anywhere.
" Only do the rest when the FileType autocommand has not been triggered yet.
" Bail out when a FileType autocommand has already set the filetype.
if did_filetype()
finish
endif
@@ -26,422 +26,5 @@ if exists("myscriptsfile") && filereadable(expand(myscriptsfile))
endif
endif
" Line continuation is used here, remove 'C' from 'cpoptions'
let s:cpo_save = &cpo
set cpo&vim
let s:line1 = getline(1)
if s:line1 =~# "^#!"
" A script that starts with "#!".
" Check for a line like "#!/usr/bin/env {options} bash". Turn it into
" "#!/usr/bin/bash" to make matching easier.
" Recognize only a few {options} that are commonly used.
if s:line1 =~# '^#!\s*\S*\<env\s'
let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
let s:line1 = substitute(s:line1, '\(-[iS]\|--ignore-environment\|--split-string\)', '', '')
let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
endif
" Get the program name.
" Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
" If the word env is used, use the first word after the space:
" "#!/usr/bin/env perl [path/args]"
" If there is no path use the first word: "#!perl [path/args]".
" Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
if s:line1 =~# '^#!\s*\a:[/\\]'
let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
elseif s:line1 =~# '^#!.*\<env\>'
let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
else
let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
endif
" tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
" third line. Suggested by Steven Atkinson.
if getline(3) =~# '^exec wish'
let s:name = 'wish'
endif
" Bourne-like shell scripts: bash bash2 ksh ksh93 sh
if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>'
call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
" csh scripts
elseif s:name =~# '^csh\>'
if exists("g:filetype_csh")
call dist#ft#SetFileTypeShell(g:filetype_csh)
else
call dist#ft#SetFileTypeShell("csh")
endif
" tcsh scripts
elseif s:name =~# '^tcsh\>'
call dist#ft#SetFileTypeShell("tcsh")
" Z shell scripts
elseif s:name =~# '^zsh\>'
set ft=zsh
" TCL scripts
elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
set ft=tcl
" Expect scripts
elseif s:name =~# '^expect\>'
set ft=expect
" Gnuplot scripts
elseif s:name =~# '^gnuplot\>'
set ft=gnuplot
" Makefiles
elseif s:name =~# 'make\>'
set ft=make
" Pike
elseif s:name =~# '^pike\%(\>\|[0-9]\)'
set ft=pike
" Lua
elseif s:name =~# 'lua'
set ft=lua
" Perl
elseif s:name =~# 'perl'
set ft=perl
" PHP
elseif s:name =~# 'php'
set ft=php
" Python
elseif s:name =~# 'python'
set ft=python
" Groovy
elseif s:name =~# '^groovy\>'
set ft=groovy
" Raku
elseif s:name =~# 'raku'
set ft=raku
" Ruby
elseif s:name =~# 'ruby'
set ft=ruby
" JavaScript
elseif s:name =~# 'node\(js\)\=\>\|js\>' || s:name =~# 'rhino\>'
set ft=javascript
" BC calculator
elseif s:name =~# '^bc\>'
set ft=bc
" sed
elseif s:name =~# 'sed\>'
set ft=sed
" OCaml-scripts
elseif s:name =~# 'ocaml'
set ft=ocaml
" Awk scripts; also finds "gawk"
elseif s:name =~# 'awk\>'
set ft=awk
" Website MetaLanguage
elseif s:name =~# 'wml'
set ft=wml
" Scheme scripts
elseif s:name =~# 'scheme'
set ft=scheme
" CFEngine scripts
elseif s:name =~# 'cfengine'
set ft=cfengine
" Erlang scripts
elseif s:name =~# 'escript'
set ft=erlang
" Haskell
elseif s:name =~# 'haskell'
set ft=haskell
" Scala
elseif s:name =~# 'scala\>'
set ft=scala
" Clojure
elseif s:name =~# 'clojure'
set ft=clojure
" Free Pascal
elseif s:name =~# 'instantfpc\>'
set ft=pascal
" Fennel
elseif s:name =~# 'fennel\>'
set ft=fennel
" MikroTik RouterOS script
elseif s:name =~# 'rsc\>'
set ft=routeros
" Fish shell
elseif s:name =~# 'fish\>'
set ft=fish
" Gforth
elseif s:name =~# 'gforth\>'
set ft=forth
endif
unlet s:name
else
" File does not start with "#!".
let s:line2 = getline(2)
let s:line3 = getline(3)
let s:line4 = getline(4)
let s:line5 = getline(5)
" Bourne-like shell scripts: sh ksh bash bash2
if s:line1 =~# '^:$'
call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
" Z shell scripts
elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
set ft=zsh
" ELM Mail files
elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
set ft=mail
" Mason
elseif s:line1 =~# '^<[%&].*>'
set ft=mason
" Vim scripts (must have '" vim' as the first line to trigger this)
elseif s:line1 =~# '^" *[vV]im$'
set ft=vim
" libcxx and libstdc++ standard library headers like "iostream" do not have
" an extension, recognize the Emacs file mode.
elseif s:line1 =~? '-\*-.*C++.*-\*-'
set ft=cpp
" MOO
elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
set ft=moo
" Diff file:
" - "diff" in first line (context diff)
" - "Only in " in first line
" - "--- " in first line and "+++ " in second line (unified diff).
" - "*** " in first line and "--- " in second line (context diff).
" - "# It was generated by makepatch " in the second line (makepatch diff).
" - "Index: <filename>" in the first line (CVS file)
" - "=== ", line of "=", "---", "+++ " (SVK diff)
" - "=== ", "--- ", "+++ " (bzr diff, common case)
" - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
" - "# HG changeset patch" in first line (Mercurial export format)
elseif s:line1 =~# '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
\ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
\ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
\ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
\ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
\ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
set ft=diff
" PostScript Files (must have %!PS as the first line, like a2ps output)
elseif s:line1 =~# '^%![ \t]*PS'
set ft=postscr
" M4 scripts: Guess there is a line that starts with "dnl".
elseif s:line1 =~# '^\s*dnl\>'
\ || s:line2 =~# '^\s*dnl\>'
\ || s:line3 =~# '^\s*dnl\>'
\ || s:line4 =~# '^\s*dnl\>'
\ || s:line5 =~# '^\s*dnl\>'
set ft=m4
" AmigaDos scripts
elseif $TERM == "amiga"
\ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
set ft=amiga
" SiCAD scripts (must have procn or procd as the first line to trigger this)
elseif s:line1 =~? '^ *proc[nd] *$'
set ft=sicad
" Purify log files start with "**** Purify"
elseif s:line1 =~# '^\*\*\*\* Purify'
set ft=purifylog
" XML
elseif s:line1 =~# '<?\s*xml.*?>'
set ft=xml
" XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
elseif s:line1 =~# '\<DTD\s\+XHTML\s'
set ft=xhtml
" HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
" Avoid "doctype html", used by slim.
elseif s:line1 =~? '<!DOCTYPE\s\+html\>'
set ft=html
" PDF
elseif s:line1 =~# '^%PDF-'
set ft=pdf
" XXD output
elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
set ft=xxd
" RCS/CVS log output
elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
set ft=rcslog
" CVS commit
elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
set ft=cvs
" Prescribe
elseif s:line1 =~# '^!R!'
set ft=prescribe
" Send-pr
elseif s:line1 =~# '^SEND-PR:'
set ft=sendpr
" SNNS files
elseif s:line1 =~# '^SNNS network definition file'
set ft=snnsnet
elseif s:line1 =~# '^SNNS pattern definition file'
set ft=snnspat
elseif s:line1 =~# '^SNNS result file'
set ft=snnsres
" Virata
elseif s:line1 =~# '^%.\{-}[Vv]irata'
\ || s:line2 =~# '^%.\{-}[Vv]irata'
\ || s:line3 =~# '^%.\{-}[Vv]irata'
\ || s:line4 =~# '^%.\{-}[Vv]irata'
\ || s:line5 =~# '^%.\{-}[Vv]irata'
set ft=virata
" Strace
elseif s:line1 =~# '[0-9:.]* *execve(' || s:line1 =~# '^__libc_start_main'
set ft=strace
" VSE JCL
elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
set ft=vsejcl
" TAK and SINDA
elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
set ft=takout
elseif s:line3 =~# 'S Y S T E M S I M P R O V E D '
set ft=sindaout
elseif getline(6) =~# 'Run Date: '
set ft=takcmp
elseif getline(9) =~# 'Node File 1'
set ft=sindacmp
" DNS zone files
elseif s:line1.s:line2.s:line3.s:line4 =~# '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
set ft=bindzone
" BAAN
elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
\ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
set ft=baan
" Valgrind
elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
set ft=valgrind
" Go docs
elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
set ft=godoc
" Renderman Interface Bytestream
elseif s:line1 =~# '^##RenderMan'
set ft=rib
" Scheme scripts
elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
set ft=scheme
" Git output
elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40,\}\>\|^tag \S\+$'
set ft=git
" Gprof (gnu profiler)
elseif s:line1 == 'Flat profile:'
\ && s:line2 == ''
\ && s:line3 =~# '^Each sample counts as .* seconds.$'
set ft=gprof
" Erlang terms
" (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
elseif s:line1 =~? '-\*-.*erlang.*-\*-'
set ft=erlang
" YAML
elseif s:line1 =~# '^%YAML'
set ft=yaml
" MikroTik RouterOS script
elseif s:line1 =~# '^#.*by RouterOS.*$'
set ft=routeros
" Sed scripts
" #ncomment is allowed but most likely a false positive so require a space
" before any trailing comment text
elseif s:line1 =~# '^#n\%($\|\s\)'
set ft=sed
" CVS diff
else
let s:lnum = 1
while getline(s:lnum) =~# "^? " && s:lnum < line("$")
let s:lnum += 1
endwhile
if getline(s:lnum) =~# '^Index:\s\+\f\+$'
set ft=diff
" locale input files: Formal Definitions of Cultural Conventions
" filename must be like en_US, fr_FR@euro or en_US.UTF-8
elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
let s:lnum = 1
while s:lnum < 100 && s:lnum < line("$")
if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
setf fdcc
break
endif
let s:lnum += 1
endwhile
endif
unlet s:lnum
endif
unlet s:line2 s:line3 s:line4 s:line5
endif
" Restore 'cpoptions'
let &cpo = s:cpo_save
unlet s:cpo_save s:line1
" The main code is in a compiled function for speed.
call dist#script#DetectFiletype()

View File

@@ -2,31 +2,26 @@
" This file is normally sourced from menu.vim.
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2017 Oct 28
" Last Change: 2022 Feb 04
" Define the SetSyn function, used for the Syntax menu entries.
" Set 'filetype' and also 'syntax' if it is manually selected.
fun! SetSyn(name)
if a:name == "fvwm1"
let use_fvwm_1 = 1
let use_fvwm_2 = 0
let name = "fvwm"
elseif a:name == "fvwm2"
let use_fvwm_2 = 1
let use_fvwm_1 = 0
let name = "fvwm"
else
let name = a:name
def SetSyn(name: string)
var filetype = name
if name == "fvwm1" || name == "fvwm2"
g:use_fvwm_1 = name == "fvwm1"
g:use_fvwm_2 = name == "fvwm2"
filetype = "fvwm"
endif
if !exists("s:syntax_menu_synonly")
exe "set ft=" . name
exe "set ft=" .. filetype
if exists("g:syntax_manual")
exe "set syn=" . name
exe "set syn=" .. filetype
endif
else
exe "set syn=" . name
exe "set syn=" .. filetype
endif
endfun
enddef
" <> notation is used here, remove '<' from 'cpoptions'
let s:cpo_save = &cpo
@@ -404,7 +399,6 @@ an 50.90.120 &Syntax.PQ.Pam\ config :cal SetSyn("pamconf")<CR>
an 50.90.130 &Syntax.PQ.PApp :cal SetSyn("papp")<CR>
an 50.90.140 &Syntax.PQ.Pascal :cal SetSyn("pascal")<CR>
an 50.90.150 &Syntax.PQ.Password\ file :cal SetSyn("passwd")<CR>
an 50.90.490 &Syntax.PQ.Pbtxt :cal SetSyn("pbtxt")<CR>
an 50.90.160 &Syntax.PQ.PCCTS :cal SetSyn("pccts")<CR>
an 50.90.170 &Syntax.PQ.PDF :cal SetSyn("pdf")<CR>
an 50.90.180 &Syntax.PQ.Perl.Perl :cal SetSyn("perl")<CR>
@@ -457,19 +451,20 @@ an 50.100.180 &Syntax.R.RCS.RCS\ file :cal SetSyn("rcs")<CR>
an 50.100.190 &Syntax.R.Readline\ config :cal SetSyn("readline")<CR>
an 50.100.200 &Syntax.R.Rebol :cal SetSyn("rebol")<CR>
an 50.100.210 &Syntax.R.ReDIF :cal SetSyn("redif")<CR>
an 50.100.220 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
an 50.100.230 &Syntax.R.Remind :cal SetSyn("remind")<CR>
an 50.100.240 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
an 50.100.250 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
an 50.100.260 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
an 50.100.270 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
an 50.100.280 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
an 50.100.290 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
an 50.100.300 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
an 50.100.310 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
an 50.100.320 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
an 50.100.330 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
an 50.100.340 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
an 50.100.220 &Syntax.R.Rego :cal SetSyn("rego")<CR>
an 50.100.230 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
an 50.100.240 &Syntax.R.Remind :cal SetSyn("remind")<CR>
an 50.100.250 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
an 50.100.260 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
an 50.100.270 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
an 50.100.280 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
an 50.100.290 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
an 50.100.300 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
an 50.100.310 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
an 50.100.320 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
an 50.100.330 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
an 50.100.340 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
an 50.100.350 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
an 50.110.100 &Syntax.M.ReStructuredText\ with\ R\ statements :cal SetSyn("rrst")<CR>
an 50.120.100 &Syntax.R.RTF :cal SetSyn("rtf")<CR>
an 50.120.110 &Syntax.R.Ruby :cal SetSyn("ruby")<CR>
@@ -652,11 +647,11 @@ an 50.170.440 &Syntax.WXYZ.Zimbu :cal SetSyn("zimbu")<CR>
an 50.195 &Syntax.-SEP1- <Nop>
an <silent> 50.200 &Syntax.Set\ '&syntax'\ Only :call <SID>Setsynonly()<CR>
fun! s:Setsynonly()
fun s:Setsynonly()
let s:syntax_menu_synonly = 1
endfun
an <silent> 50.202 &Syntax.Set\ '&filetype'\ Too :call <SID>Nosynonly()<CR>
fun! s:Nosynonly()
fun s:Nosynonly()
if exists("s:syntax_menu_synonly")
unlet s:syntax_menu_synonly
endif

View File

@@ -1,14 +1,15 @@
" Vim syntax file
" Language: BASIC
" Language: BASIC (QuickBASIC 4.5)
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
" Contributors: Thilo Six
" Last Change: 2015 Jan 10
" Last Change: 2021 Aug 08
" First version based on Micro$soft QBASIC circa 1989, as documented in
" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
" This syntax file not a complete implementation yet. Send suggestions to the
" maintainer.
"
" Second version attempts to match Microsoft QuickBASIC 4.5 while keeping FreeBASIC
" (-lang qb) and QB64 (excluding extensions) in mind. -- DJK
" Prelude {{{1
if exists("b:current_syntax")
@@ -18,154 +19,357 @@ endif
let s:cpo_save = &cpo
set cpo&vim
" Keywords {{{1
syn keyword basicStatement BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
syn keyword basicStatement CALL call Call ABSOLUTE absolute Absolute
syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir
syn keyword basicStatement CIRCLE circle Circle CLEAR clear Clear
syn keyword basicStatement CLOSE close Close CLS cls Cls COLOR color Color
syn keyword basicStatement COM com Com COMMON common Common
syn keyword basicStatement CONST const Const DATA data Data
syn keyword basicStatement DECLARE declare Declare DEF def Def
syn keyword basicStatement DEFDBL defdbl Defdbl DEFINT defint Defint
syn keyword basicStatement DEFLNG deflng Deflng DEFSNG defsng Defsng
syn keyword basicStatement DEFSTR defstr Defstr DIM dim Dim
syn keyword basicStatement DO do Do LOOP loop Loop
syn keyword basicStatement DRAW draw Draw END end End
syn keyword basicStatement ENVIRON environ Environ ERASE erase Erase
syn keyword basicStatement ERROR error Error EXIT exit Exit
syn keyword basicStatement FIELD field Field FILES files Files
syn keyword basicStatement FOR for For NEXT next Next
syn keyword basicStatement FUNCTION function Function GET get Get
syn keyword basicStatement GOSUB gosub Gosub GOTO goto Goto
syn keyword basicStatement IF if If THEN then Then ELSE else Else
syn keyword basicStatement INPUT input Input INPUT# input# Input#
syn keyword basicStatement IOCTL ioctl Ioctl KEY key Key
syn keyword basicStatement KILL kill Kill LET let Let
syn keyword basicStatement LINE line Line LOCATE locate Locate
syn keyword basicStatement LOCK lock Lock UNLOCK unlock Unlock
syn keyword basicStatement LPRINT lprint Lprint USING using Using
syn keyword basicStatement LSET lset Lset MKDIR mkdir Mkdir
syn keyword basicStatement NAME name Name ON on On
syn keyword basicStatement ERROR error Error OPEN open Open
syn keyword basicStatement OPTION option Option BASE base Base
syn keyword basicStatement OUT out Out PAINT paint Paint
syn keyword basicStatement PALETTE palette Palette PCOPY pcopy Pcopy
syn keyword basicStatement PEN pen Pen PLAY play Play
syn keyword basicStatement PMAP pmap Pmap POKE poke Poke
syn keyword basicStatement PRESET preset Preset PRINT print Print
syn keyword basicStatement PRINT# print# Print# USING using Using
syn keyword basicStatement PSET pset Pset PUT put Put
syn keyword basicStatement RANDOMIZE randomize Randomize READ read Read
syn keyword basicStatement REDIM redim Redim RESET reset Reset
syn keyword basicStatement RESTORE restore Restore RESUME resume Resume
syn keyword basicStatement RETURN return Return RMDIR rmdir Rmdir
syn keyword basicStatement RSET rset Rset RUN run Run
syn keyword basicStatement SEEK seek Seek SELECT select Select
syn keyword basicStatement CASE case Case SHARED shared Shared
syn keyword basicStatement SHELL shell Shell SLEEP sleep Sleep
syn keyword basicStatement SOUND sound Sound STATIC static Static
syn keyword basicStatement STOP stop Stop STRIG strig Strig
syn keyword basicStatement SUB sub Sub SWAP swap Swap
syn keyword basicStatement SYSTEM system System TIMER timer Timer
syn keyword basicStatement TROFF troff Troff TRON tron Tron
syn keyword basicStatement TYPE type Type UNLOCK unlock Unlock
syn keyword basicStatement VIEW view View WAIT wait Wait
syn keyword basicStatement WHILE while While WEND wend Wend
syn keyword basicStatement WIDTH width Width WINDOW window Window
syn keyword basicStatement WRITE write Write DATE$ date$ Date$
syn keyword basicStatement MID$ mid$ Mid$ TIME$ time$ Time$
syn iskeyword @,48-57,.,!,#,%,&,$
syn case ignore
syn keyword basicFunction ABS abs Abs ASC asc Asc
syn keyword basicFunction ATN atn Atn CDBL cdbl Cdbl
syn keyword basicFunction CINT cint Cint CLNG clng Clng
syn keyword basicFunction COS cos Cos CSNG csng Csng
syn keyword basicFunction CSRLIN csrlin Csrlin CVD cvd Cvd
syn keyword basicFunction CVDMBF cvdmbf Cvdmbf CVI cvi Cvi
syn keyword basicFunction CVL cvl Cvl CVS cvs Cvs
syn keyword basicFunction CVSMBF cvsmbf Cvsmbf EOF eof Eof
syn keyword basicFunction ERDEV erdev Erdev ERL erl Erl
syn keyword basicFunction ERR err Err EXP exp Exp
syn keyword basicFunction FILEATTR fileattr Fileattr FIX fix Fix
syn keyword basicFunction FRE fre Fre FREEFILE freefile Freefile
syn keyword basicFunction INP inp Inp INSTR instr Instr
syn keyword basicFunction INT int Int LBOUND lbound Lbound
syn keyword basicFunction LEN len Len LOC loc Loc
syn keyword basicFunction LOF lof Lof LOG log Log
syn keyword basicFunction LPOS lpos Lpos PEEK peek Peek
syn keyword basicFunction PEN pen Pen POINT point Point
syn keyword basicFunction POS pos Pos RND rnd Rnd
syn keyword basicFunction SADD sadd Sadd SCREEN screen Screen
syn keyword basicFunction SEEK seek Seek SETMEM setmem Setmem
syn keyword basicFunction SGN sgn Sgn SIN sin Sin
syn keyword basicFunction SPC spc Spc SQR sqr Sqr
syn keyword basicFunction STICK stick Stick STRIG strig Strig
syn keyword basicFunction TAB tab Tab TAN tan Tan
syn keyword basicFunction UBOUND ubound Ubound VAL val Val
syn keyword basicFunction VALPTR valptr Valptr VALSEG valseg Valseg
syn keyword basicFunction VARPTR varptr Varptr VARSEG varseg Varseg
syn keyword basicFunction CHR$ Chr$ chr$ COMMAND$ command$ Command$
syn keyword basicFunction DATE$ date$ Date$ ENVIRON$ environ$ Environ$
syn keyword basicFunction ERDEV$ erdev$ Erdev$ HEX$ hex$ Hex$
syn keyword basicFunction INKEY$ inkey$ Inkey$ INPUT$ input$ Input$
syn keyword basicFunction IOCTL$ ioctl$ Ioctl$ LCASES$ lcases$ Lcases$
syn keyword basicFunction LAFT$ laft$ Laft$ LTRIM$ ltrim$ Ltrim$
syn keyword basicFunction MID$ mid$ Mid$ MKDMBF$ mkdmbf$ Mkdmbf$
syn keyword basicFunction MKD$ mkd$ Mkd$ MKI$ mki$ Mki$
syn keyword basicFunction MKL$ mkl$ Mkl$ MKSMBF$ mksmbf$ Mksmbf$
syn keyword basicFunction MKS$ mks$ Mks$ OCT$ oct$ Oct$
syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$
syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$
syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$
syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$
" Whitespace Errors {{{1
if exists("basic_space_errors")
if !exists("basic_no_trail_space_error")
syn match basicSpaceError display excludenl "\s\+$"
endif
if !exists("basic_no_tab_space_error")
syn match basicSpaceError display " \+\t"me=e-1
endif
endif
" Comment Errors {{{1
if !exists("basic_no_comment_errors")
syn match basicCommentError "\<REM\>.*"
endif
" Not Top Cluster {{{1
syn cluster basicNotTop contains=@basicLineIdentifier,basicDataString,basicDataSeparator,basicTodo
" Statements {{{1
syn cluster basicStatements contains=basicStatement,basicDataStatement,basicMetaRemStatement,basicPutStatement,basicRemStatement
let s:statements =<< trim EOL " {{{2
beep
bload
bsave
call
calls
case
chain
chdir
circle
clear
close
cls
color
com
common
const
declare
def
def\s\+seg
defdbl
defint
deflng
defsng
defstr
dim
do
draw
elseif
end
end\s\+\%(def\|function\|if\|select\|sub\|type\)
environ
erase
error
exit\s\+\%(def\|do\|for\|function\|sub\)
field
files
for
function
get
gosub
goto
if
input
ioctl
key
kill
let
line
line\s\+input
locate
lock
loop
lprint
lset
mkdir
name
next
on
on\s\+error
on\s\+uevent
open
open\s\+com
option
out
paint
palette
palette\s\+using
pcopy
pen
pmap
poke
preset
print
pset
randomize
read
redim
reset
restore
resume
return
rmdir
rset
run
select\s\+case
shared
shell
sleep
sound
static
stop
strig
sub
swap
system
troff
tron
type
uevent
unlock
using
view
view\s\+print
wait
wend
while
width
window
write
EOL
" }}}
for s in s:statements
exe 'syn match basicStatement "\<' .. s .. '\>" contained'
endfor
syn match basicStatement "\<\%(then\|else\)\>" nextgroup=@basicStatements skipwhite
" DATA Statement
syn match basicDataSeparator "," contained
syn region basicDataStatement matchgroup=basicStatement start="\<data\>" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicDataSeparator,basicDataString,basicNumber,basicFloat,basicString
if !exists("basic_no_data_fold")
syn region basicMultilineData start="^\s*\<data\>.*\n\%(^\s*\<data\>\)\@=" end="^\s*\<data\>.*\n\%(^\s*\<data\>\)\@!" contains=basicDataStatement transparent fold keepend
endif
" PUT File I/O and Graphics statements - needs special handling for graphics
" action verbs
syn match basicPutAction "\<\%(pset\|preset\|and\|or\|xor\)\>" contained
syn region basicPutStatement matchgroup=basicStatement start="\<put\>" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicKeyword,basicPutAction,basicFilenumber
" Keywords {{{1
let s:keywords =<< trim EOL " {{{2
absolute
access
alias
append
as
base
binary
byval
cdecl
com
def
do
for
function
gosub
goto
input
int86old
int86xold
interrupt
interruptx
is
key
len
list
local
lock
lprint
next
off
on
output
pen
play
random
read
resume
screen
seg
shared
signal
static
step
stop
strig
sub
timer
to
until
using
while
write
EOL
" }}}
for k in s:keywords
exe 'syn match basicKeyword "\<' .. k .. '\>"'
endfor
" Functions {{{1
syn keyword basicFunction abs asc atn cdbl chr$ cint clng command$ cos csng
syn keyword basicFunction csrlin cvd cvdmbf cvi cvl cvs cvsmbf environ$ eof
syn keyword basicFunction erdev erdev$ erl err exp fileattr fix fre freefile
syn keyword basicFunction hex$ inkey$ inp input$ instr int ioctl$ left$ lbound
syn keyword basicFunction lcase$ len loc lof log lpos ltrim$ mkd$ mkdmbf$ mki$
syn keyword basicFunction mkl$ mks$ mksmbf$ oct$ peek pen point pos right$ rnd
syn keyword basicFunction rtrim$ sadd setmem sgn sin space$ spc sqr stick str$
syn keyword basicFunction strig string$ tab tan ubound ucase$ val valptr
syn keyword basicFunction valseg varptr varptr$ varseg
" Functions and statements (same name) {{{1
syn match basicStatement "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>" contained
syn match basicFunction "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>"
" Types {{{1
syn keyword basicType integer long single double string any
" Strings {{{1
" Unquoted DATA strings - anything except [:,] and leading or trailing whitespace
" Needs lower priority than numbers
syn match basicDataString "[^[:space:],:]\+\%(\s\+[^[:space:],:]\+\)*" contained
syn region basicString start=+"+ end=+"+ oneline
" Booleans {{{1
if exists("basic_booleans")
syn keyword basicBoolean true false
endif
" Numbers {{{1
" Integer number, or floating point number without a dot.
syn match basicNumber "\<\d\+\>"
" Floating point number, with dot
syn match basicNumber "\<\d\+\.\d*\>"
" Floating point number, starting with a dot
syn match basicNumber "\.\d\+\>"
" String and Character constants {{{1
syn match basicSpecial "\\\d\d\d\|\\." contained
syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial
" Integers
syn match basicNumber "-\=&o\=\o\+[%&]\=\>"
syn match basicNumber "-\=&h\x\+[%&]\=\>"
syn match basicNumber "-\=\<\d\+[%&]\=\>"
" Line numbers {{{1
syn region basicLineNumber start="^\d" end="\s"
" Floats
syn match basicFloat "-\=\<\d\+\.\=\d*\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
syn match basicFloat "-\=\<\.\d\+\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
" Data-type suffixes {{{1
syn match basicTypeSpecifier "[a-zA-Z0-9][$%&!#]"ms=s+1
" Used with OPEN statement
syn match basicFilenumber "#\d\+"
" Statement anchors {{{1
syn match basicLineStart "^" nextgroup=@basicStatements,@basicLineIdentifier skipwhite
syn match basicStatementSeparator ":" nextgroup=@basicStatements skipwhite
" Mathematical operators {{{1
" syn match basicMathsOperator "[<>+\*^/\\=-]"
syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR"
" Line numbers and labels {{{1
" QuickBASIC limits these to 65,529 and 40 chars respectively
syn match basicLineNumber "\d\+" nextgroup=@basicStatements skipwhite contained
syn match basicLineLabel "\a[[:alnum:]]*\ze\s*:" nextgroup=@basicStatements skipwhite contained
syn cluster basicLineIdentifier contains=basicLineNumber,basicLineLabel
" Line Continuation {{{1
syn match basicLineContinuation "\s*\zs_\ze\s*$"
" Type suffixes {{{1
if exists("basic_type_suffixes")
syn match basicTypeSuffix "\a[[:alnum:].]*\zs[$%&!#]"
endif
" File numbers {{{1
syn match basicFilenumber "#\d\+"
syn match basicFilenumber "#\a[[:alnum:].]*[%&!#]\="
" Operators {{{1
if exists("basic_operators")
syn match basicArithmeticOperator "[-+*/\\^]"
syn match basicRelationalOperator "<>\|<=\|>=\|[><=]"
endif
syn match basicLogicalOperator "\<\%(not\|and\|or\|xor\|eqv\|imp\)\>"
syn match basicArithmeticOperator "\<mod\>"
" Metacommands {{{1
" Note: No trailing word boundaries. Text may be freely mixed however there
" must be only leading whitespace prior to the first metacommand
syn match basicMetacommand "$INCLUDE\s*:\s*'[^']\+'" contained containedin=@basicMetaComments
syn match basicMetacommand "$\%(DYNAMIC\|STATIC\)" contained containedin=@basicMetaComments
" Comments {{{1
syn keyword basicTodo TODO FIXME XXX NOTE contained
syn region basicComment start="^\s*\zsREM\>" start="\%(:\s*\)\@<=REM\>" end="$" contains=basicTodo
syn region basicComment start="'" end="$" contains=basicTodo
syn keyword basicTodo TODO FIXME XXX NOTE contained
syn region basicRemStatement matchgroup=basicStatement start="REM\>" end="$" contains=basicTodo,@Spell contained
syn region basicComment start="'" end="$" contains=basicTodo,@Spell
if !exists("basic_no_comment_fold")
syn region basicMultilineComment start="^\s*'.*\n\%(\s*'\)\@=" end="^\s*'.*\n\%(\s*'\)\@!" contains=@basicComments transparent fold keepend
endif
" Metacommands
syn region basicMetaRemStatement matchgroup=basicStatement start="REM\>\s*\$\@=" end="$" contains=basicTodo contained
syn region basicMetaComment start="'\s*\$\@=" end="$" contains=basicTodo
syn cluster basicMetaComments contains=basicMetaComment,basicMetaRemStatement
syn cluster basicComments contains=basicComment,basicMetaComment
"syn sync ccomment basicComment
" Default Highlighting {{{1
hi def link basicLabel Label
hi def link basicConditional Conditional
hi def link basicRepeat Repeat
hi def link basicLineNumber Comment
hi def link basicNumber Number
hi def link basicError Error
hi def link basicStatement Statement
hi def link basicString String
hi def link basicComment Comment
hi def link basicSpecial Special
hi def link basicTodo Todo
hi def link basicFunction Identifier
hi def link basicTypeSpecifier Type
hi def link basicFilenumber basicTypeSpecifier
"hi basicMathsOperator term=bold cterm=bold gui=bold
hi def link basicArithmeticOperator basicOperator
hi def link basicBoolean Boolean
hi def link basicComment Comment
hi def link basicCommentError Error
hi def link basicDataString basicString
hi def link basicFilenumber basicTypeSuffix " TODO: better group
hi def link basicFloat Float
hi def link basicFunction Identifier
hi def link basicKeyword Keyword
hi def link basicLineIdentifier LineNr
hi def link basicLineContinuation Special
hi def link basicLineLabel basicLineIdentifier
hi def link basicLineNumber basicLineIdentifier
hi def link basicLogicalOperator basicOperator
hi def link basicMetacommand SpecialComment
hi def link basicMetaComment Comment
hi def link basicMetaRemStatement Comment
hi def link basicNumber Number
hi def link basicOperator Operator
hi def link basicPutAction Keyword
hi def link basicRelationalOperator basicOperator
hi def link basicRemStatement Comment
hi def link basicSpaceError Error
hi def link basicStatementSeparator Special
hi def link basicStatement Statement
hi def link basicString String
hi def link basicTodo Todo
hi def link basicType Type
hi def link basicTypeSuffix Special
if exists("basic_legacy_syntax_groups")
hi def link basicTypeSpecifier Type
hi def link basicTypeSuffix basicTypeSpecifier
endif
" Postscript {{{1
let b:current_syntax = "basic"

409
runtime/syntax/qb64.vim Normal file
View File

@@ -0,0 +1,409 @@
" Vim syntax file
" Language: QB64
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2022 Jan 21
" Prelude {{{1
if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" syn iskeyword set after sourcing of basic.vim
syn case ignore
let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
" Statements {{{1
let s:statements =<< trim EOL " {{{2
acceptfiledrop
allowfullscreen
assert
console
consolecursor
consolefont
consoletitle
continue
copypalette
define
delay
depthbuffer
displayorder
dontblend
echo
exit\s\+\%(select\|case\)
finishdrop
freefont
freeimage
icon
keyclear
limit
maptriangle
memcopy
memfill
memfree
memput
mousehide
mousemove
mouseshow
printimage
printstring
putimage
screenclick
screenhide
screenmove
screenprint
screenshow
setalpha
sndbal
sndclose
sndlimit
sndloop
sndpause
sndplay
sndplaycopy
sndplayfile
sndraw
sndrawdone
sndsetpos
sndstop
sndvol
title
EOL
" }}}
for s in s:statements
exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
endfor
" Functions {{{1
let s:functions =<< trim EOL " {{{2
acos
acosh
alpha
alpha32
arccot
arccsc
arcsec
asin
asinh
atan2
atanh
axis
backgroundcolor
blue
blue32
button
buttonchange
ceil
cinp
commandcount
connected
connectionaddress
connectionaddress$
consoleinput
copyimage
cot
coth
cosh
csc
csch
cv
cwd$
d2g
d2r
defaultcolor
deflate$
desktopheight
desktopwidth
device$
deviceinput
devices
dir$
direxists
droppedfile
droppedfile$
errorline
errormessage$
exit
fileexists
fontheight
fontwidth
freetimer
g2d
g2r
green
green32
height
hypot
inclerrorfile$
inclerrorline
inflate$
instrrev
keyhit
keydown
lastaxis
lastbutton
lastwheel
loadfont
loadimage
mem
memelement
memexists
memimage
memnew
memsound
mk$
mousebutton
mouseinput
mousemovementx
mousemovementy
mousepipeopen
mousewheel
mousex
mousey
newimage
offset
openclient
os$
pi
pixelsize
printwidth
r2d
r2g
red
red32
readbit
resetbit
resizeheight
resizewidth
rgb
rgb32
rgba
rgba32
round
sec
sech
screenexists
screenimage
screenx
screeny
setbit
shellhide
shl
shr
sinh
sndcopy
sndgetpos
sndlen
sndopen
sndopenraw
sndpaused
sndplaying
sndrate
sndrawlen
startdir$
strcmp
stricmp
tanh
title$
togglebit
totaldroppedfiles
trim$
wheel
width
windowhandle
windowhasfocus
EOL
" }}}
for f in s:functions
exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
endfor
" Functions and statements (same name) {{{1
let s:common =<< trim EOL " {{{2
autodisplay
blend
blink
capslock
clearcolor
clipboard$
clipboardimage
controlchr
dest
display
font
fullscreen
mapunicode
memget
numlock
palettecolor
printmode
resize
screenicon
scrolllock
source
EOL
" }}}
for c in s:common
exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
exe 'syn match qb64Function "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
endfor
" Keywords {{{1
" Non-prefixed keywords {{{2
" TIMER FREE
" _DEPTH_BUFFER LOCK
syn keyword qb64Keyword free lock
let s:keywords =<< trim EOL " {{{2
all
anticlockwise
behind
clear
clip
console
dontwait
explicit
explicitarray
fillbackground
hardware
hardware1
hide
keepbackground
middle
none
off
only
onlybackground
ontop
openconnection
openhost
preserve
seamless
smooth
smoothshrunk
smoothstretched
software
squarepixels
stretch
toggle
EOL
" }}}
for k in s:keywords
exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
endfor
syn match qb64Underscore "\<_" contained conceal transparent
" Source QuickBASIC syntax {{{1
runtime! syntax/basic.vim
" add after the BASIC syntax file is sourced so cluster already exists
syn cluster basicStatements add=qb64Statement,qb64Metacommand,qb64IfMetacommand
syn cluster basicLineIdentifier add=qb64LineLabel
syn cluster qb64NotTop contains=@basicNotTop,qb64Metavariable
syn iskeyword @,48-57,.,_,!,#,$,%,&,`
" Unsupported QuickBASIC features {{{1
" TODO: add linux only missing features
syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
syn keyword qb64Unsupported tron troff
syn match qb64Unsupported "\<declare\%(\s\+\%(sub\|function\)\>\)\@="
syn match qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
syn match qb64Unsupported "\<def\zs\s\+FN"
syn match qb64Unsupported "\<\%(exit\|end\)\s\+def\>"
syn match qb64Unsupported "\<width\s\+lprint\>"
" Types {{{1
syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
" Type suffixes {{{1
if exists("basic_type_suffixes")
" TODO: handle leading word boundary and __+ prefix
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
endif
" Numbers {{{1
" Integers
syn match qb64Number "-\=&b[01]\+&\>\="
syn match qb64Number "-\=\<[01]\~\=`\>"
syn match qb64Number "-\=\<\d\+`\d\+\>"
syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
syn match qb64Number "\<\d\+\~\%(%%\|&&\|%&\)\>"
syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
syn match qb64Number "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
syn match qb64Number "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
syn match qb64Number "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
" Floats
syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
syn match qb64Float "-\=\<\.\d\+##\>"
" Line numbers and labels {{{1
syn match qb64LineLabel "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
" Metacommands {{{1
syn match qb64Metacommand contained "$NOPREFIX\>"
syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
syn match qb64Metacommand contained "$ERROR\>"
syn match qb64Metacommand contained "$LET\>"
syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\<THEN\>" oneline transparent contains=qb64Metavariable
syn match qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
syn keyword qb64Metavariable contained defined undefined
syn keyword qb64Metavariable contained windows win linux mac maxosx
syn keyword qb64Metavariable contained 32bit 64bit version
" Default Highlighting {{{1
hi def link qb64Float basicFloat
hi def link qb64Function Function
hi def link qb64Keyword Keyword
hi def link qb64LineLabel basicLineLabel
hi def link qb64Metacommand PreProc
hi def link qb64Metavariable Identifier
hi def link qb64Number basicNumber
hi def link qb64Statement Statement
hi def link qb64TypeSuffix basicTypeSuffix
hi def link qb64Type Type
hi def link qb64Unsupported Error
" Postscript {{{1
let b:current_syntax = "qb64"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:

View File

@@ -1,8 +1,7 @@
" Vim syntax file
" This is a GENERATED FILE. Please always refer to source file at the URI below.
" Language: strace output
" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
" Last Change: 2015-01-16
" Last Change: 2022 Jan 29
" Setup
" quit when a syntax file was already loaded

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Vim 8.2 script
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
" Last Change: January 11, 2022
" Version: 8.2-24
" Last Change: February 09, 2022
" Version: 8.2-28
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
" Automatically generated keyword lists: {{{1
@@ -66,8 +66,8 @@ syn keyword vimErrSetting contained bioskey biosk conskey consk autoprint beauti
" AutoCmd Events {{{2
syn case ignore
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinLeave BufWrite BufWritePost CmdlineChanged CmdlineLeave CmdwinEnter ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileExplorer FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre BufWinEnter BufWipeout BufWriteCmd BufWritePre CmdlineEnter CmdUndefined CmdwinLeave
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinLeave BufWrite BufWritePost CmdlineChanged CmdlineLeave CmdwinEnter ColorScheme CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileExplorer FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre BufWinEnter BufWipeout BufWriteCmd BufWritePre CmdlineEnter CmdUndefined CmdwinLeave ColorSchemePre
" Highlight commonly used Groupnames {{{2
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
@@ -78,12 +78,12 @@ syn match vimHLGroup contained "Conceal"
syn case match
" Function Names {{{2
syn keyword vimFuncName contained abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettagstack getwinvar has_key histget hlset input inputsecret isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettext glob haslocaldir histnr hostname inputdialog insert islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_drop_files test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
syn keyword vimFuncName contained add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob2regpat hasmapto hlexists iconv inputlist interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_gui_mouse_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
syn keyword vimFuncName contained and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos globpath histadd hlget indent inputrestore invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
syn keyword vimFuncName contained append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinposx has histdel hlID index inputsave isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist gettabwinvar getwinposy
syn keyword vimFuncName contained abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettabwinvar getwinposx globpath histadd hlget indent inputrestore invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettagstack getwinposy has histdel hlID index inputsave isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
syn keyword vimFuncName contained add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype gettext getwinvar has_key histget hlset input inputsecret isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
syn keyword vimFuncName contained and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwininfo glob haslocaldir histnr hostname inputdialog insert islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
syn keyword vimFuncName contained append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinpos glob2regpat hasmapto hlexists iconv inputlist interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1

View File

@@ -955,7 +955,7 @@ NOTE: Completion works for many commands. Just try pressing CTRL-D and
Publisher: New Riders
The first book completely dedicated to Vim. Especially useful for beginners.
There are many examples and pictures.
See http://iccf-holland.org/click5.html
See https://iccf-holland.org/click5.html
This book is older and more about Vi than Vim, but also recommended:
Learning the Vi Editor - by Linda Lamb

View File

@@ -954,7 +954,7 @@ Anm
Verlaag: New Riders
Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
See http://iccf-holland.org/click5.html
See https://iccf-holland.org/click5.html
Dös folgete Buech ist schoon ölter und meerer über n Urwimm als wie über n
Wimm, aber aau zo n Empfelhen: Textbearbeitung mit dem vi-Editor - von dyr
@@ -968,7 +968,7 @@ Anm
mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
Trotz dyr recht pfrengen Darstöllung ist s durch seine viln nützlichnen Bei-
spiler aau für Einsteiger grad grecht. Probhaeupster und de Beispilschripfer
seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
seind zesig zo n Kriegn; see https://iccf-holland.org/click5.html
Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo

View File

@@ -954,7 +954,7 @@ Anmörkung: D Vergöntzung geit s für aynn Hauffen Faudungen. Versuech ainfa
Verlaag: New Riders
Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
See http://iccf-holland.org/click5.html
See https://iccf-holland.org/click5.html
Dös folgete Buech ist schoon ölter und meerer über n Urwimm als wie über n
Wimm, aber aau zo n Empfelhen: Textbearbeitung mit dem vi-Editor - von dyr
@@ -968,7 +968,7 @@ Anmörkung: D Vergöntzung geit s für aynn Hauffen Faudungen. Versuech ainfa
mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
Trotz dyr recht pfrengen Darstöllung ist s durch seine viln nützlichnen Bei-
spiler aau für Einsteiger grad grecht. Probhaeupster und de Beispilschripfer
seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
seind zesig zo n Kriegn; see https://iccf-holland.org/click5.html
Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo

View File

@@ -1017,7 +1017,7 @@
Издател: New Riders
Това е първата книга, изцяло посветена на Vim. Особено полезна е за
начинаещи. В нея ще намерите много примери и картинки.
Вижте http://iccf-holland.org/click5.html
Вижте https://iccf-holland.org/click5.html
Следната книга е по-стара и по-скоро за Vi отколкото за Vim, но също се препоръчва:
Learning the Vi Editor - от Linda Lamb

View File

@@ -792,7 +792,7 @@ Nota: Aix
Editorial: New Riders
És el primer llibre dedicat completament al Vim, especialment útil per a
usuaris novells. Conté molts exemples i diagrames.
Vegeu http://iccf-holland.org/click5.html
Vegeu https://iccf-holland.org/click5.html
Aquest altre és més vell i tracta més sobre el Vi que sobre el Vim:
Learning the Vi Editor - de Linda Lamb

View File

@@ -792,7 +792,7 @@ Nota: Així s'evita haver de prémer i , l'últim caràcter, el text a inserir,
Editorial: New Riders
És el primer llibre dedicat completament al Vim, especialment útil per a
usuaris novells. Conté molts exemples i diagrames.
Vegeu http://iccf-holland.org/click5.html
Vegeu https://iccf-holland.org/click5.html
Aquest altre és més vell i tracta més sobre el Vi que sobre el Vim:
Learning the Vi Editor - de Linda Lamb

View File

@@ -791,7 +791,7 @@ Pozn
Nakladatel: New Riders
První kniha určená pro Vim. Obzvláště vhodná pro začátečníky.
Obsahuje množství příkladů a obrázků.
viz http://iccf-holland.org/click5.html
viz https://iccf-holland.org/click5.html
Tato kniha je starší a více věnovaná Vi než Vim, ale také doporučená:
Learning the Vi Editor - od Linda Lamb

View File

@@ -791,7 +791,7 @@ Pozn
Nakladatel: New Riders
První kniha určená pro Vim. Obzvláště vhodná pro začátečníky.
Obsahuje množství příkladů a obrázků.
viz http://iccf-holland.org/click5.html
viz https://iccf-holland.org/click5.html
Tato kniha je starší a více věnovaná Vi než Vim, ale také doporučená:
Learning the Vi Editor - od Linda Lamb

View File

@@ -791,7 +791,7 @@ Poznámka: Tímto se vyhneš stisknutí i , posledního znaku, textu na vlože
Nakladatel: New Riders
První kniha určená pro Vim. Obzvláště vhodná pro začátečníky.
Obsahuje množství příkladů a obrázků.
viz http://iccf-holland.org/click5.html
viz https://iccf-holland.org/click5.html
Tato kniha je starší a více věnovaná Vi než Vim, ale také doporučená:
Learning the Vi Editor - od Linda Lamb

View File

@@ -953,7 +953,7 @@ BEM
Forlag: New Riders
Den første bog som helt er tilegnet Vim. Specielt nyttig for begyndere.
Der er mange eksempler og billeder.
Se http://iccf-holland.org/click5.html
Se https://iccf-holland.org/click5.html
Denne bog er ældre og mere om Vi end Vim, men anbefales også:
Learning the Vi Editor - af Linda Lamb

View File

@@ -953,7 +953,7 @@ BEMÆRK: Fuldførelse virker til mange kommandoer. Prøv blot at trykke på
Forlag: New Riders
Den første bog som helt er tilegnet Vim. Specielt nyttig for begyndere.
Der er mange eksempler og billeder.
Se http://iccf-holland.org/click5.html
Se https://iccf-holland.org/click5.html
Denne bog er ældre og mere om Vi end Vim, men anbefales også:
Learning the Vi Editor - af Linda Lamb

View File

@@ -956,7 +956,7 @@ Anmerkung: Vervollst
Verlag: New Riders
Das erste Buch, welches durchgängig Vim gewidmet ist. Besonders nützlich
für Anfänger. Viele Beispiele und Bilder sind enthalten.
Siehe http://iccf-holland.org/click5.html
Siehe https://iccf-holland.org/click5.html
Folgendes Buch ist älter und mehr über Vi als Vim, aber auch empfehlenswert:
Textbearbeitung mit dem Vi-Editor - von Linda Lamb und Arnold Robbins
@@ -970,7 +970,7 @@ Anmerkung: Vervollst
mitp-Verlag, ISBN 3-8266-1425-9
Trotz der kompakten Darstellung ist es durch viele nützliche Beispiele auch
für Einsteiger empfehlenswert. Probekapitel und die Beispielskripte sind
online erhältlich. Siehe http://iccf-holland.org/click5.html
online erhältlich. Siehe https://iccf-holland.org/click5.html
Dieses Tutorial wurde geschrieben von Michael C. Pierce und Robert K. Ware,
Colorado School of Mines. Es benutzt Ideen, die Charles Smith, Colorado State

View File

@@ -956,7 +956,7 @@ Anmerkung: Vervollständigung funktioniert für viele Kommandos. Probiere
Verlag: New Riders
Das erste Buch, welches durchgängig Vim gewidmet ist. Besonders nützlich
für Anfänger. Viele Beispiele und Bilder sind enthalten.
Siehe http://iccf-holland.org/click5.html
Siehe https://iccf-holland.org/click5.html
Folgendes Buch ist älter und mehr über Vi als Vim, aber auch empfehlenswert:
Textbearbeitung mit dem Vi-Editor - von Linda Lamb und Arnold Robbins
@@ -970,7 +970,7 @@ Anmerkung: Vervollständigung funktioniert für viele Kommandos. Probiere
mitp-Verlag, ISBN 3-8266-1425-9
Trotz der kompakten Darstellung ist es durch viele nützliche Beispiele auch
für Einsteiger empfehlenswert. Probekapitel und die Beispielskripte sind
online erhältlich. Siehe http://iccf-holland.org/click5.html
online erhältlich. Siehe https://iccf-holland.org/click5.html
Dieses Tutorial wurde geschrieben von Michael C. Pierce und Robert K. Ware,
Colorado School of Mines. Es benutzt Ideen, die Charles Smith, Colorado State

View File

@@ -796,7 +796,7 @@
Το πρώτο βιβλίο πλήρως αφιερωμένο στον Vim.
Ιδιαίτερα χρήσιμο για αρχάριους.
Υπάρχουν πολλά παραδείγματα και εικόνες.
Δείτε την http://iccf-holland.org/click5.html
Δείτε την https://iccf-holland.org/click5.html
Αυτό το βιβλίο είναι παλιότερο και περισσότερο για τον Vi παρά για τον Vim,
αλλά επίσης συνιστώμενο:

View File

@@ -796,7 +796,7 @@
’¦ §¨é«¦ ™ ™¢å¦ §¢ã¨àª ˜­ œ¨à£â¤¦ ©«¦¤ Vim.
ˆ› ˜å«œ¨˜ ®¨ã© £¦ š ˜ ˜¨®á¨ ¦¬ª.
“§á¨®¦¬¤ §¦¢¢á §˜¨˜›œåš£˜«˜ ¡˜  œ ¡æ¤œª.
ƒœå«œ «ž¤ http://iccf-holland.org/click5.html
ƒœå«œ «ž¤ https://iccf-holland.org/click5.html
€¬«æ «¦ ™ ™¢å¦ œå¤˜  §˜¢ æ«œ¨¦ ¡˜  §œ¨ ©©æ«œ¨¦ š ˜ «¦¤ Vi §˜¨á š ˜ «¦¤ Vim,
˜¢¢á œ§å©žª ©¬¤ ©«é£œ¤¦:

View File

@@ -796,7 +796,7 @@
Το πρώτο βιβλίο πλήρως αφιερωμένο στον Vim.
Ιδιαίτερα χρήσιμο για αρχάριους.
Υπάρχουν πολλά παραδείγματα και εικόνες.
Δείτε την http://iccf-holland.org/click5.html
Δείτε την https://iccf-holland.org/click5.html
Αυτό το βιβλίο είναι παλιότερο και περισσότερο για τον Vi παρά για τον Vim,
αλλά επίσης συνιστώμενο:

View File

@@ -951,7 +951,7 @@ NAPOMENA: Mogu
Izdavač: New Riders
Prva knjiga potpuno posvećena Vim-u. Vrlo korisna za početnike.
Sa mnogo primjera i slika.
Posjetite http://iccf-holland.org/click5.html
Posjetite https://iccf-holland.org/click5.html
Sljedeća knjiga je nešto starija i više o Vi-u nego o Vim-u, preporučamo:
Learning the Vi Editor - by Linda Lamb

View File

@@ -951,7 +951,7 @@ NAPOMENA: Mogu
Izdavač: New Riders
Prva knjiga potpuno posvećena Vim-u. Vrlo korisna za početnike.
Sa mnogo primjera i slika.
Posjetite http://iccf-holland.org/click5.html
Posjetite https://iccf-holland.org/click5.html
Sljedeća knjiga je nešto starija i više o Vi-u nego o Vim-u, preporučamo:
Learning the Vi Editor - by Linda Lamb

View File

@@ -951,7 +951,7 @@ NAPOMENA: Moguće je dopuniti mnoge naredbe. Koristite CTRL-D i <TAB>.
Izdavač: New Riders
Prva knjiga potpuno posvećena Vim-u. Vrlo korisna za početnike.
Sa mnogo primjera i slika.
Posjetite http://iccf-holland.org/click5.html
Posjetite https://iccf-holland.org/click5.html
Sljedeća knjiga je nešto starija i više o Vi-u nego o Vim-u, preporučamo:
Learning the Vi Editor - by Linda Lamb

View File

@@ -810,7 +810,7 @@ Megj: A Vimben a sor legv
Publisher: New Riders
The first book completely dedicated to Vim. Especially useful for beginners.
There are many examples and pictures.
See http://iccf-holland.org/click5.html
See https://iccf-holland.org/click5.html
This book is older and more about Vi than Vim, but also recommended:
Learning the Vi Editor - by Linda Lamb

View File

@@ -810,7 +810,7 @@ Megj: A Vimben a sor legv
Publisher: New Riders
The first book completely dedicated to Vim. Especially useful for beginners.
There are many examples and pictures.
See http://iccf-holland.org/click5.html
See https://iccf-holland.org/click5.html
This book is older and more about Vi than Vim, but also recommended:
Learning the Vi Editor - by Linda Lamb

View File

@@ -810,7 +810,7 @@ Megj: A Vimben a sor legvégére is lehet állni, azonban ez elődjében
Publisher: New Riders
The first book completely dedicated to Vim. Especially useful for beginners.
There are many examples and pictures.
See http://iccf-holland.org/click5.html
See https://iccf-holland.org/click5.html
This book is older and more about Vi than Vim, but also recommended:
Learning the Vi Editor - by Linda Lamb

View File

@@ -951,7 +951,7 @@ NOTA: Il completamento
Vim - Vi Improved - di Steve Oualline Editore: New Riders
Il primo libro completamente dedicato a Vim. Utile specie per principianti.
Contiene molti esempi e figure.
Vedi http://iccf-holland.org/click5.html
Vedi https://iccf-holland.org/click5.html
Quest'altro libro è più su Vi che su Vim, ma è pure consigliato:
Learning the Vi Editor - di Linda Lamb e Arnold Robbins

View File

@@ -951,7 +951,7 @@ NOTA: Il completamento è disponibile per molti comandi. Prova a battere
Vim - Vi Improved - di Steve Oualline Editore: New Riders
Il primo libro completamente dedicato a Vim. Utile specie per principianti.
Contiene molti esempi e figure.
Vedi http://iccf-holland.org/click5.html
Vedi https://iccf-holland.org/click5.html
Quest'altro libro è più su Vi che su Vim, ma è pure consigliato:
Learning the Vi Editor - di Linda Lamb e Arnold Robbins

View File

@@ -955,7 +955,7 @@ NOTE:
出版社: New Riders
最初の本は完全に Vim のために書かれました。とりわけ初心者にはお奨めです。
多くの例題や図版が掲載されています。
次のURLを参照して下さい http://iccf-holland.org/click5.html
次のURLを参照して下さい https://iccf-holland.org/click5.html
次は Vim よりも Vi について書かれた古い本ですが推薦します:
Learning the Vi Editor - by Linda Lamb

View File

@@ -955,7 +955,7 @@ NOTE:
出版社: New Riders
最初の本は完全に Vim のために書かれました。とりわけ初心者にはお奨めです。
多くの例題や図版が掲載されています。
次のURLを参照して下さい http://iccf-holland.org/click5.html
次のURLを参照して下さい https://iccf-holland.org/click5.html
次は Vim よりも Vi について書かれた古い本ですが推薦します:
Learning the Vi Editor - by Linda Lamb

View File

@@ -955,7 +955,7 @@ NOTE: 補完は多くのコマンドで動作します。そして CTRL-D と <T
出版社: New Riders
最初の本は完全に Vim のために書かれました。とりわけ初心者にはお奨めです。
多くの例題や図版が掲載されています。
次のURLを参照して下さい http://iccf-holland.org/click5.html
次のURLを参照して下さい https://iccf-holland.org/click5.html
次は Vim よりも Vi について書かれた古い本ですが推薦します:
Learning the Vi Editor - by Linda Lamb

View File

@@ -949,7 +949,7 @@ ce 는 단어를 치환하는 것 뿐만 아니라, 내용을 삽입할 수 있
출판사: New Riders
이 책은 완전히 빔에 대해서만 다루고 있습니다. 특히 초보자들에게 유용합니다.
많은 예제와 그림이 있습니다.
다음을 참고하십시오: http://iccf-holland.org/click5.html
다음을 참고하십시오: https://iccf-holland.org/click5.html
다음 책은 좀 오래된 책으로 빔보다는 Vi에 대해 다루고 있지만, 역시 추천할 만
합니다:

View File

@@ -949,7 +949,7 @@ ce
출판사: New Riders
이 책은 완전히 빔에 대해서만 다루고 있습니다. 특히 초보자들에게 유용합니다.
많은 예제와 그림이 있습니다.
다음을 참고하십시오: http://iccf-holland.org/click5.html
다음을 참고하십시오: https://iccf-holland.org/click5.html
다음 책은 좀 오래된 책으로 빔보다는 Vi에 대해 다루고 있지만, 역시 추천할 만
합니다:

View File

@@ -949,7 +949,7 @@ ce 는 단어를 치환하는 것 뿐만 아니라, 내용을 삽입할 수 있
출판사: New Riders
이 책은 완전히 빔에 대해서만 다루고 있습니다. 특히 초보자들에게 유용합니다.
많은 예제와 그림이 있습니다.
다음을 참고하십시오: http://iccf-holland.org/click5.html
다음을 참고하십시오: https://iccf-holland.org/click5.html
다음 책은 좀 오래된 책으로 빔보다는 Vi에 대해 다루고 있지만, 역시 추천할 만
합니다:

View File

@@ -986,7 +986,7 @@ PIEZĪME: Pabeigšana strādā dažādām komandām.
Vim - Vi Improved, Steve Oualline, New Riders
Šī grāmata ir tieši par Vim, un ir ļoti ieteicama iesācējiem.
Daudzi piemēri un attēli no tās pieejami: http://iccf-holland.org/click5.html
Daudzi piemēri un attēli no tās pieejami: https://iccf-holland.org/click5.html
Otra, vecāka grāmata ir par Vi, nevis Vim, bet arī ir ļoti noderīga:

View File

@@ -953,7 +953,7 @@ MERK: Fullf
Utgiver: New Riders
Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
nybegynnere. Inneholder mange eksempler og illustrasjoner.
Se http://iccf-holland.org/click5.html
Se https://iccf-holland.org/click5.html
Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
«Learning the Vi Editor» av Linda Lamb

View File

@@ -953,7 +953,7 @@ MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og
Utgiver: New Riders
Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
nybegynnere. Inneholder mange eksempler og illustrasjoner.
Se http://iccf-holland.org/click5.html
Se https://iccf-holland.org/click5.html
Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
«Learning the Vi Editor» av Linda Lamb

View File

@@ -927,7 +927,7 @@
Uitgever: New Riders
Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
voor beginners. Met veel voorbeelden en afbeeldingen.
Zie http://iccf-holland.org/click5.html
Zie https://iccf-holland.org/click5.html
Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
toch aanbevolen:

View File

@@ -927,7 +927,7 @@
Uitgever: New Riders
Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
voor beginners. Met veel voorbeelden en afbeeldingen.
Zie http://iccf-holland.org/click5.html
Zie https://iccf-holland.org/click5.html
Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
toch aanbevolen:

View File

@@ -953,7 +953,7 @@ MERK: Fullf
Utgiver: New Riders
Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
nybegynnere. Inneholder mange eksempler og illustrasjoner.
Se http://iccf-holland.org/click5.html
Se https://iccf-holland.org/click5.html
Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
«Learning the Vi Editor» av Linda Lamb

View File

@@ -953,7 +953,7 @@ MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og
Utgiver: New Riders
Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
nybegynnere. Inneholder mange eksempler og illustrasjoner.
Se http://iccf-holland.org/click5.html
Se https://iccf-holland.org/click5.html
Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
«Learning the Vi Editor» av Linda Lamb

View File

@@ -954,7 +954,7 @@ UWAGA: Uzupe
Wydawca: New Riders
Pierwsza książka całkowicie poświęcona Vimowi. Użyteczna zwłaszcza dla
początkujących. Zawiera wiele przykładów i ilustracji.
Zobacz http://iccf-holland.org./click5.html
Zobacz https://iccf-holland.org./click5.html
Starsza pozycja i bardziej o Vi niż o Vimie, ale także warta
polecenia:

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