Compare commits

...

260 Commits

Author SHA1 Message Date
Bram Moolenaar
17dd519633 patch 8.2.4141: Vim9 builtin functions test fails
Problem:    Vim9 builtin functions test fails.
Solution:   Add "scriptversion" item to maparg() result.
2022-01-18 21:42:37 +00:00
Bram Moolenaar
a9528b39a6 patch 8.2.4140: maparg() does not indicate the type of script
Problem:    maparg() does not indicate the type of script where it was defined.
Solution:   Add "scriptversion".
2022-01-18 20:51:35 +00:00
Bram Moolenaar
94075b2b0e patch 8.2.4139: using freed memory in expression abbreviation
Problem:    Using freed memory if an expression abbreviation deletes the
            abbreviation.
Solution:   Do not access the pointer after evaluating the expression.
2022-01-18 20:30:39 +00:00
Bram Moolenaar
ef7aadbe36 patch 8.2.4138: Vim9: no error for return with argument when invalid
Problem:    Vim9: no error for return with argument when the function does not
            return anything.
Solution:   Give an error for the invalid argument. (issue #9497)
2022-01-18 18:46:07 +00:00
Bram Moolenaar
d02dce2bb5 patch 8.2.4137: Vim9: calling import with and without method is inconsistent
Problem:    Vim9: calling import with and without method is inconsistent.
Solution:   Set a flag that a parenthsis follows to compile_load_scriptvar().
            Add some more tests.  Improve error message.
2022-01-18 17:43:04 +00:00
Bram Moolenaar
fd218c8a36 patch 8.2.4136: Vim9: the "autoload" argument of ":vim9script" is not useful
Problem:    Vim9: the "autoload" argument of ":vim9script" is not useful.
Solution:   Remove the argument. (closes #9555)
2022-01-18 16:26:24 +00:00
Bram Moolenaar
6079da7cfb patch 8.2.4135: Vim9: ":scriptnames" shows unloaded imported autoload script
Problem:    Vim9: ":scriptnames" shows unloaded imported autoload script.
Solution:   Mark the unloaded script with "A". (closes #9552)
2022-01-18 14:16:59 +00:00
Bram Moolenaar
113b8dc111 patch 8.2.4134: MS-Windows: test for import with absolute path fails
Problem:    MS-Windows: test for import with absolute path fails.
Solution:   Handle path starting with slash as an absolute path.
2022-01-18 13:43:58 +00:00
Bram Moolenaar
840f16202e patch 8.2.4133: output of ":scriptnames" goes into the message history
Problem:    output of ":scriptnames" goes into the message history, while this
            des not happen for other commands, such as ":ls".
Solution:   Use msg_outtrans() instead of smsg(). (closes #9551)
2022-01-18 13:34:05 +00:00
Bram Moolenaar
1836d61578 patch 8.2.4132: Vim9: wrong error message when autoload script can't be found
Problem:    Vim9: wrong error message when autoload script can't be found.
Solution:   Correct check for using autoload with wrong name.
2022-01-18 13:14:47 +00:00
Bram Moolenaar
cbbc48f64b patch 8.2.4131: Vim9: calling function in autoload import does not work
Problem:    Vim9: calling function in autoload import does not work in a :def
            function.
Solution:   When a variable is not found and a PCALL follows use a funcref.
            (closes #9550)
2022-01-18 12:58:28 +00:00
K.Takata
31dcc8de46 patch 8.2.4130: MS-Windows: MSVC build may have libraries duplicated
Problem:    MS-Windows: MSVC build may have libraries duplicated.
Solution:   Improve the MSVC Makefile. (Ken Takata, closes #9547)
2022-01-18 11:34:57 +00:00
Bram Moolenaar
1247126956 patch 8.2.4129: building with +sound but without +eval fails
Problem:    Building with +sound but without +eval fails. (Dominique Pellé)
Solution:   Disable canberra in tiny and small build. (closes #9548)
2022-01-18 11:11:25 +00:00
Bram Moolenaar
64283d5e1f patch 8.2.4128: crash when method cannot be found
Problem:    Crash when method cannot be found. (Christian J. Robinson)
Solution:   Don't mix up pointer names.
2022-01-18 10:37:29 +00:00
Bram Moolenaar
78f60322f7 patch 8.2.4127: build failure without the +eval feature
Problem:    Build failure without the +eval feature.
Solution:   Add #ifdef.
2022-01-17 22:16:33 +00:00
Bram Moolenaar
afa76e1cf2 patch 8.2.4126: crash on exit when built with dynamic Tcl
Problem:    Crash on exit when built with dynamic Tcl and EXITFREE is defined.
            (Dominique Pellé)
Solution:   Only call Tcl_Finalize() when initialized. (closes #9546)
2022-01-17 21:34:38 +00:00
Bram Moolenaar
b3d9ceed2b patch 8.2.4125: completion tests fail
Problem:    Completion tests fail.
Solution:   Disable error messages while dereferencing the function name.
2022-01-17 21:13:28 +00:00
Bram Moolenaar
6389baa669 patch 8.2.4124: Vim9: method in compiled function may not see script item
Problem:    Vim9: method in compiled function may not see script item.
Solution:   Make sure not to skip to the next line. (closes #9496)
2022-01-17 20:50:40 +00:00
Bram Moolenaar
15d1635e50 patch 8.2.4123: complete function cannot be import.Name
Problem:    Complete function cannot be import.Name.
Solution:   Dereference the function name if needed.  Also: do not see
            "import.Name" as a builtin function. (closes #9541)
2022-01-17 20:09:08 +00:00
Bram Moolenaar
3f3597be3f patch 8.2.4122: ":command Cmd" does not show custom completion argument
Problem:    ":command Cmd" does not show custom completion argument.
Solution:   Show the completion argument when using ":verbose".
2022-01-17 19:06:56 +00:00
Bram Moolenaar
262898ae43 patch 8.2.4121: Visual test fails on MS-Windows
Problem:    Visual test fails on MS-Windows.
Solution:   Set 'isprint' so that the character used is not printable.
2022-01-17 17:52:22 +00:00
Bram Moolenaar
9f8c304c8a patch 8.2.4120: block insert goes over the end of the line
Problem:    Block insert goes over the end of the line.
Solution:   Handle invalid byte better.  Fix inserting the wrong text.
2022-01-17 17:30:21 +00:00
Dominique Pelle
e8741a73e2 patch 8.2.4119: build failure when disabling the channel feature
Problem:    Build failure when disabling the channel feature.
Solution:   Adjust #ifdef. (Dominique Pellé, closes #9545)
2022-01-17 11:23:45 +00:00
Bram Moolenaar
0023f82a76 patch 8.2.4118: using UNUSED for argument that is used
Problem:    Using UNUSED for argument that is used.
Solution:   Remove UNUSED.
2022-01-16 21:54:19 +00:00
Bram Moolenaar
47036b6bd7 patch 8.2.4117: Vim9: wrong white space error after using imported item
Problem:    Vim9: wrong white space error after using imported item.
Solution:   Don't skip over white space. (closes #9544)
2022-01-16 21:18:53 +00:00
Bram Moolenaar
c73499351a patch 8.2.4116: Vim9: cannot use a method with a complex expression in :def
Problem:    Vim9: cannot use a method with a complex expression in a :def
            function.
Solution:   Implement compiling the expression.
2022-01-16 20:59:39 +00:00
Bram Moolenaar
c665dabdf4 patch 8.2.4115: cannot use a method with a complex expression
Problem:    Cannot use a method with a complex expression.
Solution:   Evaluate the expression after "->" and use the result.
2022-01-16 19:38:07 +00:00
Bram Moolenaar
c84287d6d8 patch 8.2.4114: Vim9: type checking for a funcref does not work for method
Problem:    Vim9: type checking for a funcref does not work for when it is
            used in a method.
Solution:   Pass the base to where the type is checked.
2022-01-16 18:06:21 +00:00
Bram Moolenaar
dc98776f89 patch 8.2.4113: typo on DOCMD_RANGEOK results in not recognizing command
Problem:    Typo on DOCMD_RANGEOK results in not recognizing command.
Solution:   Correct the typo. (closes #9539)
2022-01-16 15:52:35 +00:00
Bram Moolenaar
d9b74a2a41 patch 8.2.4112: function not deleted at end of test
Problem:    Function not deleted at end of test.
Solution:   Delete the function.
2022-01-16 15:00:08 +00:00
Bram Moolenaar
d648c01f2f patch 8.2.4111: potential proglem when map is deleted while executing
Problem:    Potential proglem when map is deleted while executing.
Solution:   Reset last used map pointer when deleting a mapping.
2022-01-16 14:58:34 +00:00
Bram Moolenaar
8f9956994d patch 8.2.4110: Coverity warns for using NULL pointer
Problem:    Coverity warns for using NULL pointer.
Solution:   Check "evalarg" is not NULL.  Skip errors when "verbose" is false.
2022-01-16 14:51:30 +00:00
Bram Moolenaar
fd31be29b8 Update runtime files 2022-01-16 14:46:06 +00:00
K.Takata
c81e9bf4f0 patch 8.2.4109: MS-Windows: high dpi support is outdated
Problem:    MS-Windows: high dpi support is outdated.
Solution:   Improve High DPI support by using PerMonitorV2. (closes #9525,
            closes #3102)
2022-01-16 14:15:49 +00:00
Bram Moolenaar
f6ebc82004 patch 8.2.4108: going over the end of the w_lines array
Problem:    Going over the end of the w_lines array.
Solution:   Check not going over the end and limit to Rows. (issue #9540)
2022-01-16 13:58:33 +00:00
Bram Moolenaar
a9725221ac patch 8.2.4107: script context not restored after using <ScriptCmd>
Problem:    Script context not restored after using <ScriptCmd>.
Solution:   Also restore context when not in a script. (closes #9536)
            Add the 'c' flag to feedkeys() to be able to test this.
2022-01-16 13:30:33 +00:00
Bram Moolenaar
fa1a457059 patch 8.2.4106: going over the end of the w_lines array
Problem:    Going over the end of the w_lines array.
Solution:   Break out of the loop when "idx" is too big. (issue #9540)
2022-01-16 11:42:20 +00:00
K.Takata
b5988e3656 patch 8.2.4105: translation related comment in the wrong place
Problem:    Translation related comment in the wrong place.
Solution:   Move it back with the text. (Ken Takata, closes #9537)
2022-01-16 11:25:26 +00:00
Bram Moolenaar
bfac409d0b patch 8.2.4104: Vim9: lower casing the autoload prefix causes problems
Problem:    Vim9: lower casing the autoload prefix causes problems.
Solution:   Always store the prefix with case preserved.
2022-01-16 11:12:12 +00:00
Bram Moolenaar
38ecd97226 patch 8.2.4103: Vim9: variable declared in for loop not initialzed
Problem:    Vim9: variable declared in for loop not initialzed.
Solution:   Always initialze the variable. (closes #9535)
2022-01-15 21:44:44 +00:00
Bram Moolenaar
857c8bb1bb patch 8.2.4102: Vim9: import cannot be used after method
Problem:    Vim9: import cannot be used after method.
Solution:   Recognize an imported function name. (closes #9496)
2022-01-15 21:08:19 +00:00
Bram Moolenaar
d4e2f50901 patch 8.2.4101: warning for unused argument in tiny version
Problem:    Warning for unused argument in tiny version.
Solution:   Add "UNUSED".
2022-01-15 18:48:32 +00:00
Bram Moolenaar
04b871da80 patch 8.2.4100: early return when getting the 'formatlistpat' value
Problem:    Early return when getting the 'formatlistpat' value.
Solution:   Remove the first line. (Christian Brabandt)
2022-01-15 18:31:43 +00:00
Bram Moolenaar
e32c3c462c patch 8.2.4099: Vim9: cannot use Vim9 syntax in mapping
Problem:    Vim9: cannot use Vim9 syntax in mapping.
Solution:   Add <ScriptCmd> to use the script context for a command.
2022-01-15 18:26:04 +00:00
Bram Moolenaar
069613c9e8 patch 8.2.4098: typing "interrupt" at debug prompt may keep exception around
Problem:    Typing "interrupt" at debug prompt may keep exception around,
            causing function calls to fail.
Solution:   Discard any exception at the toplevel. (closes #9532)
2022-01-15 15:23:44 +00:00
Bram Moolenaar
f60a63485e patch 8.2.4097: wrong number in error message on 32 bit system
Problem:    Wrong number in error message on 32 bit system. (John Paul Adrian
            Glaubitz)
Solution:   Add type cast. (closes #9527)
2022-01-15 14:16:37 +00:00
ichizok
1050476ead patch 8.2.4096: Linux CI: unnecessarily installing packages
Problem:    Linux CI: unnecessarily installing packages
Solution:   Only install packages for huge build.  (Ozaki Kiichi,
            closes #9530)
2022-01-15 13:37:14 +00:00
Bram Moolenaar
e3ce17a3ca patch 8.2.4095: sed script not recognized by the first line
Problem:    Sed script not recognized by the first line.
Solution:   Recognize a sed script starting with "#n". (Doug Kearns)
2022-01-15 12:27:09 +00:00
zeertzjq
e1833bfd01 patch 8.2.4094: 'virtualedit' is window-local but using buffer-local enum
Problem:    'virtualedit' is window-local but using buffer-local enum.
Solution:   Use window-local enum. (closes #9529)
2022-01-15 10:52:16 +00:00
Christian Brabandt
c53b467473 patch 8.2.4093: cached breakindent values not initialized properly
Problem:    Cached breakindent values not initialized properly.
Solution:   Initialize and cache formatlistpat. (Christian Brabandt,
            closes #9526, closes #9512)
2022-01-15 10:01:05 +00:00
ichizok
ece07639f4 patch 8.2.4092: MacOS CI: unnecessarily doing "Install packages"
Problem:    MacOS CI: unnecessarily doing "Install packages".
Solution:   Only do "Install packages" for huge build.  (Ozaki Kiichi,
            closes #9521)
2022-01-14 21:28:59 +00:00
zeertzjq
0f112052ac patch 8.2.4091: virtcol is recomputed for statusline unnecessarily
Problem:    Virtcol is recomputed for statusline unnecessarily.
Solution:   Just use "w_virtcol". (closes #9523)
2022-01-14 20:11:38 +00:00
Evgeni Chasnovski
26ebf1f036 patch 8.2.4090: after restoring a session buffer order can be quite different
Problem:    After restoring a session buffer order can be quite different.
Solution:   Create buffers first. (Evgeni Chasnovski, closes #9520)
2022-01-14 13:19:43 +00:00
Bram Moolenaar
7bfa6d698e patch 8.2.4089: terminal test for current directory fails on FreeBSD
Problem:    Terminal test for current directory fails on FreeBSD.
Solution:   Skip the test.
2022-01-14 12:06:47 +00:00
Erik Auerswald
c0a1d370fa patch 8.2.4088: xxd cannot output everything in one line
Problem:    Xxd cannot output everything in one line.
Solution:   Make zero columns mean infinite columns. (Erik Auerswald,
            closes #9524)
2022-01-14 11:58:48 +00:00
Bram Moolenaar
3e4fa3d7d3 patch 8.2.4087: cannot test items from an autoload script easily
Problem:    Cannot test items from an autoload script easily.
Solution:   Add the "autoload" value for test_override().
2022-01-13 22:05:09 +00:00
Bram Moolenaar
d9d2fd0aa3 patch 8.2.4086: "cctx" argument of find_func_even_dead() is unused
Problem:    "cctx" argument of find_func_even_dead() is unused.
Solution:   Remove the argument.
2022-01-13 21:15:21 +00:00
Bram Moolenaar
c43e6235c7 patch 8.2.4085: Vim9: no test for using import in legacy script
Problem:    Vim9: no test for using import in legacy script.
Solution:   Add a test.
2022-01-13 20:51:56 +00:00
Bram Moolenaar
130f65d46b patch 8.2.4084: memory leak when looking for autoload prefixed variable
Problem:    Memory leak when looking for autoload prefixed variable.
Solution:   Free the concatenated string.
2022-01-13 20:39:41 +00:00
Bram Moolenaar
0e3e7ba05f patch 8.2.4083: Vim9: no test for "vim9script autoload' using script variable
Problem:    Vim9: no test for "vim9script autoload' and using script variable
            in the same script.
Solution:   Add a simple test.  Fix uncovered problem.
2022-01-13 20:18:56 +00:00
Bram Moolenaar
3049fcf0a1 patch 8.2.4082: check for autoload file name and prefix fails
Problem:    Check for autoload file name and prefix fails. (Christian J.
            Robinson)
Solution:   Only lower case the prefix on systems where the file name is not
            case sensitive.
2022-01-13 19:25:50 +00:00
ichizok
4050305bfd patch 8.2.4081: CodeQL reports problem in if_cscope causing it to fail
Problem:    CodeQL reports problem in if_cscope causing it to fail.
Solution:   Use execvp() instead of execl().  Merge the header file into the
            source file. (Ozaki Kiichi, closes #9519)
2022-01-13 18:09:11 +00:00
Erik Auerswald
a00e622a29 patch 8.2.4080: not sufficient test coverage for xxd
Problem:    Not sufficient test coverage for xxd.
Solution:   Add a few more test cases. (Erki Auerswald, closes #9515)
2022-01-13 17:42:28 +00:00
K.Takata
33b25d1317 patch 8.2.4079: MS-Windows: "gvim --version" didn't work with VIMDLL
Problem:    MS-Windows: "gvim --version" didn't work when build with VIMDLL.
Solution:   Adjust #ifdef. (Ken Takata, closes #9517)
2022-01-13 16:06:45 +00:00
Bram Moolenaar
ced2b38a56 patch 8.2.4078: terminal test for current directory not used on FreeBSD
Problem:    Terminal test for current directory not used on FreeBSD.
Solution:   Make it work on FreeBSD. (Ozaki Kiichi, closes #9516) Add
            TermWait() inside Run_shell_in_terminal() as a generic solution.
2022-01-13 15:25:32 +00:00
Bram Moolenaar
8d9e470aa9 patch 8.2.4077: not all Libsensors files are recognized
Problem:    Not all Libsensors files are recognized.
Solution:   Add "sensors.d/*" pattern. (Doug Kearns)
2022-01-13 14:49:10 +00:00
Bram Moolenaar
71930f174d patch 8.2.4076: memory leak in autoload import
Problem:    Memory leak in autoload import.
Solution:   Do not overwrite the autoload prefix.
2022-01-13 13:47:43 +00:00
Bram Moolenaar
78a70533c3 patch 8.2.4075: test failures
Problem:    Test failures.
Solution:   Change check for NULL pointer.
2022-01-13 13:24:34 +00:00
Bram Moolenaar
de05bb2573 patch 8.2.4074: going over the end of NameBuff
Problem:    Going over the end of NameBuff.
Solution:   Check length when appending a space.
2022-01-13 13:08:14 +00:00
Bram Moolenaar
54598066ca patch 8.2.4073: Coverity warns for using NULL pointer
Problem:    Coverity warns for using NULL pointer.
Solution:   Bail out when running out of memory. Check for running over end of
            a string.
2022-01-13 12:05:09 +00:00
Bram Moolenaar
d041f4208b patch 8.2.4072: Vim9: compiling function fails when autoload is not loaded
Problem:    Vim9: compiling function fails when autoload script is not loaded
            yet.
Solution:   Depend on runtime loading.
2022-01-12 19:54:00 +00:00
Bram Moolenaar
53c296112e patch 8.2.4071: Vim9: no detection of return in try/endtry
Problem:    Vim9: no detection of return in try/endtry. (Dominique Pellé)
Solution:   Check if any of the blocks inside try/endtry did not end in
            return.
2022-01-12 16:18:18 +00:00
Dominique Pelle
f5d639a8af patch 8.2.4070: using uninitialized memory when reading empty file
Problem:    Using uninitialized memory when reading empty file.
Solution:   Check for empty file before checking for NL. (Dominique Pellé,
            closes #9511)
2022-01-12 15:24:40 +00:00
Bram Moolenaar
5d9826973d patch 8.2.4069: Vim9: import test fails on MS-Windows
Problem:    Vim9: import test fails on MS-Windows.
Solution:   Ignore case.  Adjust test to avoid name that only differs in case.
2022-01-12 15:15:27 +00:00
Bram Moolenaar
f479cac084 patch 8.2.4068: Vim9: import test fails
Problem:    Vim9: import test fails.
Solution:   Add missing change.
2022-01-12 12:54:55 +00:00
Bram Moolenaar
f111cdfae6 patch 8.2.4067: Vim9: cannot call imported function with :call
Problem:    Vim9: cannot call imported function with :call. (Drew Vogel)
Solution:   Translate the function name. (closes #9510)
2022-01-12 12:48:17 +00:00
Bram Moolenaar
17d36cbcd3 patch 8.2.4066: Vim9: imported autoload script loaded again
Problem:    Vim9: imported autoload script loaded again.
Solution:   Do not create a new imported_T every time.
2022-01-12 11:46:40 +00:00
Bram Moolenaar
3cf21b3051 patch 8.2.4065: computation overflow with large cound for :yank
Problem:    Computation overflow with large cound for :yank.
Solution:   Avoid an overflow.
2022-01-11 19:34:16 +00:00
Elwardi
2284f6cca3 patch 8.2.4064: foam files are not detected
Problem:    Foam files are not detected.
Solution:   Detect the foam filetype by the path and file contents. (Mohammed
            Elwardi Fadeli, closes #9501)
2022-01-11 18:14:23 +00:00
Bram Moolenaar
b8822442d7 patch 8.2.4063: Vim9: exported function in autoload script not found
Problem:    Vim9: exported function in autoload script not found. (Yegappan
            Lakshmanan)
Solution:   Use the autoload prefix to search for the function.
2022-01-11 15:24:05 +00:00
Bram Moolenaar
0bbca540f7 patch 8.2.4062: match highlighting of tab too short
Problem:    Match highlighting of tab too short.
Solution:   Do not stop match highlighting if on a Tab. (Christian Brabandt,
            closes #9507, closes #9500)
2022-01-11 13:14:54 +00:00
ichizok
0d47ad4027 patch 8.2.4061: codecov bash script is deprecated
Problem:    Codecov bash script is deprecated.
Solution:   Use the codecov action. (Ozaki Kiichi, closes #9505)
2022-01-11 13:05:26 +00:00
Bram Moolenaar
d6f27c66cc patch 8.2.4060: win_execute() slow on systems where getcwd()/chdir() is slow
Problem:    win_execute() is slow on systems where getcwd() or chdir() is
            slow. (Rick Howe)
Solution:   Avoid using getcwd() and chdir() if no local directory is used and
            'acd' is not set. (closes #9504)
2022-01-11 12:37:20 +00:00
Bram Moolenaar
19db9e6ba7 patch 8.2.4059: Vim9: an expression of a map cannot access script-local items
Problem:    Vim9: an expression of a map cannot access script-local items.
            (Maxim Kim)
Solution:   Use the script ID of where the map was defined.
2022-01-11 11:58:19 +00:00
Bram Moolenaar
762838218f patch 8.2.4058: Vim9: import test failure in wrong line
Problem:    Vim9: import test failure in wrong line.
Solution:   Adjust line number.
2022-01-10 21:39:03 +00:00
Bram Moolenaar
160aa86a9d patch 8.2.4057: Vim9: not fully implementing the autoload mechanism
Problem:    Vim9: not fully implementing the autoload mechanism.
Solution:   Allow for exporting a legacy function.  Improve test coverage.
2022-01-10 21:29:57 +00:00
Bram Moolenaar
6990b78f25 patch 8.2.4056: Vim9: memory leak when exporting function in autoload script
Problem:    Vim9: memory leak when exporting function in autoload script.
Solution:   Fee the name if replacing it.
2022-01-10 19:21:06 +00:00
Bram Moolenaar
5e6b9882fe patch 8.2.4055: Vim9: line break in expression causes v:errmsg to be fillec
Problem:    Vim9: line break in expression causes v:errmsg to be filled.
            (Yegappan Lakshmanan)
Solution:   Do not give an error when skipping over an expression.
2022-01-10 18:50:52 +00:00
Bram Moolenaar
577bd85d55 patch 8.2.4054: Vim9 script test fails
Problem:    Vim9 script test fails.
Solution:   Add missing change.
2022-01-10 18:42:52 +00:00
Bram Moolenaar
fe2ef0b2cd patch 8.2.4053: Vim9: autoload mechanism doesn't fully work yet
Problem:    Vim9: autoload mechanism doesn't fully work yet.
Solution:   Define functions and variables with their autoload name, add the
            prefix when calling a function, find the variable in the table of
            script variables.
2022-01-10 18:08:00 +00:00
Daniel Steinberg
ee63031b57 patch 8.2.4052: not easy to resize a window from a plugin
Problem:    Not easy to resize a window from a plugin.
Solution:   Add win_move_separator() and win_move_statusline() functions.
            (Daniel Steinberg, closes #9486)
2022-01-10 13:36:34 +00:00
Bram Moolenaar
b06cfcf5a3 patch 8.2.4051: compiler complains about possibly uninitialized variable
Problem:    Compiler complains about possibly uninitialized variable.
Solution:   Add code to avoid a compiler warning. (John Marriott)
2022-01-10 11:26:33 +00:00
Bram Moolenaar
dc4451df61 patch 8.2.4050: Vim9: need to prefix every item in an autoload script
Problem:    Vim9: need to prefix every item in an autoload script.
Solution:   First step in supporting "vim9script autoload" and "import
            autoload".
2022-01-09 21:36:37 +00:00
Bram Moolenaar
5f25c38550 patch 8.2.4049: Vim9: reading before the start of the line with "$"
Problem:    Vim9: reading before the start of the line with "$" by itself.
Solution:   Do not subtract one when reporting the error.
2022-01-09 13:36:28 +00:00
Dominique Pelle
c14f667626 patch 8.2.4048: gcc complains about use of "%p" in printf
Problem:    gcc complains about use of "%p" in printf.
Solution:   Add (void *) typecast. (Dominique Pellé, closes #9494)
2022-01-09 12:57:48 +00:00
Dominique Pelle
f85a424c83 patch 8.2.4047: depending on the build features error messages are unused
Problem:    Depending on the build features error messages are unused.
Solution:   Add #ifdefs. (Dominique Pellé, closes #9493)
2022-01-09 12:49:31 +00:00
Bram Moolenaar
2f0936cb9a Update runtime files 2022-01-08 21:51:59 +00:00
Bram Moolenaar
b2810f123c patch 8.2.4046: some error messages not in the right place
Problem:    Some error messages not in the right place.
Solution:   Adjust the errors file.  Fix typo.
2022-01-08 21:38:52 +00:00
Yegappan Lakshmanan
782b43d894 patch 8.2.4045: some global functions are only used in one file
Problem:    Some global functions are only used in one file.
Solution:   Make the functions static. (Yegappan Lakshmanan, closes #9492)
2022-01-08 18:43:40 +00:00
Bram Moolenaar
7c24dfddc2 patch 8.2.4044: Vim9: no error when importing the same script twice
Problem:    Vim9: no error when importing the same script twice.
Solution:   Give an error, unless it is a reload.
2022-01-08 17:03:55 +00:00
Bram Moolenaar
04935fb17e patch 8.2.4043: using int for second argument of ga_init2()
Problem:    Using int for second argument of ga_init2().
Solution:   Remove unnessary type cast (int) when using sizeof().
2022-01-08 16:19:22 +00:00
Bram Moolenaar
1433672568 patch 8.2.4042: Vim9: build error
Problem:    Vim9: build error.
Solution:   Use grow array instead of character pointer.
2022-01-08 16:02:59 +00:00
Bram Moolenaar
aa9b3cacd5 patch 8.2.4041: using unitialized pointer
Problem:    Using unitialized pointer.
Solution:   Store "ht" when variable is in another script.
2022-01-08 15:44:22 +00:00
Bram Moolenaar
9f1a39a5d1 patch 8.2.4040: keeping track of allocated lines is too complicated
Problem:    Keeping track of allocated lines in user functions is too
            complicated.
Solution:   Instead of freeing individual lines keep them all until the end.
2022-01-08 15:39:39 +00:00
Bram Moolenaar
67ffb41786 patch 8.2.4039: the xdiff library is linked in even when not used
Problem:    The xdiff library is linked in even when not used.
Solution:   Use configure to decide whether xdiff object files are included.
2022-01-08 13:36:57 +00:00
Dominique Pelle
748b308eeb patch 8.2.4038: various code not used when features are disabled
Problem:    Various code not used when features are disabled.
Solution:   Add #ifdefs. (Dominique Pellé, closes #9491)
2022-01-08 12:41:16 +00:00
Yegappan Lakshmanan
370791465e patch 8.2.4037: Insert mode completion is insufficiently tested
Problem:    Insert mode completion is insufficiently tested.
Solution:   Add more tests.  Fix uncovered memory leak. (Yegappan Lakshmanan,
            closes #9489)
2022-01-08 10:38:48 +00:00
Bram Moolenaar
d844862bce patch 8.2.4036: Vim9: script test file is getting too long
Problem:    Vim9: script test file is getting too long.
Solution:   Split the import/export functionality to a separate file.
2022-01-07 21:39:52 +00:00
Bram Moolenaar
48d0ac775c patch 8.2.4035: timer triggered at the debug prompt may cause trouble
Problem:    Timer triggered at the debug prompt may cause trouble.
Solution:   Do not trigger any timer at the debug prompt. (closes #9481)
2022-01-07 20:40:08 +00:00
Bram Moolenaar
62a099cc6d patch 8.2.4034: Coverity warns for possibly using a NULL pointer
Problem:    Coverity warns for possibly using a NULL pointer.
Solution:   Check v_partial is not NULL.
2022-01-07 20:18:16 +00:00
zeertzjq
a4c96252b1 patch 8.2.4033: running filetype tests leaves directory behind
Problem:    Running filetype tests leaves directory behind.
Solution:   Delete the top directory. (closes #9483)
2022-01-07 20:07:46 +00:00
ichizok
e12406526a patch 8.2.4032: ATTRIBUTE_NORETURN is not needed
Problem:    ATTRIBUTE_NORETURN is not needed.
Solution:   Use NORETURN(). (Ozaki Kiichi, closes #9487)
2022-01-07 20:01:07 +00:00
Bram Moolenaar
d1f34e64f0 patch 8.2.4031: crash in xterm with only two lines
Problem:    Crash in xterm with only two lines. (Dominique Pellé)
Solution:   Only perform xterm compatibility test if possible. (closes #9488)
2022-01-07 19:24:20 +00:00
Bram Moolenaar
71f21938bc patch 8.2.4030: a script local funcref is not found from a mapping
Problem:    A script local funcref is not found from a mapping.
Solution:   When looking for a function, also find a script-local funcref.
            (closes #9485)
2022-01-07 18:20:55 +00:00
Bram Moolenaar
b2d85e3784 patch 8.2.4029: debugging NFA regexp my crash, cached indent may be wrong
Problem:    Debugging NFA regexp my crash, cached indent may be wrong.
Solution:   Fix some debug warnings in the NFA regexp code.  Make sure log_fd
            is set when used.  Fix breakindent and indent caching. (Christian
            Brabandt, closes #9482)
2022-01-07 16:55:32 +00:00
Bram Moolenaar
cb1956d6f2 patch 8.2.4028: ml_get error with :doautoall and Visual area
Problem:    ml_get error with :doautoall and Visual area. (Sean Dewar)
Solution:   Disable Visual mode while executing autocommands.
2022-01-07 15:45:18 +00:00
Bram Moolenaar
2b04d5f1ef patch 8.2.4027: import test fails on MS-Windows
Problem:    Import test fails on MS-Windows.
Solution:   Use a different directory name.
2022-01-07 14:39:56 +00:00
Bram Moolenaar
e664a32701 patch 8.2.4026: ml_get error with specific win_execute() command
Problem:    ml_get error with specific win_execute() command. (Sean Dewar)
Solution:   Check cursor and Visual area are OK.
2022-01-07 14:08:03 +00:00
Bram Moolenaar
834d41853e patch 8.2.4025: error for import not ending in .vim does not work for .vimrc
Problem:    Error for import not ending in .vim does not work for .vimrc.
Solution:   Check that .vim is the end. (closes #9484)
2022-01-07 13:38:24 +00:00
Bram Moolenaar
32884ad753 patch 8.2.4024: confusing error message if imported name is used directly
Problem:    Confusing error message if imported name is used directly.
Solution:   Give a better error message.
2022-01-07 12:45:29 +00:00
Bram Moolenaar
a909c48bec patch 8.2.4023: using uninitialized variable
Problem:    Using uninitialized variable.
Solution:   Initialize "ufunc" also when an item is not exported.
2022-01-06 22:07:57 +00:00
Bram Moolenaar
11de43d2d4 patch 8.2.4022: two error messages in the wrong file
Problem:    Two error messages in the wrong file.
Solution:   Use the error message from errors.h.
2022-01-06 21:41:11 +00:00
Bram Moolenaar
2ef01d929d patch 8.2.4021: missing part of the :import changes
Problem:    Missing part of the :import changes.
Solution:   Add changes in vim9cmds.c.
2022-01-06 21:38:11 +00:00
Bram Moolenaar
84c62d59a3 patch 8.2.4020: debugger test fails
Problem:    Debugger test fails.
Solution:   Fix import statement.
2022-01-06 21:31:19 +00:00
Bram Moolenaar
d5f400c607 patch 8.2.4019: Vim9: import mechanism is too complicated
Problem:    Vim9: import mechanism is too complicated.
Solution:   Do not use the Javascript mechanism but a much simpler one.
2022-01-06 21:10:28 +00:00
Bram Moolenaar
18f4740f04 patch 8.2.4018: ml_get error when win_execute redraws with Visual selection
Problem:    ml_get error when win_execute redraws with Visual selection.
Solution:   Disable Visual area temporarily. (closes #9479)
2022-01-06 13:24:51 +00:00
Dominique Pelle
a33737b6d8 patch 8.2.4017: gcc warns for misleading indent in Athena menu code
Problem:    Gcc warns for misleading indent in Athena menu code.
Solution:   Add curlies around the two statements. (Dominique Pellé,
            closes #9480)
2022-01-06 12:35:31 +00:00
Bram Moolenaar
58493cfae2 patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Problem:    Vim9: incorrect error for argument that is shadowing var.
Solution:   Ignore variable that is not in block where the function was
            defined.
2022-01-06 12:23:30 +00:00
Bram Moolenaar
269dc63618 patch 8.2.4015: build failure with tiny features
Problem:    Build failure with tiny features. (Tony Mechelynck)
Solution:   Adjust #ifdefs.
2022-01-06 11:43:21 +00:00
Bram Moolenaar
c689f8c3d9 patch 8.2.4014: git and gitcommit file types not properly recognized
Problem:    Git and gitcommit file types not properly recognized.
Solution:   Adjust filetype detection. (Tim Pope, closes #9477)
2022-01-05 20:56:38 +00:00
Bram Moolenaar
e60b3c47d7 patch 8.2.4013: build failure without the spell feature
Problem:    Build failure without the spell feature.
Solution:   Adjust #ifdefs.
2022-01-05 20:40:34 +00:00
Bram Moolenaar
d82a47dd04 patch 8.2.4012: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move the last error messages to errors.h.
2022-01-05 20:24:39 +00:00
Bram Moolenaar
bb8cac56d9 patch 8.2.4011: test fails because of changed error number
Problem:    Test fails because of changed error number.
Solution:   Restore old duplicate error message.
2022-01-05 18:16:53 +00:00
Bram Moolenaar
9d00e4a814 patch 8.2.4010: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-05 17:49:15 +00:00
Bram Moolenaar
d3a117814d patch 8.2.4009: reading one byte beyond the end of the line
Problem:    Reading one byte beyond the end of the line.
Solution:   Check for NUL byte first.
2022-01-05 16:50:40 +00:00
Bram Moolenaar
677658ae49 patch 8.2.4008: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-05 16:09:06 +00:00
matveyt
8e7d9db32b patch 8.2.4007: session does not restore help buffer properly
Problem:    Session does not restore help buffer properly when "options' is
            missing from 'sessionoptions'.
Solution:   Use a ":help" command to create the help window. (closes #9475,
            closes #9458, closes #9472)
2022-01-05 14:01:30 +00:00
Bram Moolenaar
c653e4a2bd patch 8.2.4006: Vim9: crash when declaring variable on the command line
Problem:    Vim9: crash when declaring variable on the command line.
Solution:   Use a temporary type list. (closes #9474)
2022-01-05 10:16:30 +00:00
Bram Moolenaar
a6f7929e62 patch 8.2.4005: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-04 21:30:47 +00:00
Bram Moolenaar
548911ee14 patch 8.2.4004: old compiler complains about struct init with variable
Problem:    Old compiler complains about struct init with variable.
Solution:   Set the struct member later. (John Marriott)
2022-01-04 20:05:04 +00:00
Bram Moolenaar
d88be5be80 patch 8.2.4003: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-04 19:57:55 +00:00
zeertzjq
6cac77016b patch 8.2.4002: first char typed in Select mode can be wrong
Problem:    First char typed in Select mode can be wrong.
Solution:   Escape special bytes in the input buffer. (closes #9469)
2022-01-04 18:01:21 +00:00
Yegappan Lakshmanan
d94fbfc74a patch 8.2.4001: insert complete code uses global variables
Problem:    Insert complete code uses global variables.
Solution:   Make variables local to the file and use accessor functions.
            (Yegappan Lakshmanan, closes #9470)
2022-01-04 17:01:44 +00:00
Bram Moolenaar
fcd1635a46 patch 8.2.4000: Coverity warns for checking for NULL pointer after using it
Problem:    Coverity warns for checking for NULL pointer after using it.
Solution:   Remove check for NULL.
2022-01-04 16:44:56 +00:00
zeertzjq
c024ed9233 patch 8.2.3999: redundant check for NUL byte
Problem:    Redundant check for NUL byte.
Solution:   Remove the check for a NUL byte. (closes #9471)
2022-01-04 16:22:52 +00:00
Bram Moolenaar
48824e952f patch 8.2.3998: asan error for adding zero to NULL
Problem:    Asan error for adding zero to NULL.
Solution:   Do not compute pointer if there are no entries.
2022-01-04 16:05:48 +00:00
Bram Moolenaar
10d6f18b2f patch 8.2.3997: Vim9: not enough testing for extend() and map()
Problem:    Vim9: not enough testing for extend() and map().
Solution:   Add more test cases.  Fix uncovered problems.  Remove unused type
            fields.
2022-01-04 15:54:38 +00:00
Bram Moolenaar
078a46161e patch 8.2.3996: Vim9: type checking lacks information about declared type
Problem:    Vim9: type checking for list and dict lacks information about
            declared type.
Solution:   Add dv_decl_type and lv_decl_type.  Refactor the type stack to
            store two types in each entry.
2022-01-04 15:17:03 +00:00
David Auer
9acf2d8be9 patch 8.2.3995: not all sshconfig files are detected as such
Problem:    Not all sshconfig files are detected as such.
Solution:   Adjust the patterns used for sshconfig detection. (David Auer,
            closes #9322)
2022-01-03 17:32:46 +00:00
Bram Moolenaar
ad8f248585 patch 8.2.3994: Vim9: extend() complains about type when it was not declared
Problem:    Vim9: extend() complains about the type even when it was not
            declared.
Solution:   Only check the list or dict type when it was declared.
2022-01-03 16:52:28 +00:00
Bram Moolenaar
c88e977862 patch 8.2.3993: when recording a change in Select mode char appears twice
Problem:    When recording a change in Select mode the first typed character
            appears twice.
Solution:   When putting the character back into typeahead remove it from
            recorded characters. (closes #9462)
2022-01-03 13:47:50 +00:00
h-east
0e2508d9e6 patch 8.2.3992: wrong local-additions in the help with language mix
Problem:    Wrong local-additions in the help with language mix.
Solution:   Adjust how the local additions list is generated. (Hirohito
            Higashi, closes #9464)
2022-01-03 12:53:24 +00:00
Bram Moolenaar
114dbda785 patch 8.2.3991: Vim9: error when extending dict<any>
Problem:    Vim9: error when extending dict<any> with another type that it was
            initialized with.
Solution:   Also set the type for dict<any> if the initializer has a more
            specific type. (closes #9461)
2022-01-03 12:28:03 +00:00
naohiro ono
5c75eed758 patch 8.2.3990: testing wrong operator
Problem:    Testing wrong operator.
Solution:   Test "g@" instead of "r_". (Naohiro Ono, closes #9463)
2022-01-03 11:15:47 +00:00
Yegappan Lakshmanan
e982586f8e patch 8.2.3989: some insert completion code is not tested
Problem:    Some insert completion code is not tested.
Solution:   Add a few tests.  Refactor thesaurus completion. (Yegappan
            Lakshmanan, closes #9460)
2022-01-03 11:03:48 +00:00
Bram Moolenaar
475d9521ba patch 8.2.3988: tiny build fails
Problem:    Tiny build fails.
Solution:   Fix misplaced #ifdef.
2022-01-02 21:46:29 +00:00
Bram Moolenaar
1d423ef75f patch 8.2.3987: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-02 21:26:16 +00:00
Bram Moolenaar
b09feaa86e patch 8.2.3986: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-02 20:20:45 +00:00
Bram Moolenaar
ac78dd4a35 patch 8.2.3985: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-02 19:25:26 +00:00
Bram Moolenaar
3d0da09bb2 patch 8.2.3984: debugger test fails
Problem:    Debugger test fails.
Solution:   Adjust the test for modified debugging of a for loop.
2022-01-02 17:28:57 +00:00
Bram Moolenaar
eaaac014a0 patch 8.2.3983: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-02 17:00:40 +00:00
Dominique Pelle
8bfa0eb863 patch 8.2.3982: some lines of code not covered by tests
Problem:    Some lines of code not covered by tests.
Solution:   Add a few more test cases. (Dominique Pellé, closes #9453)
2022-01-02 16:16:33 +00:00
Bram Moolenaar
2b4ecc2c31 patch 8.2.3981: Vim9: debugging a for loop doesn't stop before it starts
Problem:    Vim9: debugging a for loop doesn't stop before it starts.
Solution:   Keep the DEBUG instruction before the expression is evaluated.
            (closes #9456)
2022-01-02 14:08:18 +00:00
Bram Moolenaar
b3bd1d39e6 patch 8.2.3980: if 'operatorfunc' invokes an operator Visual mode is changed
Problem:    If 'operatorfunc' invokes an operator the remembered Visual mode
            may be changed. (Naohiro Ono)
Solution:   Save and restore the information for redoing the Visual area.
            (closes #9455)
2022-01-02 13:05:45 +00:00
Bram Moolenaar
a6feb163f0 patch 8.2.3979: Vim9: the feature is not mentioned in the right places
Problem:    Vim9: the feature is not mentioned in the right places.
Solution:   Add +vim9script to the help and :version output.
2022-01-02 12:06:33 +00:00
Bram Moolenaar
6b1a99dfe3 patch 8.2.3978: build error when using dynamycally loaded Python 3
Problem:    Build error when using dynamycally loaded Python 3.
Solution:   Adjust #ifdef.
2022-01-02 01:04:09 +00:00
Bram Moolenaar
9a846fbaa5 patch 8.2.3977: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-01 21:59:18 +00:00
Bram Moolenaar
b34689010a patch 8.2.3976: FEARG_LAST is never used
Problem:    FEARG_LAST is never used. (Dominique Pellé)
Solution:   Remove FEARG_LAST and the related code.
2022-01-01 19:42:16 +00:00
Bram Moolenaar
cbadefe25a patch 8.2.3975: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more error messages to errors.h.
2022-01-01 19:33:50 +00:00
Bram Moolenaar
1f4a3457a3 patch 8.2.3974: Vim9: LISTAPPEND instruction does not check for a locked list
Problem:    Vim9: LISTAPPEND instruction does not check for a locked list.
Solution:   Check whether the list is locked. (closes #9452)
2022-01-01 18:29:21 +00:00
Bram Moolenaar
0f7a5e758c patch 8.2.3973: tiny build fails
Problem:    Tiny build fails.
Solution:   Adjust #ifdefs
2022-01-01 16:31:48 +00:00
Bram Moolenaar
3a846e6bca patch 8.2.3972: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move the last errors from globals.h to errors.h.
2022-01-01 16:21:00 +00:00
Bram Moolenaar
0699b040e6 patch 8.2.3971: build fails
Problem:    Build fails.
Solution:   Use the right error message name.
2022-01-01 16:01:23 +00:00
Bram Moolenaar
74409f6279 patch 8.2.3970: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2022-01-01 15:58:22 +00:00
naohiro ono
56200eed62 patch 8.2.3969: value of MAXCOL not available in Vim script
Problem:    Value of MAXCOL not available in Vim script.
Solution:   Add v:maxcol. (Naohiro Ono, closes #9451)
2022-01-01 14:59:44 +00:00
Bram Moolenaar
e70cec9760 patch 8.2.3968: build failure
Problem:    Build failure.
Solution:   Add missing changes.
2022-01-01 14:25:55 +00:00
Bram Moolenaar
460ae5dfca patch 8.2.3967: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2022-01-01 14:19:49 +00:00
Bram Moolenaar
b37a65e4bf patch 8.2.3966: when using feedkeys() abbreviations may be blocked
Problem:    When using feedkeys() abbreviations may be blocked.
Solution:   Reset tb_no_abbr_cnt when running out of characters.
            (closes #9448)
2022-01-01 12:42:56 +00:00
Bram Moolenaar
b79ee0c299 patch 8.2.3965: Vim9: no easy way to check if Vim9 script is supported
Problem:    Vim9: no easy way to check if Vim9 script is supported.
Solution:   Add has('vim9script').
2022-01-01 12:17:00 +00:00
Alex Vear
654b729c4c patch 8.2.3964: some common lisp and scheme files not recognized
Problem:    Some common lisp and scheme files not recognized.
Solution:   Recognize *.asd as lisp and *.sld as scheme. (Alex Vear,
            closes #9447)
2022-01-01 11:38:42 +00:00
Bram Moolenaar
096ca73dac patch 8.2.3963: build failure with tiny and small features
Problem:    Build failure with tiny and small features. (Tony Mechelynck)
Solution:   Adjust #ifdefs.
2022-01-01 00:55:28 +00:00
Bram Moolenaar
d0819d11ec patch 8.2.3962: build fails for missing error message
Problem:    Build fails for missing error message.
Solution:   Add changes in missed file.
2021-12-31 23:15:53 +00:00
Bram Moolenaar
436b5adc97 patch 8.2.3961: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2021-12-31 22:49:24 +00:00
Bram Moolenaar
f1474d801b patch 8.2.3960: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2021-12-31 19:59:55 +00:00
Bram Moolenaar
6d0570117a patch 8.2.3959: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2021-12-31 18:49:43 +00:00
Yegappan Lakshmanan
ef089f50f9 patch 8.2.3958: build failure compiling xxd with "-std=c2x"
Problem:    Build failure compiling xxd with "-std=c2x".
Solution:   define _XOPEN_SOURCE. (Yegappan Lakshmanan, closes #9444)
2021-12-31 17:33:47 +00:00
Bram Moolenaar
1a9922243a patch 8.2.3957: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2021-12-31 17:25:48 +00:00
zeertzjq
4b1478093e patch 8.2.3956: duplicate assignment
Problem:    Duplicate assignment.
Solution:   Remove the second assignment. (closes #9442)
2021-12-31 15:21:53 +00:00
Bram Moolenaar
eb822a280c patch 8.2.3955: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move more errors to errors.h.
2021-12-31 15:09:27 +00:00
Bram Moolenaar
9a015111a5 patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Problem:    Vim9: no error for shadowing if script var is declared later.
Solution:   Check argument names when compiling a function.
2021-12-31 14:06:45 +00:00
Yegappan Lakshmanan
6ad84ab3e4 patch 8.2.3953: insert completion code is too complicated
Problem:    Insert completion code is too complicated.
Solution:   More refactoring.  Move function arguments into a struct.
            (Yegappan Lakshmanan, closes #9437)
2021-12-31 12:59:53 +00:00
zeertzjq
1fa3de1ce8 patch 8.2.3952: first line not redrawn when adding lines to an empty buffer
Problem:    First line not redrawn when adding lines to an empty buffer.
Solution:   Adjust the argument to appended_lines(). (closes #9439,
            closes #9438)
2021-12-31 12:19:22 +00:00
Bram Moolenaar
04fb916684 Update runtime files 2021-12-30 20:24:12 +00:00
Bram Moolenaar
d293981d2b patch 8.2.3951: Vim9: memory leak when text after a nested function
Problem:    Vim9: memory leak when text after a nested function.
Solution:   Free the function if text is found after "enddef".
2021-12-30 17:09:05 +00:00
Bram Moolenaar
94f3192b03 patch 8.2.3950: going beyond the end of the line with /\%V
Problem:    Going beyond the end of the line with /\%V.
Solution:   Check for valid column in getvcol().
2021-12-30 15:29:18 +00:00
Bram Moolenaar
4c13e5e676 patch 8.2.3949: using freed memory with /\%V
Problem:    Using freed memory with /\%V.
Solution:   Get the line again after getvvcol().
2021-12-30 14:49:43 +00:00
Bram Moolenaar
cfe3af284a patch 8.2.3948: Vim9: failure with partial with unknown argument count
Problem:    Vim9: failure with partial with unknown argument count.
Solution:   Do not copy argument types if there aren't any.
2021-12-30 13:59:20 +00:00
zeertzjq
f38aad85cf patch 8.2.3947: unnecessary check for NULL pointer
Problem:    Unnecessary check for NULL pointer.
Solution:   Remove the check. (closes #9434)
2021-12-30 13:45:57 +00:00
Bram Moolenaar
1c67f3a977 patch 8.2.3946: when an internal error makes Vim exit the error is not seen
Problem:    When an internal error makes Vim exit the error is not seen.
Solution:   Add the error to the test output.
2021-12-30 13:32:09 +00:00
Bram Moolenaar
13789bf103 patch 8.2.3945: Vim9: partial variable argument types are wrong
Problem:    Vim9: partial variable argument types are wrong, leading to a
            crash.
Solution:   When adjusting the argument count also adjust the argument types.
            (closes #9433)
2021-12-30 13:29:00 +00:00
Yegappan Lakshmanan
5d2e007ccb patch 8.2.3944: insert mode completion functions are too long
Problem:    Insert mode completion functions are too long.
Solution:   Split up into multiple functions. (Yegappan Lakshmanan,
            closes #9431)
2021-12-30 11:40:53 +00:00
Bram Moolenaar
491669701c patch 8.2.3943: compiler warning from gcc for uninitialized variable
Problem:    Compiler warning from gcc for uninitialized variable.
Solution:   Initialize variable. (closes #9429)
2021-12-30 10:51:45 +00:00
Bram Moolenaar
8e7cc6b920 patch 8.2.3942: Coverity reports a possible memory leak
Problem:    Coverity reports a possible memory leak.
Solution:   Free the array if allocation fails.
2021-12-30 10:32:25 +00:00
dbivolaru
ab16ad33ba patch 8.2.3941: SIGTSTP is not handled
Problem:    SIGTSTP is not handled.
Solution:   Handle SIGTSTP like pressing CTRL-Z. (closes #9422)
2021-12-29 19:41:47 +00:00
Bram Moolenaar
94fb8274ca patch 8.2.3940: match highlight disappears when doing incsearch for ":s/pat"
Problem:    Match highlight disappears when doing incsearch for ":s/pat".
Solution:   Only use line limit for incsearch highlighting. (closes #9425)
2021-12-29 19:22:44 +00:00
Yegappan Lakshmanan
5a664fe57f patch 8.2.3939: MS-Windows: fnamemodify('', ':p') does not work
Problem:    MS-Windows: fnamemodify('', ':p') does not work.
Solution:   Do not consider an empty string a full path. (Yegappan Lakshmanan,
            closes #9428, closes #9427)
2021-12-29 18:16:21 +00:00
Bram Moolenaar
ba26367fea patch 8.2.3938: line comment start is also found in a string
Problem:    Line comment start is also found in a string.
Solution:   Skip line comments in a string.
2021-12-29 18:09:13 +00:00
Yegappan Lakshmanan
edc6f10390 patch 8.2.3937: Insert mode completion function is too long
Problem:    Insert mode completion function is too long.
Solution:   Refactor into multiple functions. (Yegappan Lakshmanan,
            closes #9423)
2021-12-29 17:38:46 +00:00
Sean Dewar
ccc1644f95 patch 8.2.3936: no proper test for maintaining change mark in diff mode
Problem:    No proper test for maintaining change mark in diff mode.
Solution:   Run the test with internal and external diff. (Sean Dewar,
            closes #9424)
2021-12-29 16:44:48 +00:00
Bram Moolenaar
5d20fbf2e7 patch 8.2.3935: CTRL-U in Insert mode does not fix the indent
Problem:    CTRL-U in Insert mode does not fix the indent.
Solution:   Fix the indent when 'cindent' is set.
2021-12-29 16:05:31 +00:00
Bram Moolenaar
5ea5f37372 patch 8.2.3934: repeating line comment is undesired for "O" command
Problem:    Repeating line comment is undesired for "O" command.
Solution:   Do not copy line comment leader for "O". (closes #9426)
2021-12-29 15:15:47 +00:00
Richard Doty
3d0abad5bf patch 8.2.3933: after ":cd" fails ":cd -" is incorrect
Problem:    After ":cd" fails ":cd -" is incorrect.
Solution:   Set the previous directory only after successfully changing
            directory. (Richard Doty, closes #9419, closes #8983)
2021-12-29 14:39:08 +00:00
Bram Moolenaar
264d3ddac0 patch 8.2.3932: C line comment not formatted properly
Problem:    C line comment not formatted properly.
Solution:   If a line comment follows after "#if" the next line is not the end
            of a paragraph.
2021-12-29 14:09:32 +00:00
Bram Moolenaar
febb78fa17 patch 8.2.3931: Coverity reports a memory leak
Problem:    Coverity reports a memory leak.
Solution:   Free memory in case of failure.
2021-12-29 11:59:53 +00:00
Bram Moolenaar
c97f9a55bd patch 8.2.3930: getcmdline() argument has a misleading type
Problem:    getcmdline() argument has a misleading type.
Solution:   Use the correct type, even though the value is not used.
2021-12-28 20:59:56 +00:00
Bram Moolenaar
10c75c4a09 patch 8.2.3929: using unititialized variable
Problem:    Using unititialized variable.
Solution:   Set the option flags to zero for a terminal option.
2021-12-28 20:53:30 +00:00
Bram Moolenaar
11ceb7d949 patch 8.2.3928: heredoc test fails
Problem:    Heredoc test fails.
Solution:   Correct order of function arguments.
2021-12-28 20:49:56 +00:00
Bram Moolenaar
8c697e3698 patch 8.2.3927: Vim9: double free when using lambda
Problem:    Vim9: double free when using lambda.
Solution:   Don't free both cmdline and line_to_free.
2021-12-28 20:18:50 +00:00
Bram Moolenaar
92f246e4f9 patch 8.2.3926: build failure without the 'autochdir' option
Problem:    Build failure without the 'autochdir' option. (John Marriott)
Solution:   Add #ifdefs.
2021-12-28 20:03:43 +00:00
Bram Moolenaar
06f6095623 patch 8.2.3925: diff mode confused by NUL bytes
Problem:    Diff mode confused by NUL bytes.
Solution:   Handle NUL bytes differently. (Christian Brabandt, closes #9421,
            closes #9418)
2021-12-28 18:30:05 +00:00
Bram Moolenaar
7473a84cf9 patch 8.2.3924: Vim9: no error if something follows :enddef
Problem:    Vim9: no error if something follows :enddef in a nested function.
Solution:   Give an error.  Move common code to a function.
2021-12-28 17:55:26 +00:00
Bram Moolenaar
4bf1006cae patch 8.2.3923: Vim9: double free with split argument list in nested function
Problem:    Vim9: double free if a nested function has a line break in the
            argument list.
Solution:   Set cmdlinep when freeing the previous line.
2021-12-28 17:23:12 +00:00
ichizok
8bb3fe4d4d patch 8.2.3922: cannot build with dynamic Ruby 3.1
Problem:    Cannot build with dynamic Ruby 3.1.
Solution:   Add "_EXTRA" variables for CI.  Add missing functions. (Ozaki
            Kiichi, closes #9420)
2021-12-28 15:51:45 +00:00
Lewis Russell
d9da86e94e patch 8.2.3921: the way xdiff is used is inefficient
Problem:    The way xdiff is used is inefficient.
Solution:   Use hunk_func instead of the out_line callback. (Lewis Russell,
            closes #9344)
2021-12-28 13:54:41 +00:00
Bram Moolenaar
90c317f224 patch 8.2.3920: restoring directory after using another window is inefficient
Problem:    Restoring directory after using another window is inefficient.
Solution:   Only restore the directory for win_execute().  Apply 'autochdir'
            only when needed.
2021-12-28 13:15:05 +00:00
Bram Moolenaar
8b6256f6ec patch 8.2.3919: Vim9: wrong argument for append() results in two errors
Problem:    Vim9: wrong argument for append() results in two errors.
Solution:   Check did_emsg.  Also for setline().  Adjust the help for
            appendbufline().
2021-12-28 11:24:49 +00:00
Bram Moolenaar
be4e223ead patch 8.2.3918: function list test fails
Problem:    Function list test fails.
Solution:   Adjust the test for the new location of the function list.
2021-12-27 21:42:57 +00:00
Bram Moolenaar
a4d131d110 Update runtime files 2021-12-27 21:33:07 +00:00
Bram Moolenaar
1cae5a0a03 patch 8.2.3917: the eval.txt help file is way too big
Problem:    The eval.txt help file is way too big.
Solution:   Move the builtin function details to a separate file.
2021-12-27 21:28:34 +00:00
Bram Moolenaar
8dac2acd6a patch 8.2.3916: no error for passing an invalid line number to append()
Problem:    No error for passing an invalid line number to append().
Solution:   In Vim9 script check for a non-negative number. (closes #9417)
2021-12-27 20:57:06 +00:00
Bram Moolenaar
4b28ba3245 patch 8.2.3915: illegal memory access when completing with invalid bytes
Problem:    illegal memory access when completing with invalid bytes.
Solution:   Avoid going over the end of the completion text.
2021-12-27 19:28:37 +00:00
Dominique Pelle
af4a61a85d patch 8.2.3914: various spelling mistakes in comments
Problem:    Various spelling mistakes in comments.
Solution:   Fix the mistakes. (Dominique Pellé, closes #9416)
2021-12-27 17:21:41 +00:00
Bram Moolenaar
5da36052a4 patch 8.2.3913: help for expressions does not mention Vim9 syntax
Problem:    Help for expressions does not mention Vim9 syntax.
Solution:   Add the rules for Vim9 to the expression help.  Rename functions
            to match the help.
2021-12-27 15:39:57 +00:00
Bram Moolenaar
bf7ff61af4 patch 8.2.3912: the ins_complete() function is much too long
Problem:    The ins_complete() function is much too long.
Solution:   Split it up into multiple functions. (Yegappan Lakshmanan,
            closes #9414)
2021-12-27 12:52:07 +00:00
Bram Moolenaar
ef8f04b1d1 patch 8.2.3911: Vim9: type check for filter() does not accept unknown
Problem:    Vim9: type check for filter() does not accept unknown.
Solution:   Also accept unknown for the return type. (closes #9413)
2021-12-27 12:29:19 +00:00
Bram Moolenaar
23018f2d4b patch 8.2.3910: when compare function of sort() fails it does not abort
Problem:    When the compare function of sort() produces and error then sort()
            does not abort.
Solution:   Check if did_emsg was incremented.
2021-12-27 11:54:37 +00:00
Bram Moolenaar
bbdd3fb804 patch 8.2.3909: Containerfile using prefix name not recognized
Problem:    Containerfile using prefix name not recognized.
Solution:   Recognize Containerfile.*.
2021-12-27 10:35:52 +00:00
Yegappan Lakshmanan
27708e6c7b patch 8.2.3908: cannot use a script-local function for 'foldtext'
Problem:    Cannot use a script-local function for 'foldtext'.
Solution:   Expand "s:" and "<SID>". (Yegappan Lakshmanan, closes #9411)
2021-12-26 21:54:43 +00:00
Bram Moolenaar
c553a21e18 patch 8.2.3907: error messages are spread out
Problem:    Error messages are spread out.
Solution:   Move error messages to errors.h.  Avoid duplicates.
2021-12-26 20:20:34 +00:00
Bram Moolenaar
1f318c6eac patch 8.2.3906: Vim9 help still contains "under development" warnings
Problem:    Vim9 help still contains "under development" warnings.
Solution:   Remove the explicit warning.
2021-12-26 18:09:31 +00:00
Bram Moolenaar
c88ac94a0b patch 8.2.3905: Dockerfile using prefix name not recognized
Problem:    Dockerfile using prefix name not recognized.
Solution:   Recognize Dockerfile.*. (closes #9410)
2021-12-26 17:31:35 +00:00
Bram Moolenaar
7319981f21 patch 8.2.3904: Vim9: skip expression type is not checked at compile time
Problem:    Vim9: skip expression type is not checked at compile time.
Solution:   Add argument type checks.
2021-12-26 17:18:14 +00:00
Bram Moolenaar
71c41255f6 patch 8.2.3903: "gM" does not count tabs as expected
Problem:    "gM" does not count tabs as expected.
Solution:   Use linetabsize() instead of mb_string2cells(). (closes #9409)
2021-12-26 15:00:07 +00:00
Bram Moolenaar
9c23f9bb5f patch 8.2.3902: Vim9: double free with nested :def function
Problem:    Vim9: double free with nested :def function.
Solution:   Pass "line_to_free" from compile_def_function() and make sure
            cmdlinep is valid.
2021-12-26 14:23:22 +00:00
Bram Moolenaar
71eb3ad579 patch 8.2.3901: Vim9: Cannot set 'cpo' in main .vimrc if using Vim9 script
Problem:    Vim9: Cannot set 'cpo' in main .vimrc if using Vim9 script.
Solution:   Do not restore 'cpo' at the end of the main .vimrc.
2021-12-26 12:07:30 +00:00
Yegappan Lakshmanan
8bb65f230d patch 8.2.3900: it is not easy to use a script-local function for an option
Problem:    It is not easy to use a script-local function for an option.
Solution:   recognize s: and <SID> at the start of the expression. (Yegappan
            Lakshmanan, closes #9401)
2021-12-26 10:51:39 +00:00
Bram Moolenaar
ec86520f94 patch 8.2.3899: Vim9: test for map() on string fails
Problem:    Vim9: test for map() on string fails.
Solution:   Expect string return type.
2021-12-25 22:10:42 +00:00
Bram Moolenaar
fb9dcb080b patch 8.2.3898: Vim9: not sufficient testing for variable initialization
Problem:    Vim9: not sufficient testing for variable initialization.
Solution:   Add another test case.
2021-12-25 22:00:49 +00:00
Bram Moolenaar
1802405d71 patch 8.2.3897: Vim9: second argument of map() and filter() not checked
Problem:    Vim9: the second argument of map() and filter() is not checked at
            compile time.
Solution:   Add more specific type check for the second argument.
2021-12-25 21:43:28 +00:00
Bram Moolenaar
db8e5c21b9 patch 8.2.3896: Vim9: no test for nested function not available later
Problem:    Vim9: no test for nested function not available later.
Solution:   Add a test.
2021-12-25 19:58:22 +00:00
Bram Moolenaar
ae1068afde patch 8.2.3895: Vim9: confusing error when using function() with a number
Problem:    Vim9: confusing error when using function() with a number.
Solution:   Check for a function or string argument.
2021-12-25 19:43:44 +00:00
Bram Moolenaar
223d0a6bc8 patch 8.2.3894: Vim9: no proper type check for first argument of call()
Problem:    Vim9: no proper type check for first argument of call().
Solution:   Add specific type check.
2021-12-25 19:29:21 +00:00
Bram Moolenaar
5cd647935d patch 8.2.3893: Vim9: many local variables are initialized with an instruction
Problem:    Vim9: many local variables are initialized with an instruction.
Solution:   Initialize local variables to zero to avoid the instructions.
2021-12-25 18:23:24 +00:00
Bram Moolenaar
35cfd793aa patch 8.2.3892: when modifyOtherKeys is used CTRL-C is not recognized
Problem:    When modifyOtherKeys is used CTRL-C is not recognized.
Solution:   Check for uppercase C as well, fix minimum length.
2021-12-25 15:13:18 +00:00
Yegappan Lakshmanan
7f4a628efe patch 8.2.3891: github CI: workflows may overlap
Problem:    Github CI: workflows may overlap.
Solution:   Cancel previous workflows when starting a new one. (Yegappan
            Lakshmanan, closes #9400)
2021-12-25 11:20:30 +00:00
Bram Moolenaar
d787e40fdb patch 8.2.3890: Vim9: type check for using v: variables is basic
Problem:    Vim9: type check for using v: variables is basic.
Solution:   Specify a more precise type.
2021-12-24 21:36:12 +00:00
Yegappan Lakshmanan
e7f4abd38b patch 8.2.3889: duplicate code for translating script-local function name
Problem:    Duplicate code for translating script-local function name.
Solution:   Move the code to get_scriptlocal_funcname(). (Yegappan Lakshmanan,
            closes #9393)
2021-12-24 20:47:38 +00:00
Nir Lichtman
73a024209c patch 8.2.3888: the argument list may contain duplicates
Problem:    The argument list may contain duplicates.
Solution:   Add the :argdedeupe command. (Nir Lichtman, closes #6235)
2021-12-24 20:28:03 +00:00
Bram Moolenaar
806da5176e patch 8.2.3887: E1135 is used for two different errors
Problem:    E1135 is used for two different errors.
Solution:   Renumber one error.
2021-12-24 19:54:52 +00:00
Bram Moolenaar
b6db146762 patch 8.2.3886: can define autocmd for every event by using "au!"
Problem:    Can define autocmd for every event by using "au!".
Solution:   Check if a command is present also for "au!".
2021-12-24 19:24:47 +00:00
326 changed files with 50006 additions and 33638 deletions

View File

@@ -5,6 +5,13 @@ on:
branches: ['**']
pull_request:
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
jobs:
linux:
runs-on: ubuntu-18.04
@@ -57,23 +64,29 @@ jobs:
- name: Install packages
run: |
sudo apt update && sudo apt install -y \
autoconf \
lcov \
PKGS=( \
gettext \
libcanberra-dev \
libperl-dev \
python-dev \
python3-dev \
liblua5.3-dev \
lua5.3 \
ruby-dev \
tcl-dev \
cscope \
libgtk2.0-dev \
desktop-file-utils \
libtool-bin \
libsodium-dev
)
if ${{ matrix.features == 'huge' }}; then
PKGS+=( \
autoconf \
lcov \
libcanberra-dev \
libperl-dev \
python-dev \
python3-dev \
liblua5.3-dev \
lua5.3 \
ruby-dev \
tcl-dev \
cscope \
libsodium-dev \
)
fi
sudo apt update && sudo apt install -y "${PKGS[@]}"
- name: Install clang-13
if: matrix.compiler == 'clang'
@@ -85,6 +98,7 @@ jobs:
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-13 100
sudo update-alternatives --set clang /usr/bin/clang-13
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-13 100
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-13 100
- name: Set up environment
run: |
@@ -112,7 +126,6 @@ jobs:
;;
esac
CFLAGS=""
if ${{ matrix.coverage == true }}; then
CFLAGS="$CFLAGS --coverage -DUSE_GCOV_FLUSH"
echo "LDFLAGS=--coverage"
@@ -211,45 +224,51 @@ jobs:
do_test() { sg audio "sg $(id -gn) '$*'"; }
do_test make ${SHADOWOPT} ${TEST}
# - name: Coveralls
# if: matrix.coverage && success() && github.event_name != 'pull_request'
# env:
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
# COVERALLS_PARALLEL: true
# TRAVIS_JOB_ID: ${{ github.run_id }}
# run: |
# sudo apt-get install -y python3-setuptools python3-wheel
# sudo -H pip3 install pip -U
# # needed for https support for coveralls building cffi only works with gcc, not with clang
# CC=gcc pip3 install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1
# ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8
# - name: Coveralls
# if: matrix.coverage && success() && github.event_name != 'pull_request'
# env:
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
# COVERALLS_PARALLEL: true
# TRAVIS_JOB_ID: ${{ github.run_id }}
# run: |
# sudo apt-get install -y python3-setuptools python3-wheel
# sudo -H pip3 install pip -U
# # needed for https support for coveralls building cffi only works with gcc, not with clang
# CC=gcc pip3 install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1
# ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8
- name: Codecov
- name: Generate gcov files
if: matrix.coverage && success()
run: |
cd "${SRCDIR}"
bash <(curl -s https://codecov.io/bash) -F "${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}"
find . -type f -name '*.gcno' -exec gcov -pb {} + || true
- name: Codecov
if: matrix.coverage && success()
uses: codecov/codecov-action@v2
with:
flags: ${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}
- name: ASan logs
if: contains(matrix.extra, 'asan') && !cancelled()
run: |
for f in $(grep -lR '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "${LOG_DIR}"); do
asan_symbolize-13 -l "$f"
asan_symbolize -l "$f"
false # in order to fail a job
done
# coveralls:
# runs-on: ubuntu-18.04
# coveralls:
# runs-on: ubuntu-18.04
#
# needs: linux
# if: always() && github.event_name != 'pull_request'
# needs: linux
# if: always() && github.event_name != 'pull_request'
#
# steps:
# - name: Parallel finished
# env:
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
# run: |
# curl -k "https://coveralls.io/webhook?repo_token=${COVERALLS_REPO_TOKEN}" -d "payload[build_num]=${GITHUB_RUN_ID}&payload[status]=done"
# steps:
# - name: Parallel finished
# env:
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
# run: |
# curl -k "https://coveralls.io/webhook?repo_token=${COVERALLS_REPO_TOKEN}" -d "payload[build_num]=${GITHUB_RUN_ID}&payload[status]=done"
macos:
runs-on: macos-latest
@@ -270,6 +289,7 @@ jobs:
- uses: actions/checkout@v2
- name: Install packages
if: matrix.features == 'huge'
env:
HOMEBREW_NO_AUTO_UPDATE: 1
run: |

View File

@@ -14,6 +14,13 @@ on:
schedule:
- cron: '0 18 * * 1'
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
jobs:
analyze:
name: Analyze

View File

@@ -497,7 +497,6 @@ SRC_UNIX = \
SRC_DOS_UNIX = \
src/gui_xim.c \
src/if_cscope.c \
src/if_cscope.h \
src/if_lua.c \
src/if_mzsch.c \
src/if_mzsch.h \

View File

@@ -1,3 +1,3 @@
# Clang 12 (or Apple clang 13) and later makes a warning '-Wcompound-token-split-by-macro' enable by default.
/^PERL_CFLAGS[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro/
/^RUBY_CFLAGS[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro/
/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro/
/^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro/

View File

@@ -1,2 +1,2 @@
/^CFLAGS[[:blank:]]*=/s/$/ -Wno-error=missing-field-initializers/
/^RUBY_CFLAGS[[:blank:]]*=/s/$/ -Wno-error=unknown-attributes -Wno-error=ignored-attributes/
/^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unknown-attributes -Wno-error=ignored-attributes/

View File

@@ -1,2 +1,3 @@
/^CFLAGS[[:blank:]]*=/s/$/ -Wall -Wextra -Wshadow -Werror/
/^PERL_CFLAGS[[:blank:]]*=/s/$/ -Wno-error=unused-function/
/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-function/
/^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-parameter/

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
" Vim functions for file type detection
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Dec 17
" Last Change: 2022 Jan 11
" These functions are moved here from runtime/filetype.vim to make startup
" faster.
@@ -829,6 +829,23 @@ func dist#ft#Dep3patch()
endfor
endfunc
" This function checks the first 15 lines for appearance of 'FoamFile'
" and then 'object' in a following line.
" In that case, it's probably an OpenFOAM file
func dist#ft#FTfoam()
let ffile = 0
let lnum = 1
while lnum <= 15
if getline(lnum) =~# '^FoamFile'
let ffile = 1
elseif ffile == 1 && getline(lnum) =~# '^\s*object'
setf foam
return
endif
let lnum = lnum + 1
endwhile
endfunc
" Restore 'cpoptions'
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -16,6 +16,7 @@ include ../../src/auto/config.mk
DOCS = \
arabic.txt \
autocmd.txt \
builtin.txt \
change.txt \
channel.txt \
cmdline.txt \
@@ -161,6 +162,7 @@ DOCS = \
HTMLS = \
arabic.html \
autocmd.html \
builtin.html \
change.html \
channel.html \
cmdline.html \

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.2. Last change: 2021 Nov 20
*autocmd.txt* For Vim version 8.2. Last change: 2022 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -51,10 +51,10 @@ effects. Be careful not to destroy your text.
2. Defining autocommands *autocmd-define*
*:au* *:autocmd*
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
:au[tocmd] [group] {event} {aupat} [++once] [++nested] {cmd}
Add {cmd} to the list of commands that Vim will
execute automatically on {event} for a file matching
{pat} |autocmd-patterns|.
{aupat} |autocmd-patterns|.
Here {event} cannot be "*". *E1155*
Note: A quote character is seen as argument to the
:autocmd and won't start a comment.
@@ -145,19 +145,19 @@ prompt. When one command outputs two messages this can happen anyway.
==============================================================================
3. Removing autocommands *autocmd-remove*
:au[tocmd]! [group] {event} {pat} [++once] [++nested] {cmd}
:au[tocmd]! [group] {event} {aupat} [++once] [++nested] {cmd}
Remove all autocommands associated with {event} and
{pat}, and add the command {cmd}.
{aupat}, and add the command {cmd}.
See |autocmd-once| for [++once].
See |autocmd-nested| for [++nested].
:au[tocmd]! [group] {event} {pat}
:au[tocmd]! [group] {event} {aupat}
Remove all autocommands associated with {event} and
{pat}.
{aupat}.
:au[tocmd]! [group] * {pat}
Remove all autocommands associated with {pat} for all
events.
:au[tocmd]! [group] * {aupat}
Remove all autocommands associated with {aupat} for
all events.
:au[tocmd]! [group] {event}
Remove ALL autocommands for {event}.
@@ -177,12 +177,12 @@ with ":augroup"); otherwise, Vim uses the group defined with [group].
==============================================================================
4. Listing autocommands *autocmd-list*
:au[tocmd] [group] {event} {pat}
:au[tocmd] [group] {event} {aupat}
Show the autocommands associated with {event} and
{pat}.
{aupat}.
:au[tocmd] [group] * {pat}
Show the autocommands associated with {pat} for all
:au[tocmd] [group] * {aupat}
Show the autocommands associated with {aupat} for all
events.
:au[tocmd] [group] {event}
@@ -1279,8 +1279,8 @@ VimResume When the Vim instance is resumed after being
:autocmd VimResume * checktime
< *VimSuspend*
VimSuspend When the Vim instance is suspended. Only when
CTRL-Z was typed inside Vim, not when the
SIGSTOP or SIGTSTP signal was sent to Vim.
CTRL-Z was typed inside Vim, or when the SIGTSTP
signal was sent to Vim, but not for SIGSTOP.
*WinClosed*
WinClosed After closing a window. The pattern is
matched against the |window-ID|. Both
@@ -1311,16 +1311,16 @@ WinNew When a new window was created. Not done for
Before a WinEnter event.
==============================================================================
6. Patterns *autocmd-patterns* *{pat}*
6. Patterns *autocmd-patterns* *{aupat}*
The {pat} argument can be a comma separated list. This works as if the
command was given with each pattern separately. Thus this command: >
The {aupat} argument of `:autocmd` can be a comma separated list. This works as
if the command was given with each pattern separately. Thus this command: >
:autocmd BufRead *.txt,*.info set et
Is equivalent to: >
:autocmd BufRead *.txt set et
:autocmd BufRead *.info set et
The file pattern {pat} is tested for a match against the file name in one of
The file pattern {aupat} is tested for a match against the file name in one of
two ways:
1. When there is no '/' in the pattern, Vim checks for a match against only
the tail part of the file name (without its leading directory path).

10173
runtime/doc/builtin.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
*change.txt* For Vim version 8.2. Last change: 2021 Jun 23
*change.txt* For Vim version 8.2. Last change: 2021 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -259,6 +259,9 @@ Or use "caw" (see |aw|).
line.
Adding [!] toggles 'autoindent' for the time this
command is executed.
This command is not supported in |Vim9| script,
because it is too easily confused with a variable
name.
==============================================================================
3. Simple changes *simple-change*
@@ -1374,6 +1377,9 @@ The next three commands always work on whole lines.
*:t*
:t Synonym for copy.
This command is not supported in |Vim9| script,
because it is too easily confused with a variable
name.
:[range]m[ove] {address} *:m* *:mo* *:move* *E134*
Move the lines given by [range] to below the line
@@ -1671,7 +1677,8 @@ r Automatically insert the current comment leader after hitting
<Enter> in Insert mode.
*fo-o*
o Automatically insert the current comment leader after hitting 'o' or
'O' in Normal mode.
'O' in Normal mode. In case comment is unwanted in a specific place
use CTRL-U to quickly delete it. |i_CTRL-U|
*fo-q*
q Allow formatting of comments with "gq".
Note that formatting will not change blank lines or lines containing

View File

@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 8.2. Last change: 2021 Dec 04
*cmdline.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -705,6 +705,15 @@ Some Ex commands accept a line range in front of them. This is noted as
The basics are explained in section |10.3| of the user manual.
In |Vim9| script a range needs to be prefixed with a colon to avoid ambiguity
with continuation lines. For example, "+" can be used for a range but is also
a continuation of an expression: >
var result = start
+ print
If the "+" is a range then it must be prefixed with a colon: >
var result = start
:+ print
<
*:,* *:;*
When separated with ';' the cursor position will be set to that line
before interpreting the next line specifier. This doesn't happen for ','.
@@ -739,7 +748,8 @@ Line numbers may be specified with: *:range* *{address}*
Each may be followed (several times) by '+' or '-' and an optional number.
This number is added or subtracted from the preceding line number. If the
number is omitted, 1 is used.
number is omitted, 1 is used. If there is nothing before the '+' or '-' then
the current line is used.
The "/" and "?" after {pattern} are required to separate the pattern from
anything that follows.
@@ -769,7 +779,7 @@ Some commands allow for a count after the command. This count is used as the
number of lines to be used, starting with the line given in the last line
specifier (the default is the cursor line). The commands that accept a count
are the ones that use a range but do not have a file name argument (because
a file name can also be a number).
a file name can also be a number). The count cannot be negative.
Examples: >
:s/x/X/g 5 substitute 'x' by 'X' in the current line and four
@@ -940,6 +950,7 @@ Note: these are typed literally, they are not special keys!
and "script {file-name}[{lnum}]" for a script line, and
".." in between items. E.g.:
"function {function-name1}[{lnum}]..{function-name2}[{lnum}]"
If there is no call stack you get error *E489* .
*:<slnum>* *<slnum>*
<slnum> When executing a ":source" command, is replaced with the
line number. *E842*

View File

@@ -398,6 +398,11 @@ mode, so that a CTRL-Z doesn't end the text on DOS.
The `redraw!` command may not be needed, depending on whether executing a
shell command shows something on the display or not.
If the 'diffexpr' expression starts with s: or |<SID>|, then it is replaced
with the script ID (|local-function|). Example: >
set diffexpr=s:MyDiffExpr()
set diffexpr=<SID>SomeDiffExpr()
<
*E810* *E97*
Vim will do a test if the diff output looks alright. If it doesn't, you will
get an error message. Possible causes:
@@ -449,4 +454,9 @@ evaluating 'patchexpr'. This hopefully avoids that files in the current
directory are accidentally patched. Vim will also delete files starting with
v:fname_in and ending in ".rej" and ".orig".
If the 'patchexpr' expression starts with s: or |<SID>|, then it is replaced
with the script ID (|local-function|). Example: >
set patchexpr=s:MyPatchExpr()
set patchexpr=<SID>SomePatchExpr()
<
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*editing.txt* For Vim version 8.2. Last change: 2021 Dec 11
*editing.txt* For Vim version 8.2. Last change: 2022 Jan 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -650,12 +650,19 @@ list of the current window.
And after the last one:
:+2argadd y a b c x y
There is no check for duplicates, it is possible to
add a file to the argument list twice.
The currently edited file is not changed.
add a file to the argument list twice. You can use
|:argdedupe| to fix it afterwards: >
:argadd *.txt | argdedupe
< The currently edited file is not changed.
Note: you can also use this method: >
:args ## x
< This will add the "x" item and sort the new list.
:argded[upe] *:argded* *:argdedupe*
Remove duplicate filenames from the argument list.
If your current file is a duplicate, your current file
will change to the original file index.
:argd[elete] {pattern} .. *:argd* *:argdelete* *E480* *E610*
Delete files from the argument list that match the
{pattern}s. {pattern} is used like a file pattern,
@@ -1140,6 +1147,9 @@ The names can be in upper- or lowercase.
made.
When 'hidden' is set and there are more windows, the
current buffer becomes hidden, after writing the file.
This command is not supported in |Vim9| script,
because it is too easily confused with a variable
name.
*:exi* *:exit*
:[range]exi[t][!] [++opt] [file]
@@ -1378,7 +1388,8 @@ becomes the current directory for that window. Windows where the |:lcd|
command has not been used stick to the global or tab-local current directory.
When jumping to another window the current directory is changed to the last
specified local current directory. If none was specified, the global or
tab-local current directory is used.
tab-local current directory is used. When creating a new window it inherits
the local directory of the current window.
When a |:tcd| command has been used for a tab page, the specified directory
becomes the current directory for the current tab page and the current window.
@@ -1760,7 +1771,7 @@ There are three different types of searching:
/u/user_x/work/include
/u/user_x/include
< Note: If your 'path' setting includes an non-existing directory, Vim will
< 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

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 8.2. Last change: 2021 Sep 22
*filetype.txt* For Vim version 8.2. Last change: 2021 Dec 30
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -358,12 +358,12 @@ define yourself. There are a few ways to avoid this:
You need to define your own mapping before the plugin is loaded (before
editing a file of that type). The plugin will then skip installing the
default mapping.
*no_mail_maps*
*no_mail_maps* *g:no_mail_maps*
3. Disable defining mappings for a specific filetype by setting a variable,
which contains the name of the filetype. For the "mail" filetype this
would be: >
:let no_mail_maps = 1
< *no_plugin_maps*
< *no_plugin_maps* *g:no_plugin_maps*
4. Disable defining mappings for all filetypes by setting a variable: >
:let no_plugin_maps = 1
<

View File

@@ -121,6 +121,11 @@ method can be very slow!
Try to avoid the "=", "a" and "s" return values, since Vim often has to search
backwards for a line for which the fold level is defined. This can be slow.
If the 'foldexpr' expression starts with s: or |<SID>|, then it is replaced
with the script ID (|local-function|). Examples: >
set foldexpr=s:MyFoldExpr()
set foldexpr=<SID>SomeFoldExpr()
<
An example of using "a1" and "s1": For a multi-line C comment, a line
containing "/*" would return "a1" to start a fold, and a line containing "*/"
would return "s1" to end the fold after that line: >
@@ -524,6 +529,11 @@ The resulting line is truncated to fit in the window, it never wraps.
When there is room after the text, it is filled with the character specified
by 'fillchars'.
If the 'foldtext' expression starts with s: or |<SID>|, then it is replaced
with the script ID (|local-function|). Examples: >
set foldtext=s:MyFoldText()
set foldtext=<SID>SomeFoldText()
<
Note that backslashes need to be used for characters that the ":set" command
handles differently: Space, backslash and double-quote. |option-backslash|

View File

@@ -1,4 +1,4 @@
*help.txt* For Vim version 8.2. Last change: 2020 Aug 15
*help.txt* For Vim version 8.2. Last change: 2021 Dec 27
VIM - main help file
k
@@ -136,6 +136,7 @@ Advanced editing ~
|diff.txt| working with two to eight versions of the same file
|autocmd.txt| automatically executing commands on an event
|eval.txt| expression evaluation, conditional commands
|builtin.txt| builtin functions
|channel.txt| Jobs, Channels, inter-process communication
|fold.txt| hide (fold) ranges of lines

View File

@@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 8.2. Last change: 2021 Dec 13
*helphelp.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -224,7 +224,7 @@ command: >
dialog. {only when compiled with |+GUI_GTK|}
*:helpt* *:helptags*
*E154* *E150* *E151* *E152* *E153* *E670*
*E150* *E151* *E152* *E153* *E154* *E670*
:helpt[ags] [++t] {dir}
Generate the help tags file(s) for directory {dir}.
When {dir} is ALL then all "doc" directories in

View File

@@ -1,4 +1,4 @@
*if_cscop.txt* For Vim version 8.2. Last change: 2019 May 05
*if_cscop.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Andy Kahn
@@ -89,7 +89,7 @@ suggested use.)
==============================================================================
2. Cscope related commands *cscope-commands*
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E560* *E561*
All cscope commands are accessed through suboptions to the cscope commands.
`:cscope` or `:cs` is the main command
`:scscope` or `:scs` does the same and splits the window

View File

@@ -1,4 +1,4 @@
*if_perl.txt* For Vim version 8.2. Last change: 2019 Dec 07
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Sven Verdoolaege
@@ -104,7 +104,6 @@ Here are some things you can try: >
: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_tcl.txt* For Vim version 8.2. Last change: 2021 May 27
*if_tcl.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Ingo Wilken
@@ -16,9 +16,9 @@ The Tcl Interface to Vim *tcl* *Tcl* *TCL*
8. Examples |tcl-examples|
9. Dynamic loading |tcl-dynamic|
*E280*
{only available when Vim was compiled with the |+tcl| feature}
*E280*
WARNING: There are probably still some bugs. Please send bug reports,
comments, ideas etc to <Ingo.Wilken@informatik.uni-oldenburg.de>

View File

@@ -879,7 +879,7 @@ For example, with N = 1, this will give:
*PHP_outdentphpescape*
To indent PHP escape tags as the surrounding non-PHP code (only affects the
PHP escape tags): >
:let g:PHP_outdentphpescape = 0
:let g:PHP_outdentphpescape = 0
-------------
*PHP_removeCRwhenUnix*
@@ -1206,7 +1206,7 @@ comments will be indented according to the correctly indented code.
VIM *ft-vim-indent*
*g:vim_indent_cont*
For indenting Vim scripts there is one variable that specifies the amount of
indent for a continuation line, a line that starts with a backslash: >

View File

@@ -1166,6 +1166,7 @@ tag command action ~
be remapped
|:args| :ar[gs] print the argument list
|:argadd| :arga[dd] add items to the argument list
:argdedupe :argdedupe remove duplicates from the argument list
|:argdelete| :argd[elete] delete items from the argument list
|:argedit| :arge[dit] add item to the argument list and edit it
|:argdo| :argdo do a command on all items in the argument list

View File

@@ -1,4 +1,4 @@
*insert.txt* For Vim version 8.2. Last change: 2021 Oct 24
*insert.txt* For Vim version 8.2. Last change: 2021 Dec 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -84,6 +84,8 @@ CTRL-U Delete all entered characters before the cursor in the current
line. If there are no newly entered characters and
'backspace' is not empty, delete all characters before the
cursor in the current line.
If C-indenting is enabled the indent will be adjusted if the
line becomes blank.
See |i_backspacing| about joining lines.
*i_CTRL-I* *i_<Tab>* *i_Tab*
<Tab> or CTRL-I Insert a tab. If the 'expandtab' option is on, the
@@ -848,7 +850,7 @@ space is preferred). Maximum line length is 510 bytes.
For an example, imagine the 'thesaurus' file has a line like this: >
angry furious mad enraged
<Placing the cursor after the letters "ang" and typing CTRL-X CTRL-T would
Placing the cursor after the letters "ang" and typing CTRL-X CTRL-T would
complete the word "angry"; subsequent presses would change the word to
"furious", "mad" etc.
@@ -860,7 +862,7 @@ https://github.com/vim/vim/issues/629#issuecomment-443293282
Unpack thesaurus_pkg.zip, put the thesaurus.txt file somewhere, e.g.
~/.vim/thesaurus/english.txt, and the 'thesaurus' option to this file name.
Completing keywords with 'thesaurusfunc' *compl-thesaurusfunc*
If the 'thesaurusfunc' option is set, then the user specified function is
@@ -1945,6 +1947,9 @@ When 'autoindent' is on, the indent for a new line is obtained from the
previous line. When 'smartindent' or 'cindent' is on, the indent for a line
is automatically adjusted for C programs.
'formatoptions' can be set to copy the comment leader when opening a new
line.
'textwidth' can be set to the maximum width for a line. When a line becomes
too long when appending characters a line break is automatically inserted.
@@ -1958,6 +1963,9 @@ too long when appending characters a line break is automatically inserted.
inserted after the current line.
Adding [!] toggles 'autoindent' for the time this
command is executed.
This command is not supported in |Vim9| script,
because it is too easily confused with a variable
name.
*:i* *:in* *:insert*
:{range}i[nsert][!] Insert several lines of text above the specified
@@ -1965,6 +1973,9 @@ too long when appending characters a line break is automatically inserted.
inserted before the current line.
Adding [!] toggles 'autoindent' for the time this
command is executed.
This command is not supported in |Vim9| script,
because it is too easily confused with a variable
name.
These two commands will keep on asking for lines, until you type a line
containing only a ".". Watch out for lines starting with a backslash, see

View File

@@ -1,4 +1,4 @@
*map.txt* For Vim version 8.2. Last change: 2021 Dec 20
*map.txt* For Vim version 8.2. Last change: 2022 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -6,7 +6,7 @@
Key mapping, abbreviations and user-defined commands.
This subject is introduced in sections |05.3|, |24.7| and |40.1| of the user
This subject is introduced in sections |05.4|, |24.7| and |40.1| of the user
manual.
1. Key mapping |key-mapping|
@@ -97,8 +97,7 @@ modes.
map command applies. The mapping may remain defined
for other modes where it applies.
It also works when {lhs} matches the {rhs} of a
mapping. This is for when when an abbreviation
applied.
mapping. This is for when an abbreviation applied.
Note: Trailing spaces are included in the {lhs}. This
unmap does NOT work: >
:map @@ foo
@@ -271,7 +270,7 @@ input. Example: >
endfunc
nnoremap <expr> <F3> <SID>OpenPopup()
Also, keep in mind that the expression may be evaluated when looking for
Keep in mind that the expression may be evaluated when looking for
typeahead, before the previous command has been executed. For example: >
func StoreColumn()
let g:column = col('.')
@@ -285,6 +284,10 @@ This can be solved by inserting <Ignore> before the character that is
expression-mapped: >
nmap ! f!<Ignore>x
When defining a mapping in a |Vim9| script, the expression will be evaluated
in the context of that script. This means that script-local items can be
accessed in the expression.
Be very careful about side effects! The expression is evaluated while
obtaining characters, you may very well make the command dysfunctional.
For this reason the following is blocked:
@@ -343,9 +346,24 @@ Example of using <Cmd> halfway Insert mode: >
Unlike <expr> mappings, there are no special restrictions on the <Cmd>
command: it is executed as if an (unrestricted) |autocommand| was invoked.
*<ScriptCmd>*
<ScriptCmd> is like <Cmd> but sets the context to the script the mapping was
defined in, for the duration of the command execution. This is especially
useful for |Vim9| script. It also works to access an import, which is useful
in a plugin using an autoload script: >
vim9script
import autoload 'implementation.vim' as impl
nnoremap <F4> <ScriptCmd>impl.DoTheWork()<CR>
No matter where <F4> is typed, the "impl" import will be found in the script
context of where the mapping was defined. And since it's an autoload import,
the "implementation.vim" script will only be loaded once <F4> is typed, not
when the mapping is defined.
Note:
- Because <Cmd> avoids mode-changes it does not trigger |CmdlineEnter| and
|CmdlineLeave| events, because no user interaction is expected.
- Because <Cmd> and <ScriptCmd> avoid mode-changes it does not trigger
|CmdlineEnter| and |CmdlineLeave| events, because no user interaction is
expected.
- For the same reason, |keycodes| like <C-R><C-W> are interpreted as plain,
unmapped keys.
- The command is not echo'ed, no need for <silent>.
@@ -356,13 +374,14 @@ Note:
- In Select mode, |:map| and |:vmap| command mappings are executed in
Visual mode. Use |:smap| to handle Select mode differently.
*E1135* *E1136*
<Cmd> commands must terminate, that is, they must be followed by <CR> in the
{rhs} of the mapping definition. |Command-line| mode is never entered.
*E1255* *E1136*
<Cmd> and <ScriptCmd> commands must terminate, that is, they must be followed
by <CR> in the {rhs} of the mapping definition. |Command-line| mode is never
entered.
*E1137*
<Cmd> commands can have only normal characters and cannot contain special
characters like function keys.
<Cmd> and <ScriptCmd> commands can have only normal characters and cannot
contain special characters like function keys.
1.3 MAPPING AND MODES *:map-modes*

View File

@@ -1,4 +1,4 @@
*mbyte.txt* For Vim version 8.2. Last change: 2021 Oct 04
*mbyte.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar et al.
@@ -862,8 +862,8 @@ Use the RPM or port for your system.
window specific to the input method.
USING XIM *multibyte-input* *E284* *E286* *E287* *E288*
*E285* *E289*
USING XIM *multibyte-input* *E284* *E285* *E286* *E287*
*E288* *E289*
Note that Display and Input are independent. It is possible to see your
language even though you have no input method for it. But when your Display

View File

@@ -1,4 +1,4 @@
*message.txt* For Vim version 8.2. Last change: 2021 Dec 13
*message.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -118,7 +118,8 @@ wiped out a buffer which contains a mark or is referenced in another way.
*E95* >
Buffer with this name already exists
You cannot have two buffers with the same name.
You cannot have two buffers with exactly the same name. This includes the
path leading to the file.
*E72* >
Close error on swap file
@@ -534,10 +535,10 @@ If you type "gq", it will execute this mapping, which will call "gq" again.
*E22* >
Scripts nested too deep
Scripts can be read with the "-s" command-line argument and with the ":source"
command. The script can then again read another script. This can continue
for about 14 levels. When more nesting is done, Vim assumes that there is a
recursive loop somewhere and stops with this error message.
Scripts can be read with the "-s" command-line argument and with the
`:source!` command. The script can then again read another script. This can
continue for about 14 levels. When more nesting is done, Vim assumes that
there is a recursive loop and stops with this error message.
*E319* >
Sorry, the command is not available in this version
@@ -727,6 +728,7 @@ specified.
Trailing characters
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.
*E477* *E478* >
No ! allowed

View File

@@ -1,4 +1,4 @@
*motion.txt* For Vim version 8.2. Last change: 2021 Dec 13
*motion.txt* For Vim version 8.2. Last change: 2021 Dec 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -788,6 +788,9 @@ m< or m> Set the |'<| or |'>| mark. Useful to change what the
*:k*
:[range]k{a-zA-Z'} Same as :mark, but the space before the mark name can
be omitted.
This command is not supported in |Vim9| script,
because it is too easily confused with a variable
name.
*'* *'a* *`* *`a*
'{a-z} `{a-z} Jump to the mark {a-z} in the current buffer.

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.2. Last change: 2021 Dec 21
*options.txt* For Vim version 8.2. Last change: 2022 Jan 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -369,7 +369,7 @@ value to the local value, it doesn't switch back to using the global value
This will make the local value of 'path' empty, so that the global value is
used. Thus it does the same as: >
:setlocal path=
Note: In the future more global options can be made global-local. Using
Note: In the future more global options can be made |global-local|. Using
":setlocal" on a global option might work differently then.
@@ -877,11 +877,11 @@ A jump table for the options with a short description can be found at |Q_op|.
global
Write the contents of the file, if it has been modified, on each
`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:stop`,
`:suspend`, `:tag, `:!`, ``:make`, CTRL-] and CTRL-^ command; and when
a :buffer, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
`:suspend`, `:tag`, `:!`, `:make`, CTRL-] and CTRL-^ command; and when
a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
to another file.
A buffer is not written if it becomes hidden, e.g. when 'bufhidden' is
set to "hide" and `:next` is used
set to "hide" and `:next` is used.
Note that for some commands the 'autowrite' option is not used, see
'autowriteall' for that.
Some buffers will not be written, specifically when 'buftype' is
@@ -1225,6 +1225,11 @@ A jump table for the options with a short description can be found at |Q_op|.
Vim does not try to send a message to an external debugger (Netbeans
or Sun Workshop).
If the expression starts with s: or |<SID>|, then it is replaced with
the script ID (|local-function|). Example: >
set bexpr=s:MyBalloonExpr()
set bexpr=<SID>SomeBalloonExpr()
<
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|.
This option cannot be set in a modeline when 'modelineexpr' is off.
@@ -1365,6 +1370,7 @@ A jump table for the options with a short description can be found at |Q_op|.
text should normally be narrower. This prevents
text indented almost to the right window border
occupying lot of vertical space when broken.
(default: 20)
shift:{n} After applying 'breakindent', the wrapped line's
beginning will be shifted by the given number of
characters. It permits dynamic French paragraph
@@ -2128,8 +2134,18 @@ A jump table for the options with a short description can be found at |Q_op|.
Commas can be added for readability.
To avoid problems with flags that are added in the future, use the
"+=" and "-=" feature of ":set" |add-option-flags|.
NOTE: This option is set to the Vi default value when 'compatible' is
set and to the Vim default value when 'compatible' is reset.
NOTE: In a |Vim9| script, when `vim9script` is encountered, the value
is saved, 'cpoptions' is set to the Vim default, and the saved value
is restored at the end of the script. Changes to the value of
'cpoptions' will be applied to the saved value, but keep in mind that
removing a flag that is not present when 'cpoptions' is changed has no
effect. In the |.vimrc| file the value is not restored, thus using
`vim9script` in the |.vimrc| file results in using the Vim default.
NOTE: This option is set to the POSIX default value at startup when
the Vi default value would be used and the $VIM_POSIX environment
variable exists |posix|. This means Vim tries to behave like the
@@ -3596,6 +3612,11 @@ A jump table for the options with a short description can be found at |Q_op|.
When the expression evaluates to non-zero Vim will fall back to using
the internal format mechanism.
If the expression starts with s: or |<SID>|, then it is replaced with
the script ID (|local-function|). Example: >
set formatexpr=s:MyFormatExpr()
set formatexpr=<SID>SomeFormatExpr()
<
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|. That stops the option from working,
since changing the buffer text is not allowed.
@@ -4438,6 +4459,11 @@ A jump table for the options with a short description can be found at |Q_op|.
found. Allows doing "gf" on the name after an 'include' statement.
Also used for |<cfile>|.
If the expression starts with s: or |<SID>|, then it is replaced with
the script ID (|local-function|). Example: >
set includeexpr=s:MyIncludeExpr(v:fname)
set includeexpr=<SID>SomeIncludeExpr(v:fname)
<
The expression will be evaluated in the |sandbox| when set from a
modeline, see |sandbox-option|.
This option cannot be set in a modeline when 'modelineexpr' is off.
@@ -4511,6 +4537,11 @@ A jump table for the options with a short description can be found at |Q_op|.
The expression is evaluated with |v:lnum| set to the line number for
which the indent is to be computed. The cursor is also in this line
when the expression is evaluated (but it may be moved around).
If the expression starts with s: or |<SID>|, then it is replaced with
the script ID (|local-function|). Example: >
set indentexpr=s:MyIndentExpr()
set indentexpr=<SID>SomeIndentExpr()
<
The expression must return the number of spaces worth of indent. It
can return "-1" to keep the current indent (this means 'autoindent' is
used for the indent).
@@ -6654,6 +6685,8 @@ A jump table for the options with a short description can be found at |Q_op|.
Don't include both "curdir" and "sesdir".
When neither "curdir" nor "sesdir" is included, file names are stored
with absolute paths.
If you leave out "options" many things won't work well after restoring
the session.
"slash" and "unix" are useful on Windows when sharing session files
with Unix. The Unix version of Vim cannot source dos format scripts,
but the Windows version of Vim can source unix format scripts.
@@ -8096,7 +8129,7 @@ A jump table for the options with a short description can be found at |Q_op|.
another default. Backticks cannot be used in this option for security
reasons.
*'thesaurusfunc'* *tsrfu'*
*'thesaurusfunc'* *'tsrfu'*
'thesaurusfunc' 'tsrfu' string (default: empty)
global or local to buffer |global-local|
{not available when compiled without the |+eval|

View File

@@ -342,12 +342,12 @@ PowerShell Execution Policy settings.
See |option-backslash| about including spaces in 'shellcmdflag' when using
multiple flags.
The 'shellpipe' and 'shellredir' option values re-encode the UTF-16le output
The 'shellpipe' and 'shellredir' option values re-encode the UTF-16LE output
from PowerShell Desktop to your currently configured console codepage. The
output can be forced into a different encoding by changing "default" to one of
the following:
unicode - UTF-16le (default output from PowerShell 5.1)
unicode - UTF-16LE (default output from PowerShell 5.1)
bigendianunicode - UTF-16
utf8 - UTF-8
utf7 - UTF-7 (no BOM)
@@ -356,7 +356,7 @@ the following:
default - System's active code page (typically ANSI)
oem - System's current OEM code page
Note The abovce multi-byte Unicode encodings include a leading BOM unless
Note The above multi-byte Unicode encodings include a leading BOM unless
otherwise indicated.
By default PowerShell Core's output is UTF-8 encoded without a BOM. If you
@@ -365,10 +365,10 @@ want to force the output of PowerShell Core into a different encoding then set
encoding is one of the following:
ascii - 7-bit ASCII character set
bigendianunicode - UTF-16be
bigendianutf32 - UTF-32be
bigendianunicode - UTF-16BE
bigendianutf32 - UTF-32BE
oem - System's current OEM code page
unicode - UTF-16le
unicode - UTF-16LE
utf7 - UTF-7
utf8 - UTF-8
utf8BOM - UTF-8, with BOM

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 8.2. Last change: 2021 Jul 16
*pattern.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -315,7 +315,7 @@ the pattern.
==============================================================================
2. The definition of a pattern *search-pattern* *pattern* *[pattern]*
*regular-expression* *regexp* *Pattern*
*E76* *E383* *E476*
*E383* *E476*
For starters, read chapter 27 of the user manual |usr_27.txt|.
@@ -929,9 +929,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
\%23l Matches in a specific line.
\%<23l Matches above a specific line (lower line number).
\%>23l Matches below a specific line (higher line number).
\%.l Matches at the cursor line.
\%<.l Matches above the cursor line.
\%>.l Matches below the cursor line.
\%.l Matches at the cursor line.
\%<.l Matches above the cursor line.
\%>.l Matches below the cursor line.
These six can be used to match specific lines in a buffer. The "23"
can be any line number. The first line is 1.
WARNING: When inserting or deleting lines Vim does not automatically
@@ -950,9 +950,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
\%23c Matches in a specific column.
\%<23c Matches before a specific column.
\%>23c Matches after a specific column.
\%.c Matches at the cursor column.
\%<.c Matches before the cursor column.
\%>.c Matches after the cursor column.
\%.c Matches at the cursor column.
\%<.c Matches before the cursor column.
\%>.c Matches after the cursor column.
These six can be used to match specific columns in a buffer or string.
The "23" can be any column number. The first column is 1. Actually,
the column is the byte number (thus it's not exactly right for
@@ -976,9 +976,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
\%23v Matches in a specific virtual column.
\%<23v Matches before a specific virtual column.
\%>23v Matches after a specific virtual column.
\%.v Matches at the current virtual column.
\%<.v Matches before the current virtual column.
\%>.v Matches after the current virtual column.
\%.v Matches at the current virtual column.
\%<.v Matches before the current virtual column.
\%>.v Matches after the current virtual column.
These six can be used to match specific virtual columns in a buffer or
string. When not matching with a buffer in a window, the option
values of the current window are used (e.g., 'tabstop').
@@ -1070,6 +1070,8 @@ match ASCII characters, as indicated by the range.
\(\) A pattern enclosed by escaped parentheses. */\(* */\(\)* */\)*
E.g., "\(^a\)" matches 'a' at the start of a line.
There can only be ten of these. You can use "\%(" to add more, but
not counting it as a sub-expression.
*E51* *E54* *E55* *E872* *E873*
\1 Matches the same string that was matched by */\1* *E65*
@@ -1092,7 +1094,7 @@ x A single character, with no special meaning, matches itself
\x A backslash followed by a single character, with no special meaning,
is reserved for future expansions
[] (with 'nomagic': \[]) */[]* */\[]* */\_[]* */collection*
[] (with 'nomagic': \[]) */[]* */\[]* */\_[]* */collection* *E76*
\_[]
A collection. This is a sequence of characters enclosed in square
brackets. It matches any single character in the collection.
@@ -1488,5 +1490,4 @@ the matching positions and the fuzzy match scores.
The "f" flag of `:vimgrep` enables fuzzy matching.
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -1,4 +1,4 @@
*popup.txt* For Vim version 8.2. Last change: 2021 Nov 29
*popup.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -54,7 +54,7 @@ A popup window has a window-ID like other windows, but behaves differently.
The size can be up to the whole Vim window and it overlaps other windows.
Popup windows can also overlap each other. The "zindex" property specifies
what goes on top of what.
*E366*
The popup window contains a buffer, and that buffer is always associated with
the popup window. The window cannot be in Normal, Visual or Insert mode, it
does not get keyboard focus. You can use functions like `setbufline()` to
@@ -262,7 +262,7 @@ popup_close({id} [, {result}]) *popup_close()*
popup_create({what}, {options}) *popup_create()*
Open a popup window showing {what}, which is either:
Open a popup window showing {what}, which is either: *E450*
- a buffer number
- a string
- a list of strings

View File

@@ -174,6 +174,11 @@ an error message. In that case Vim will delete the file. In the default
value for non-MS-Windows a trick is used: Adding "v:shell_error" will result
in a non-zero number when the system() call fails.
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()
<
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: 2021 Dec 03
*quickfix.txt* For Vim version 8.2. Last change: 2022 Jan 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -244,7 +244,7 @@ processing a quickfix or location list command, it will be aborted.
[!] is not used. It works like ":qall!" |:qall|,
except that Vim returns a non-zero exit code.
*:cf* *:cfile*
*:cf* *:cfi* *:cfile*
:cf[ile][!] [errorfile] Read the error file and jump to the first error.
This is done automatically when Vim is started with
the -q option. You can use this command when you

View File

@@ -1,4 +1,4 @@
*remote.txt* For Vim version 8.2. Last change: 2019 May 05
*remote.txt* For Vim version 8.2. Last change: 2021 Dec 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -143,7 +143,7 @@ You can not put options there!
FUNCTIONS
*E240* *E573*
There are a number of Vim functions for scripting the command server. See
the description in |eval.txt| or use CTRL-] on the function name to jump to
the description in |builtin.txt| or use CTRL-] on the function name to jump to
the full explanation.
synopsis explanation ~

View File

@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 8.2. Last change: 2021 Nov 24
*repeat.txt* For Vim version 8.2. Last change: 2022 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -377,8 +377,11 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
*:scr* *:scriptnames*
:scr[iptnames] List all sourced script names, in the order they were
first sourced. The number is used for the script ID
|<SID>|.
first encountered. The number is used for the script
ID |<SID>|.
For a script that was used with `import autoload` but
was not actually sourced yet an "A" is shown after the
script ID.
{not available when compiled without the |+eval|
feature}
@@ -495,6 +498,9 @@ space at the end of a line is hard to see and may be accidentally deleted. >
\ "very long regexp"
\ keepend
In |Vim9| script the backslash can often be omitted, but not always.
See |vim9-line-continuation|.
There is a problem with the ":append" and ":insert" commands: >
:1append
\asdf

View File

@@ -1,4 +1,4 @@
*starting.txt* For Vim version 8.2. Last change: 2021 May 08
*starting.txt* For Vim version 8.2. Last change: 2022 Jan 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -560,6 +560,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
":source!". When the "scriptout" file already exists, new
characters are appended. See also |complex-repeat|.
{scriptout} cannot start with a digit.
If you want to record what is typed in a human readable for
you can use |ch_logfile()|, It adds "raw key input" lines.
*-W*
-W {scriptout} Like -w, but do not append, overwrite an existing file.

View File

@@ -1442,7 +1442,7 @@ add the following line to your startup file: >
:let g:filetype_euphoria = "euphoria4"
Elixir and Euphoria share the *.ex file extension. If the filetype is
Elixir and Euphoria share the *.ex file extension. If the filetype is
specifically set as Euphoria with the g:filetype_euphoria variable, or the
file is determined to be Euphoria based on keywords in the file, then the
filetype will be set as Euphoria. Otherwise, the filetype will default to
@@ -1473,7 +1473,7 @@ The following file extensions are auto-detected as Elixir file types:
*.ex, *.exs, *.eex, *.leex, *.lock
Elixir and Euphoria share the *.ex file extension. If the filetype is
Elixir and Euphoria share the *.ex file extension. If the filetype is
specifically set as Euphoria with the g:filetype_euphoria variable, or the
file is determined to be Euphoria based on keywords in the file, then the
filetype will be set as Euphoria. Otherwise, the filetype will default to

File diff suppressed because it is too large Load Diff

View File

@@ -39,6 +39,7 @@ If the result is "1" you have it.
Stepping through code |termdebug-stepping|
Inspecting variables |termdebug-variables|
Other commands |termdebug-commands|
Events |termdebug-events|
Prompt mode |termdebug-prompt|
Communication |termdebug-communication|
Customizing |termdebug-customizing|

View File

@@ -1,4 +1,4 @@
*testing.txt* For Vim version 8.2. Last change: 2021 Dec 11
*testing.txt* For Vim version 8.2. Last change: 2022 Jan 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -188,23 +188,25 @@ test_override({name}, {val}) *test_override()*
to run tests. Only to be used for testing Vim!
The override is enabled when {val} is non-zero and removed
when {val} is zero.
Current supported values for name are:
Current supported values for {name} are:
name effect when {val} is non-zero ~
redraw disable the redrawing() function
redraw_flag ignore the RedrawingDisabled flag
{name} effect when {val} is non-zero ~
autoload `import autoload` will load the script right
away, not postponed until an item is used
char_avail disable the char_avail() function
starting reset the "starting" variable, see below
nfa_fail makes the NFA regexp engine fail to force a
fallback to the old engine
no_query_mouse do not query the mouse position for "dec"
terminals
no_wait_return set the "no_wait_return" flag. Not restored
with "ALL".
ui_delay time in msec to use in ui_delay(); overrules a
wait time of up to 3 seconds for messages
redraw disable the redrawing() function
redraw_flag ignore the RedrawingDisabled flag
starting reset the "starting" variable, see below
term_props reset all terminal properties when the version
string is detected
ui_delay time in msec to use in ui_delay(); overrules a
wait time of up to 3 seconds for messages
uptime overrules sysinfo.uptime
ALL clear all overrides ({val} is not used)

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.2. Last change: 2021 Dec 24
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,38 +38,27 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
type of v: vars should be more specific
v:completed_item is dict<string>, not dict<any>
TODO in eval_method() for using partial.
E1135 is used twice
TODO in compile_load_scriptvar()
Try using a variable or function that is not exported
"z=" in German can take a very long time, CTRL-C should interrupt it.
"return Msg()" does not give an error if there is no return value. #9497
Vim9 - Make everything work:
- For builtin functions using tv_get_string*() use check_for_string() to be
more strict about the argument type (not a bool).
done: balloon_()
- Check many more builtin function arguments at compile time.
map() could check that the return type of the function argument matches
the type of the list or dict member. (#8092)
Same for other functions, such as searchpair().
- Test that a function defined inside a :def function is local to that
function, g: functions can be defined and script-local functions cannot be
defined.
- Unexpected error message when using "var x: any | x.key = 9", because "x" is
given the type number. Can we use VAR_ANY?
- Check performance with callgrind and kcachegrind.
eval_map_expr() in getchar.c saves stuff because "mp" can change, this does
not happen in map.c for an abbreviation. Test that this fails, fix it.
Once Vim9 is stable:
- Add the "vim9script" feature, can use has('vim9script')
- Change the help to prefer Vim9 syntax where appropriate
- Add all the error numbers in a good place in documentation.
- In the generic eval docs, point out the Vim9 syntax where it differs.
done until E653
- Use Vim9 for runtime files.
PR #7497 for autoload/ccomplete.vim
Further Vim9 improvements, possibly after launch:
- better implementation for partial and tests for that.
- Check performance with callgrind and kcachegrind.
- Better implementation for partial and tests for that.
- when using "const" mark the variable type as const with TTFLAG_CONST, so
that an error is given at compile time when trying to change it. E.g. for a
const list and trying to call add().
- Compile options that are an expression, e.g. "expr:" in 'spellsuggest',
'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
@@ -78,10 +67,9 @@ 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.
- Handle command that is only a range more efficient than calling ISN_EXEC
- implement :type, "import type"
- implement enum, "import enum".
- implement class and interface: See |vim9-classes|
- implement :enum, "import enum".
- implement :class and :interface: See |vim9-classes|
- For range: make table of first ASCII character with flag to quickly check if
it can be a Vim9 command. E.g. "+" can, but "." can't.
- Inline call to map() and filter(), better type checking.
@@ -219,6 +207,8 @@ Terminal emulator window:
When using 'cryptmethod' xchaha20 the undo file is not encrypted.
Need to handle extra bytes.
Some prompts are not translated: #9495
Test_communicate_ipv6(): is flaky on many systems
Fails in line 64 of Ch_communicate, no exception is thrown.
@@ -253,8 +243,6 @@ Idea: when typing ":e /some/dir/" and "dir" does not exist, highlight in red.
initialization to figure out the default value from 'shell'. Add a test for
this.
Patch to add :argdedupe. (Nir Lichtman, #6235)
MS-Windows: did path modifier :p:8 stop working? #8600
test_arglist func Test_all_not_allowed_from_cmdwin() hangs on MS-Windows.
@@ -918,9 +906,6 @@ With 'foldmethod' "indent" and appending an empty line, what follows isn't
included in the existing fold. Deleting the empty line and undo fixes it.
(Oleg Koshovetc, 2018 Jul 15, #3214)
Patch to support "xxd -ps". (Erik Auerswald, 2018 May 1)
Lacks a test.
Column number is wrong when using 'linebreak' and 'wrap'. (Keith Smiley, 2018
Jan 15, #2555)

View File

@@ -189,7 +189,7 @@ You can specify #rrggbb hex colors and you can define new names for hex
colors in |v:colornames| like so: >
let v:colornames['mine_red'] = '#aa0000'
<
If you are authoring a color scheme for others to use, it is important
to define these colors only when they do not exist: >
@@ -197,7 +197,7 @@ to define these colors only when they do not exist: >
This allows users of the color scheme to override the precise definition of
that color prior to loading your color scheme. For example, in a |.vimrc|
file:
file: >
runtime colors/lists/css_colors.vim
let v:colornames['your_red'] = v:colornames['css_red']

View File

@@ -1,4 +1,4 @@
*usr_40.txt* For Vim version 8.2. Last change: 2020 Sep 02
*usr_40.txt* For Vim version 8.2. Last change: 2022 Jan 03
VIM USER MANUAL - by Bram Moolenaar
@@ -20,7 +20,7 @@ Table of contents: |usr_toc.txt|
==============================================================================
*40.1* Key mapping
A simple mapping was explained in section |05.3|. The principle is that one
A simple mapping was explained in section |05.4|. The principle is that one
sequence of key strokes is translated into another sequence of key strokes.
This is a simple, yet powerful mechanism.
The simplest form is that one key is mapped to a sequence of keys. Since

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
*various.txt* For Vim version 8.2. Last change: 2021 Dec 20
*various.txt* For Vim version 8.2. Last change: 2022 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -244,10 +244,10 @@ g8 Print the hex values of the bytes used in the
compiler will have set stdin to a non-interactive
mode.
*:!cmd* *:!* *E34*
*:!cmd* *:!*
:!{cmd} Execute {cmd} with the shell. See also the 'shell'
and 'shelltype' option.
*E34*
Any '!' in {cmd} is replaced with the previous
external command (see also 'cpoptions'). But not when
there is a backslash before the '!', then that
@@ -476,9 +476,10 @@ N *+toolbar* |gui-toolbar|
T *+user_commands* User-defined commands. |user-commands|
Always enabled since 8.1.1210.
B *+vartabs* Variable-width tabstops. |'vartabstop'|
N *+viminfo* |'viminfo'|
T *+vertsplit* Vertically split windows |:vsplit|; Always enabled
since 8.0.1118.
T *+vim9script* |Vim9| script
N *+viminfo* |'viminfo'|
T *+virtualedit* |'virtualedit'| Always enabled since 8.1.826.
T *+visual* Visual mode |Visual-mode| Always enabled since 7.4.200.
T *+visualextra* extra Visual mode commands |blockwise-operators|
@@ -569,19 +570,19 @@ N *+X11* Unix only: can restore window title |X11|
:redi[r] END End redirecting messages.
*:filt* *:filter*
:filt[er][!] {pat} {command}
:filt[er][!] /{pat}/ {command}
:filt[er][!] {pattern} {command}
:filt[er][!] /{pattern}/ {command}
Restrict the output of {command} to lines matching
with {pat}. For example, to list only xml files: >
with {pattern}. For example, to list only xml files: >
:filter /\.xml$/ oldfiles
< If the [!] is given, restrict the output of {command}
to lines that do NOT match {pat}.
to lines that do NOT match {pattern}.
{pat} is a Vim search pattern. Instead of enclosing
{pattern} is a Vim search pattern. Instead of enclosing
it in / any non-ID character (see |'isident'|) can be
used, so long as it does not appear in {pat}. Without
the enclosing character the pattern cannot include the
bar character. 'ignorecase' is not used.
used, so long as it does not appear in {pattern}.
Without the enclosing character the pattern cannot
include the bar character. 'ignorecase' is not used.
The pattern is matched against the relevant part of
the output, not necessarily the whole line. Only some

View File

@@ -166,7 +166,7 @@ Note: "+" と "\-c" は合わせて 10 個まで指定できます。
.TP
\-d
差分モードで起動します。
二つか三つの四つのファイルを引数に指定してください。
2 個から 8 個のファイルを引数に指定してください。
指定されたファイルが開かれ、それらのファイルの差分が表示されます。
vimdiff(1) と同様の動作です。
.TP
@@ -217,8 +217,7 @@ GUI がサポートされている場合は、GUI で起動します。
サポートされていない場合はエラーメッセージを表示して終了します。
.TP
\-i {viminfo}
viminfo ファイルを使う設定になっている場合は、初期設定の "~/.viminfo"
の代わりに、指定されたファイルを設定します。
初期設定の "~/.viminfo" の代わりに、viminfo ファイルを読み書きする際に使うファイル名を指定します。
"NONE" を指定すると、.viminfo ファイルを使わないように設定できます。
.TP
\-L
@@ -356,6 +355,10 @@ X サーバーと通信しません。端末での起動時間を短くできま
これ以降の引数はすべてファイル名として扱われます。
ファイル名が '\-' で始まっているファイルを開くときに使ってください。
.TP
\-\-clean
一切の個人設定 (vimrc、プラグイン、その他) を使用しません。
ある問題がクリーンな Vim セットアップで再現するかを確認するのに有用です。
.TP
\-\-echo\-wid
GTK GUI のみ: Window ID を標準出力に出力します。
.TP
@@ -398,6 +401,9 @@ Vim サーバーの一覧を表示します。
\-\-socketid {id}
GTK GUI のみ: GtkPlug メカニズムを使って gvim を別のウィンドウの中で実行します。
.TP
\-\-startuptime {file}
起動処理の間、経過時間のメッセージをファイル {fname} に書き出します。
.TP
\-\-version
バージョン情報を表示して終了します。
.SH オンラインヘルプ

View File

@@ -1,17 +1,14 @@
*vim9.txt* For Vim version 8.2. Last change: 2021 Dec 22
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 18
VIM REFERENCE MANUAL by Bram Moolenaar
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
Vim9 script commands and expressions. *Vim9* *vim9*
Most expression help is in |eval.txt|. This file is about the new syntax and
features in Vim9 script.
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
1. What is Vim9 script? |Vim9-script|
@@ -27,8 +24,6 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
1. What is Vim9 script? *Vim9-script*
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
Vim script has been growing over time, while preserving backwards
compatibility. That means bad choices from the past often can't be changed
and compatibility with Vi restricts possible solutions. Execution is quite
@@ -76,8 +71,6 @@ rewrite old scripts, they keep working as before. You may want to use a few
2. Differences from legacy Vim script *vim9-differences*
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
Overview ~
Brief summary of the differences you will most often encounter when using Vim9
@@ -88,7 +81,7 @@ script and `:def` functions; details are below:
echo "hello "
.. yourName
.. ", how are you?"
- White space is required in many places.
- White space is required in many places to improve readability.
- Assign values without `:let`, declare variables with `:var`: >
var count = 0
count += 3
@@ -101,8 +94,8 @@ script and `:def` functions; details are below:
def CallMe(count: number, message: string): bool
- Call functions without `:call`: >
writefile(['done'], 'file.txt')
- You cannot use `:xit`, `:t`, `:k`, `:append`, `:change`, `:insert`, `:open`,
and `:s` or `:d` with only flags.
- You cannot use old Ex commands `:xit`, `:t`, `:k`, `:append`, `:change`,
`:insert`, `:open`, and `:s` or `:d` with only flags.
- You cannot use curly-braces names.
- A range before a command must be prefixed with a colon: >
:%s/this/that
@@ -110,6 +103,8 @@ script and `:def` functions; details are below:
`:exe`: >
:exe @a
- Unless mentioned specifically, the highest |scriptversion| is used.
- When defining an expression mapping, the expression will be evaluated in the
context of the script where it was defined.
Comments starting with # ~
@@ -127,7 +122,7 @@ is the same as in shell scripts and Python programs.
In Vi # is a command to list text with numbers. In Vim9 script you can use
`:number` for that. >
101 number
:101 number
To improve readability there must be a space between a command and the #
that starts a comment: >
@@ -354,11 +349,13 @@ And with autocommands: >
Although using a :def function probably works better.
Declaring a variable with a type but without an initializer will initialize to
zero, false or empty.
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
default to the number zero.
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. They can also be deleted
variables, because they are not really declared. Those can also be deleted
with `:unlet`.
`:lockvar` does not work on local variables. Use `:const` and `:final`
@@ -396,8 +393,8 @@ later. Example: >
endif
enddef
If you would do it like this you get an error at compile time that
"PluginFunc" does not exist, even when "g:loaded_plugin" does not exist: >
If you do it like this, you get an error at compile time that "PluginFunc"
does not exist, even when "g:loaded_plugin" does not exist: >
def CallPluginFunc()
if exists('g:loaded_plugin')
PluginFunc() # Error - function not found
@@ -602,7 +599,7 @@ Also when confused with the start of a command block: >
Automatic line continuation ~
*vim9-line-continuation*
In many cases it is obvious that an expression continues on the next line. In
those cases there is no need to prefix the line with a backslash (see
|line-continuation|). For example, when a list spans multiple lines: >
@@ -780,7 +777,7 @@ No curly braces expansion ~
Dictionary literals ~
*vim9-literal-dict*
Traditionally Vim has supported dictionary literals with a {} syntax: >
let dict = {'key': value}
@@ -870,7 +867,7 @@ first if needed.
Conditions and expressions ~
*vim9-boolean*
Conditions and expressions are mostly working like they do in other languages.
Some values are different from legacy Vim script:
value legacy Vim script Vim9 script ~
@@ -922,8 +919,8 @@ always converted to string: >
'hello ' .. 123 == 'hello 123'
'hello ' .. v:true == 'hello true'
Simple types are string, float, special and bool. For other types |string()|
can be used.
Simple types are Number, Float, Special and Bool. For other types |string()|
should be used.
*false* *true* *null*
In Vim9 script one can use "true" for v:true, "false" for v:false and "null"
for v:null. When converting a boolean to a string "false" and "true" are
@@ -1067,8 +1064,6 @@ Using ++var or --var in an expression is not supported yet.
3. New style functions *fast-functions*
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
*:def*
:def[!] {name}([arguments])[: {return-type}]
Define a new function by the name {name}. The body of
@@ -1184,8 +1179,6 @@ for each closure call a function to define it: >
4. Types *vim9-types*
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
The following builtin types are supported:
bool
number
@@ -1366,14 +1359,20 @@ Same for |extend()|, use |extendnew()| instead, and for |flatten()|, use
5. Namespace, Import and Export
*vim9script* *vim9-export* *vim9-import*
THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
A Vim9 script can be written to be imported. This means that some items are
intentionally exported, made available to other scripts. When the exporting
script is imported in another script, these exported items can then be used in
that script. All the other items remain script-local in the exporting script
and cannot be accessed by the importing script.
A Vim9 script can be written to be imported. This means that everything in
the script is local, unless exported. Those exported items, and only those
items, can then be imported in another script.
This mechanism exists for writing a script that can be sourced (imported) by
other scripts, while making sure these other scripts only have access to what
you want them to. This also avoids using the global namespace, which has a
risc of name collisions. For example when you have two plugins with similar
functionality.
You can cheat by using the global namespace explicitly. We will assume here
that you don't do that.
You can cheat by using the global namespace explicitly. That should be done
only for things that really are global.
Namespace ~
@@ -1402,6 +1401,7 @@ One of the effects is that |line-continuation| is always enabled.
The original value of 'cpoptions' is restored at the end of the script, while
flags added or removed in the script are also added to or removed from the
original value to get the same effect. The order of flags may change.
In the |vimrc| file sourced on startup this does not happen.
*vim9-mix*
There is one way to use both legacy and Vim9 syntax in one script file: >
@@ -1421,9 +1421,6 @@ This can only work in two ways:
2. The "if" statement evaluates to true, the commands up to `endif` are
executed and `finish` bails out before reaching `vim9script`.
TODO: The "vim9script" feature does not exist yet, it will only be added once
the Vim9 script syntax has been fully implemented.
Export ~
*:export* *:exp*
@@ -1445,24 +1442,29 @@ be exported. {not implemented yet: class, interface}
Import ~
*:import* *:imp* *E1094*
The exported items can be imported individually in another Vim9 script: >
import EXPORTED_CONST from "thatscript.vim"
import MyClass from "myclass.vim"
The exported items can be imported in another Vim9 script: >
import "myscript.vim"
To import multiple items at the same time: >
import {someValue, MyClass} from "thatscript.vim"
This makes each item available as "myscript.item".
In case the name is ambiguous, another name can be specified: >
import MyClass as ThatClass from "myclass.vim"
import {someValue, MyClass as ThatClass} from "myclass.vim"
In case the name is long or ambiguous, another name can be specified: >
import "thatscript.vim" as that
To import all exported items under a specific identifier: >
import * as That from 'thatscript.vim'
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.
Then you can use "That.EXPORTED_CONST", "That.someValue", etc. You are free
to choose the name "That", but it is highly recommended to use the name of the
script file to avoid confusion. Also avoid command names, because the name
will shadow them.
In case the dot in the name is undesired, a local reference can be made for a
function: >
var LongFunc = that.LongFuncName
This also works for constants: >
const MAXLEN = that.MAX_LEN_OF_NAME
This does not work for variables, since the value would be copied once and
when changing the variable the copy will change, not the original variable.
You will need to use the full name, with the dot.
`:import` can also be used in legacy Vim script. The imported items still
become script-local, even when the "s:" prefix is not given.
@@ -1481,53 +1483,86 @@ The script name after `import` can be:
longer and unique, to avoid loading the wrong file.
Note that "after/import" is not used.
If the name does not end in ".vim" then the use of "as name" is required.
Once a vim9 script file has been imported, the result is cached and used the
next time the same script is imported. It will not be read again.
*:import-cycle*
It is not allowed to import the same script twice, also when using two
different "as" names.
When using the imported name the dot and the item name must be in the same
line, there can be no line break: >
echo that.
name # Error!
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.
Import in an autoload script ~
Importing an autoload script ~
*vim9-autoload*
For optimal startup speed, loading scripts should be postponed until they are
actually needed. A recommended mechanism:
actually needed. Using the autoload mechanism is recommended:
1. In the plugin define user commands, functions and/or mappings that refer to
an autoload script. >
command -nargs=1 SearchForStuff searchfor#Stuff(<f-args>)
items imported from an autoload script. >
import autoload 'for/search.vim'
command -nargs=1 SearchForStuff search.Stuff(<f-args>)
< This goes in .../plugin/anyname.vim. "anyname.vim" can be freely chosen.
The "SearchForStuff" command is now available to the user.
2. In the autoload script do the actual work. You can import items from
other files to split up functionality in appropriate pieces. >
The "autoload" argument to `:import` means that the script is not loaded
until one of the items is actually used. The script will be found under
the "autoload" directory in 'runtimepath' instead of the "import"
directory.
2. In the autoload script put the bulk of the code. >
vim9script
import FilterFunc from "../import/someother.vim"
def searchfor#Stuff(arg: string)
var filtered = FilterFunc(arg)
export def Stuff(arg: string)
...
< This goes in .../autoload/searchfor.vim. "searchfor" in the file name
must be exactly the same as the prefix for the function name, that is how
Vim finds the file.
3. Other functionality, possibly shared between plugins, contains the exported
items and any private items. >
vim9script
var localVar = 'local'
export def FilterFunc(arg: string): string
...
< This goes in .../import/someother.vim.
< This goes in .../autoload/for/search.vim.
Putting the "search.vim" script under the "/autoload/for/" directory has
the effect that "for#search#" will be prefixed to every exported item. The
prefix is obtained from the file name, as you would to manually in a
legacy autoload script. Thus the exported function can be found with
"for#search#Stuff", but you would normally use `import autoload` and not
use the prefix.
You can split up the functionality and import other scripts from the
autoload script as you like. This way you can share code between plugins.
For defining a mapping that uses the imported autoload script the special key
|<ScriptCmd>| is useful. It allows for a command in a mapping to use the
script context of where the mapping was defined.
When compiling a `:def` function and a function in an autoload script is
encountered, the script is not loaded until the `:def` function is called.
This also means you get any errors only at runtime, since the argument and
return types are not known yet.
For testing the |test_override()| function can be used to have the
`import autoload` load the script right away, so that the items and types can
be checked without waiting for them to be actually used: >
test_override('autoload', 1)
Reset it later with: >
test_override('autoload', 0)
Or: >
test_override('ALL', 0)
Import in legacy Vim script ~
If an `import` statement is used in legacy Vim script, the script-local "s:"
namespace will be used for the imported item, even when "s:" is not specified.
namespace will be used for the imported items, even when "s:" is not
specified.
==============================================================================
@@ -1681,7 +1716,8 @@ Specific items from TypeScript we avoid:
- TypeScript can use an expression like "99 || 'yes'" in a condition, but
cannot assign the value to a boolean. That is inconsistent and can be
annoying. Vim recognizes an expression with && or || and allows using the
result as a bool. TODO: to be reconsidered
result as a bool. The |falsy-operator| was added for the mechanism to use a
default value.
- TypeScript considers an empty string as Falsy, but an empty list or dict as
Truthy. That is inconsistent. In Vim an empty list and dict are also
Falsy.

View File

@@ -1,15 +1,15 @@
.TH VIMDIFF 1 "2001 March 30"
.SH 名前
vimdiff \- 二つか三つか四つのファイルを Vim で開いて、その差分を表示する
vimdiff \- 2 個から 8 個のファイルを Vim で開いて、その差分を表示する
.SH 書式
.br
.B vimdiff
[options] file1 file2 [file3 [file4]]
[options] file1 file2 [file3 [file4 [file5 [file6 [file7 [file8]]]]]]
.PP
.B gvimdiff
.SH 説明
.B Vimdiff
は、二つ (か三つか四つ) のファイルを
は、2 個から 8 個のファイルを
.B Vim
で開きます。
ファイルは個別のウィンドウで開かれ、差分が強調表示されます。

View File

@@ -1,4 +1,4 @@
*windows.txt* For Vim version 8.2. Last change: 2021 Nov 29
*windows.txt* For Vim version 8.2. Last change: 2022 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -146,7 +146,7 @@ highlight group (|hl-EndOfBuffer|) can be used to change the highlighting of
the filler characters.
==============================================================================
3. Opening and closing a window *opening-window* *E36*
3. Opening and closing a window *opening-window*
CTRL-W s *CTRL-W_s*
CTRL-W S *CTRL-W_S*
@@ -246,6 +246,10 @@ CTRL-W : Does the same as typing |:| - enter a command line. Useful in a
Note that the 'splitbelow' and 'splitright' options influence where a new
window will appear.
*E36*
Creating a window will fail if there is not enough room. Every window needs
at least one screen line and column, sometimes more. Options 'winminheight'
and 'winminwidth' are relevant.
*:vert* *:vertical*
:vert[ical] {cmd}

View File

@@ -74,6 +74,7 @@
一行
.RI < cols >
オクテットで出力する。標準設定は 16 (\-i: 12, \-ps: 30, \-b: 6)。最大 256。
\-ps には最大値がありません。 \-ps 付きの場合、0 を指定すると単一の長い行で出力されます。
.TP
.IR \-C " | " \-capitalize
\-i を使用した際に、C インクルードファイル形式の変数名を大文字にする。

View File

@@ -70,6 +70,7 @@ followed by an ascii (or ebcdic) representation. The command line switches
Format
.RI < cols >
octets per line. Default 16 (\-i: 12, \-ps: 30, \-b: 6). Max 256.
No maxmimum for \-ps. With \-ps, 0 results in one long line of output.
.TP
.IR \-C " | " \-capitalize
Capitalize variable names in C include file style, when using \-i.

View File

@@ -42,7 +42,8 @@ OPTIONS
-c cols | -cols cols
Format <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b:
6). Max 256.
6). Max 256. No maxmimum for -ps. With -ps, 0 results in one
long line of output.
-C | -capitalize
Capitalize variable names in C include file style, when using

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2021 Dec 22
" Last Change: 2022 Jan 13
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -397,6 +397,7 @@ au BufNewFile,BufRead configure.in,configure.ac setf config
au BufNewFile,BufRead *.cu,*.cuh setf cuda
" Dockerfile; Podman uses the same syntax with name Containerfile
" Also see Dockerfile.* below.
au BufNewFile,BufRead Containerfile,Dockerfile,*.Dockerfile setf dockerfile
" WildPackets EtherPeek Decoder
@@ -496,7 +497,7 @@ au BufNewFile,BufRead */debian/patches/* call dist#ft#Dep3patch()
" Diff files
au BufNewFile,BufRead *.diff,*.rej setf diff
au BufNewFile,BufRead *.patch
\ if getline(1) =~ '^From [0-9a-f]\{40\} Mon Sep 17 00:00:00 2001$' |
\ if getline(1) =~# '^From [0-9a-f]\{40,\} Mon Sep 17 00:00:00 2001$' |
\ setf gitsendemail |
\ else |
\ setf diff |
@@ -675,6 +676,7 @@ autocmd BufRead,BufNewFile *.gift setf gift
" Git
au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
au BufNewFile,BufRead NOTES_EDITMSG,EDIT_DESCRIPTION setf gitcommit
au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig setf gitconfig
au BufNewFile,BufRead */.config/git/config setf gitconfig
au BufNewFile,BufRead .gitmodules,*.git/modules/*/config setf gitconfig
@@ -683,12 +685,8 @@ if !empty($XDG_CONFIG_HOME)
endif
au BufNewFile,BufRead git-rebase-todo setf gitrebase
au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
au BufNewFile,BufRead .msg.[0-9]*
\ if getline(1) =~ '^From.*# This line is ignored.$' |
\ setf gitsendemail |
\ endif
au BufNewFile,BufRead *.git/*
\ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
\ if getline(1) =~# '^\x\{40,\}\>\|^ref: ' |
\ setf git |
\ endif
@@ -962,9 +960,9 @@ au BufNewFile,BufRead lilo.conf setf lilo
" Lisp (*.el = ELisp, *.cl = Common Lisp)
" *.jl was removed, it's also used for Julia, better skip than guess wrong.
if has("fname_case")
au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.L,.emacs,.sawfishrc setf lisp
au BufNewFile,BufRead *.lsp,*.lisp,*.asd,*.el,*.cl,*.L,.emacs,.sawfishrc setf lisp
else
au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,.emacs,.sawfishrc setf lisp
au BufNewFile,BufRead *.lsp,*.lisp,*.asd,*.el,*.cl,.emacs,.sawfishrc setf lisp
endif
" SBCL implementation of Common Lisp
@@ -1216,6 +1214,9 @@ au BufNewFile,BufRead *.xom,*.xin setf omnimark
" OPAM
au BufNewFile,BufRead opam,*.opam,*.opam.template setf opam
" OpenFOAM
au BufNewFile,BufRead [a-zA-Z0-9]*Dict\(.*\)\=,[a-zA-Z]*Properties\(.*\)\=,*Transport\(.*\),fvSchemes,fvSolution,fvConstrains,fvModels,*/constant/g,*/0\(\.orig\)\=/* call dist#ft#FTfoam()
" OpenROAD
au BufNewFile,BufRead *.or setf openroad
@@ -1668,7 +1669,7 @@ au BufNewFile,BufRead .zshrc,.zshenv,.zlogin,.zlogout,.zcompdump setf zsh
au BufNewFile,BufRead *.zsh setf zsh
" Scheme
au BufNewFile,BufRead *.scm,*.ss,*.rkt,*.rktd,*.rktl setf scheme
au BufNewFile,BufRead *.scm,*.ss,*.sld,*.rkt,*.rktd,*.rktl setf scheme
" Screen RC
au BufNewFile,BufRead .screenrc,screenrc setf screen
@@ -1777,8 +1778,8 @@ au BufNewFile,BufRead *.sqr,*.sqi setf sqr
au BufNewFile,BufRead *.nut setf squirrel
" OpenSSH configuration
au BufNewFile,BufRead ssh_config,*/.ssh/config setf sshconfig
au BufNewFile,BufRead */etc/ssh/ssh_config.d/*.conf setf sshconfig
au BufNewFile,BufRead ssh_config,*/.ssh/config,*/.ssh/*.conf setf sshconfig
au BufNewFile,BufRead */etc/ssh/ssh_config.d/*.conf setf sshconfig
" OpenSSH server configuration
au BufNewFile,BufRead sshd_config setf sshdconfig
@@ -2238,6 +2239,9 @@ au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/* call s:StarSetf('crontab
" dnsmasq(8) configuration
au BufNewFile,BufRead */etc/dnsmasq.d/* call s:StarSetf('dnsmasq')
" Dockerfile
au BufNewFile,BufRead Dockerfile.*,Containerfile.* call s:StarSetf('dockerfile')
" Dracula
au BufNewFile,BufRead drac.* call s:StarSetf('dracula')
@@ -2282,6 +2286,9 @@ au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig')
" Lilo: Linux loader
au BufNewFile,BufRead lilo.conf* call s:StarSetf('lilo')
" Libsensors
au BufNewFile,BufRead */etc/sensors.d/[^.]* call s:StarSetf('sensors')
" Logcheck
au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck')

View File

@@ -1,41 +0,0 @@
" Vim filetype plugin
" Language: generic git output
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2019 Dec 05
" Only do this when not done yet for this buffer
if (exists("b:did_ftplugin"))
finish
endif
let b:did_ftplugin = 1
if !exists('b:git_dir')
if expand('%:p') =~# '[\/]\.git[\/]modules[\/]\|:[\/][\/]\|^\a\a\+:'
" Stay out of the way
elseif expand('%:p') =~# '[\/]\.git[\/]worktrees'
let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>')
elseif expand('%:p') =~# '\.git\>'
let b:git_dir = matchstr(expand('%:p'),'.*\.git\>')
elseif $GIT_DIR != ''
let b:git_dir = $GIT_DIR
endif
if (has('win32') || has('win64')) && exists('b:git_dir')
let b:git_dir = substitute(b:git_dir,'\\','/','g')
endif
endif
if exists('*shellescape') && exists('b:git_dir') && b:git_dir != ''
if b:git_dir =~# '/\.git$' " Not a bare repository
let &l:path = escape(fnamemodify(b:git_dir,':h'),'\, ').','.&l:path
endif
let &l:path = escape(b:git_dir,'\, ').','.&l:path
let &l:keywordprg = 'git --git-dir='.shellescape(b:git_dir).' show'
else
setlocal keywordprg=git\ show
endif
if has('gui_running')
let &l:keywordprg = substitute(&l:keywordprg,'^git\>','git --no-pager','')
endif
setlocal includeexpr=substitute(v:fname,'^[^/]\\+/','','')
let b:undo_ftplugin = "setl keywordprg< path< includeexpr<"

View File

@@ -1,66 +1,57 @@
" Vim filetype plugin
" Language: git commit file
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2019 Dec 05
" Last Change: 2022 Jan 05
" Only do this when not done yet for this buffer
if (exists("b:did_ftplugin"))
finish
endif
runtime! ftplugin/git.vim
let b:did_ftplugin = 1
setlocal comments=:# commentstring=#\ %s
setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72
setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q formatoptions+=n
setlocal formatlistpat+=\\\|^\\s*[-*+]\\s\\+
setlocal include=^+++
setlocal includeexpr=substitute(v:fname,'^[bi]/','','')
let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms< formatlistpat<'
let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms< formatlistpat< inc< inex<'
if exists("g:no_gitcommit_commands") || v:version < 700
let s:l = search('\C\m^[#;@!$%^&|:] -\{24,\} >8 -\{24,\}$', 'cnW', '', 100)
let &l:comments = ':' . (matchstr(getline(s:l ? s:l : '$'), '^[#;@!$%^&|:]\S\@!') . '#')[0]
let &l:commentstring = &l:comments[1] . ' %s'
unlet s:l
if exists("g:no_gitcommit_commands")
finish
endif
if !exists("b:git_dir")
let b:git_dir = expand("%:p:h")
endif
command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0, <f-args>)
let b:undo_ftplugin = b:undo_ftplugin . "|delc DiffGitCached"
function! s:diffcomplete(A,L,P)
function! s:diffcomplete(A, L, P) abort
let args = ""
if a:P <= match(a:L." -- "," -- ")+3
let args = args . "-p\n--stat\n--shortstat\n--summary\n--patch-with-stat\n--no-renames\n-B\n-M\n-C\n"
end
if exists("b:git_dir") && a:A !~ '^-'
let tree = fnamemodify(b:git_dir,':h')
if strpart(getcwd(),0,strlen(tree)) == tree
let args = args."\n".system("git diff --cached --name-only")
endif
if a:A !~ '^-' && !empty(getftype('.git'))
let args = args."\n".system("git diff --cached --name-only")
endif
return args
endfunction
function! s:gitdiffcached(bang,gitdir,...)
let tree = fnamemodify(a:gitdir,':h')
function! s:gitdiffcached(bang, ...) abort
let name = tempname()
let git = "git"
if strpart(getcwd(),0,strlen(tree)) != tree
let git .= " --git-dir=".(exists("*shellescape") ? shellescape(a:gitdir) : '"'.a:gitdir.'"')
endif
if a:0
let extra = join(map(copy(a:000),exists("*shellescape") ? 'shellescape(v:val)' : "'\"'.v:val.'\"'"))
let extra = join(map(copy(a:000), 'shellescape(v:val)'))
else
let extra = "-p --stat=".&columns
endif
call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
call system("git diff --cached --no-color --no-ext-diff ".extra." > ".shellescape(name))
exe "pedit " . fnameescape(name)
wincmd P
let b:git_dir = a:gitdir
command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
nnoremap <buffer> <silent> q :q<CR>
command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0, <f-args>)
setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
endfunction

View File

@@ -1,22 +1,20 @@
" Vim filetype plugin
" Language: git rebase --interactive
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2019 Dec 05
" Last Change: 2022 Jan 05
" Only do this when not done yet for this buffer
if (exists("b:did_ftplugin"))
finish
endif
runtime! ftplugin/git.vim
let b:did_ftplugin = 1
setlocal comments=:# commentstring=#\ %s formatoptions-=t
let &l:comments = ':' . (matchstr(getline('$'), '^[#;@!$%^&|:]\S\@!') . '#')[0]
let &l:commentstring = &l:comments[1] . ' %s'
setlocal formatoptions-=t
setlocal nomodeline
if !exists("b:undo_ftplugin")
let b:undo_ftplugin = ""
endif
let b:undo_ftplugin = b:undo_ftplugin."|setl com< cms< fo< ml<"
let b:undo_ftplugin = "setl com< cms< fo< ml<"
function! s:choose(word) abort
s/^\(\w\+\>\)\=\(\s*\)\ze\x\{4,40\}\>/\=(strlen(submatch(1)) == 1 ? a:word[0] : a:word) . substitute(submatch(2),'^$',' ','')/e
@@ -41,8 +39,7 @@ if exists("g:no_plugin_maps") || exists("g:no_gitrebase_maps")
finish
endif
nnoremap <buffer> <expr> K col('.') < 7 && expand('<Lt>cword>') =~ '\X' && getline('.') =~ '^\w\+\s\+\x\+\>' ? 'wK' : 'K'
nnoremap <buffer> <silent> <C-A> :<C-U><C-R>=v:count1<CR>Cycle<CR>
nnoremap <buffer> <silent> <C-X> :<C-U><C-R>=v:count1<CR>Cycle!<CR>
let b:undo_ftplugin = b:undo_ftplugin . "|exe 'nunmap <buffer> K'|exe 'nunmap <buffer> <C-A>'|exe 'nunmap <buffer> <C-X>'"
let b:undo_ftplugin = b:undo_ftplugin . "|exe 'nunmap <buffer> <C-A>'|exe 'nunmap <buffer> <C-X>'"

View File

@@ -2,7 +2,7 @@
"
" Author: Bram Moolenaar
" Copyright: Vim license applies, see ":help license"
" Last Change: 2021 Dec 16
" Last Change: 2022 Jan 13
"
" WORK IN PROGRESS - Only the basics work
" Note: On MS-Windows you need a recent version of gdb. The one included with
@@ -147,7 +147,7 @@ func s:StartDebug_internal(dict)
if &columns < g:termdebug_wide
let s:save_columns = &columns
let &columns = g:termdebug_wide
" If we make the Vim window wider, use the whole left halve for the debug
" If we make the Vim window wider, use the whole left half for the debug
" windows.
let s:allleft = 1
endif
@@ -426,7 +426,7 @@ func s:StartDebug_prompt(dict)
call s:SendCommand('set env COLORS = ' . &t_Co)
call s:SendCommand('set env VIM_TERMINAL = ' . v:version)
else
" TODO: open a new terminal get get the tty name, pass on to gdb
" TODO: open a new terminal, get the tty name, pass on to gdb
call s:SendCommand('show inferior-tty')
endif
call s:SendCommand('set print pretty on')
@@ -1067,10 +1067,10 @@ func s:GetEvaluationExpression(range, arg)
return expr
endfunc
" clean up expression that may got in because of range
" clean up expression that may get in because of range
" (newlines and surrounding whitespace)
" As it can also be specified via ex-command for assignments this function
" may not change the "content" parts (like replacing contained spaces
" may not change the "content" parts (like replacing contained spaces)
func s:CleanupExpr(expr)
" replace all embedded newlines/tabs/...
let expr = substitute(a:expr, '\_s', ' ', 'g')
@@ -1099,7 +1099,7 @@ func s:HandleEvaluate(msg)
\ ->substitute('.*value="\(.*\)"', '\1', '')
\ ->substitute('\\"', '"', 'g')
\ ->substitute('\\\\', '\\', 'g')
"\ multi-byte characters arrive in octal form, replace everthing but NULL values
"\ multi-byte characters arrive in octal form, replace everything but NULL values
\ ->substitute('\\000', s:NullRepl, 'g')
\ ->substitute('\\\o\o\o', {-> eval('"' .. submatch(0) .. '"')}, 'g')
"\ Note: GDB docs also mention hex encodings - the translations below work
@@ -1252,8 +1252,17 @@ func s:HandleCursor(msg)
if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
if lnum =~ '^[0-9]*$'
call s:GotoSourcewinOrCreateIt()
call s:GotoSourcewinOrCreateIt()
if expand('%:p') != fnamemodify(fname, ':p')
augroup Termdebug
" Always open a file read-only instead of showing the ATTENTION
" prompt, since we are unlikely to want to edit the file.
" The file may be changed but not saved, warn for that.
au SwapExists * echohl WarningMsg
\ | echo 'Warning: file is being edited elsewhere'
\ | echohl None
\ | let v:swapchoice = '0'
augroup END
if &modified
" TODO: find existing window
exe 'split ' . fnameescape(fname)
@@ -1262,6 +1271,9 @@ func s:HandleCursor(msg)
else
exe 'edit ' . fnameescape(fname)
endif
augroup Termdebug
au! SwapExists
augroup END
endif
exe lnum
normal! zv

View File

@@ -384,7 +384,7 @@ else
set ft=scheme
" Git output
elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40,\}\>\|^tag \S\+$'
set ft=git
" Gprof (gnu profiler)
@@ -406,6 +406,12 @@ else
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

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: generic git output
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2019 Dec 05
" Last Change: 2022 Jan 05
if exists("b:current_syntax")
finish
@@ -12,12 +12,28 @@ syn sync minlines=50
syn include @gitDiff syntax/diff.vim
syn region gitHead start=/\%^/ end=/^$/
syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
" For git reflog and git show ...^{tree}, avoid sync issues
syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
syn match gitHead /^\x\{40\} \x\{40}\t.*/
syn region gitHead start=/\%^\%(tag \|tree \|object \)\@=/ end=/^$/ contains=@NoSpell
syn region gitHead start=/\%(^commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ contains=@NoSpell
" git log --oneline
" minimize false positives by verifying contents of buffer
if getline(1) =~# '^\x\{7,\} ' && getline('$') =~# '^\x\{7,\} '
syn match gitHashAbbrev /^\x\{7,\} \@=/ contains=@NoSpell
elseif getline(1) =~# '^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \x\{7,\} '
syn match gitHashAbbrev /^[|\/\\_ ]\{-\}\*[|\/\\_ ]\{-\} \zs\x\{7,\} \@=/ contains=@NoSpell
endif
" git log --graph
syn region gitGraph start=/\%(^[|\/\\_ ]*\*[|\/\\_ ]\{-\} commit\%( \x\{4,\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^\%([|\/\\_ ]*$\)\@=/ contains=@NoSpell
" git blame --porcelain
syn region gitHead start=/\%(^\x\{40,\} \d\+ \d\+\%( \d\+\)\=$\)\@=/ end=/^\t\@=/ contains=@NoSpell
" git ls-tree
syn match gitMode /^\d\{6\}\%( \%(blob\|tree\) \x\{4,\}\t\)\@=/ nextgroup=gitType skipwhite contains=@NoSpell
" git ls-files --stage
syn match gitMode /^\d\{6\}\%( \x\{4,\} [0-3]\t\)\@=/ nextgroup=gitHashStage skipwhite contains=@NoSpell
" .git/HEAD, .git/refs/
syn match gitKeyword /\%^ref: \@=/ nextgroup=gitReference skipwhite contains=@NoSpell
syn match gitHash /\%^\x\{40,}\%$/ skipwhite contains=@NoSpell
" .git/logs/
syn match gitReflog /^\x\{40,\} \x\{40,\} .\{-\}\d\+\s-\d\{4\}\t.*/ skipwhite contains=@NoSpell,gitReflogOld
syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
@@ -25,35 +41,47 @@ syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\)
syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
syn match gitDiffAdded "{+.*+}" contained containedin=gitDiff
syn match gitDiffAdded "{+[^}]*+}" contained containedin=gitDiff
syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff
syn match gitDiffRemoved "\[-[^]]*-\]" contained containedin=gitDiff
syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite
syn match gitMode /^\d\{6\}\>/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
syn match gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite
syn match gitKeyword /^commit \@=/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitKeyword /^\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitHead nextgroup=gitHash skipwhite contains=@NoSpell
syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitIdentityKeyword /^\%(author\|committer\|tagger\) \@=/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite contains=@NoSpell
syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite contains=@NoSpell
syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite
syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite
syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity
syn match gitKeyword /^[*|\/\\_ ]\+\zscommit \@=/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitKeyword /^[|\/\\_ ]\+\zs\%(object\|tree\|parent\|encoding\|gpgsig\%(-\w\+\)\=\|previous\) \@=/ contained containedin=gitGraph nextgroup=gitHash skipwhite contains=@NoSpell
syn match gitKeyword /^[|\/\\_ ]\+\zsMerge:/ contained containedin=gitGraph nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitIdentityKeyword /^[|\/\\_ ]\+\zs\%(author\|committer\|tagger\) \@=/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
syn match gitIdentityHeader /^[|\/\\_ ]\+\zs\%(Author\|Commit\|Tagger\):/ contained containedin=gitGraph nextgroup=gitIdentity skipwhite contains=@NoSpell
syn match gitDateHeader /^[|\/\\_ ]\+\zs\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitGraph nextgroup=gitDate skipwhite contains=@NoSpell
syn match gitDate /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained
syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained
syn match gitDate /\<\d\+ \l\+ ago\>/ contained
syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHash skipwhite
syn match gitStage /\<\d\t\@=/ contained
syn match gitReference /\S\+\S\@!/ contained
syn match gitHash /\<\x\{40\}\>/ contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
syn match gitHash /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
syn match gitHashAbbrev /\<\x\{4,40\}\>/ contained nextgroup=gitHashAbbrev skipwhite
syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
syn match gitKeyword /^type \@=/ contained containedin=gitHead nextgroup=gitType skipwhite contains=@NoSpell
syn match gitKeyword /^\%(summary\|boundary\|filename\|\%(author\|committer\)-\%(time\|tz\)\) \@=/ contained containedin=gitHead skipwhite contains=@NoSpell
syn match gitKeyword /^tag \@=/ contained containedin=gitHead nextgroup=gitReference skipwhite contains=@NoSpell
syn match gitIdentityKeyword /^\%(author\|committer\)-mail \@=/ contained containedin=gitHead nextgroup=gitEmail skipwhite contains=@NoSpell
syn match gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite contains=@NoSpell
syn match gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite contains=@NoSpell
syn match gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity contains=@NoSpell
syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite contains=@NoSpell
syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity contains=@NoSpell
syn match gitDate /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained contains=@NoSpell
syn match gitDate /-\=\d\+ [+-]\d\d\d\d\>/ contained contains=@NoSpell
syn match gitDate /\<\d\+ \l\+ ago\>/ contained contains=@NoSpell
syn match gitType /\<\%(tag\|commit\|tree\|blob\)\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitReference /\S\+\S\@!/ contained contains=@NoSpell
syn match gitHash /\<\x\{40,\}\>/ contained nextgroup=gitIdentity,gitHash skipwhite contains=@NoSpell
syn match gitReflogOld /^\x\{40,\} \@=/ contained nextgroup=gitReflogNew skipwhite contains=@NoSpell
syn match gitReflogNew /\<\x\{40,\} \@=/ contained nextgroup=gitIdentity skipwhite contains=@NoSpell
syn match gitHashAbbrev /\<\x\{4,\}\>/ contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite contains=@NoSpell
syn match gitHashStage /\<\x\{4,\}\>/ contained nextgroup=gitStage skipwhite contains=@NoSpell
syn match gitStage /\<\d\t\@=/ contained contains=@NoSpell
syn match gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite
syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity
syn match gitNotesHeader /^Notes:\ze\n /
@@ -68,7 +96,10 @@ hi def link gitEmailDelimiter Delimiter
hi def link gitEmail Special
hi def link gitDate Number
hi def link gitMode Number
hi def link gitHashStage gitHash
hi def link gitHashAbbrev gitHash
hi def link gitReflogOld gitHash
hi def link gitReflogNew gitHash
hi def link gitHash Identifier
hi def link gitReflogMiddle gitReference
hi def link gitReference Function

View File

@@ -2,71 +2,87 @@
" Language: git commit file
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Filenames: *.git/COMMIT_EDITMSG
" Last Change: 2019 Dec 05
" Last Change: 2022 Jan 05
if exists("b:current_syntax")
finish
endif
scriptencoding utf-8
syn case match
syn sync minlines=50
syn sync linebreaks=1
if has("spell")
syn spell toplevel
endif
syn include @gitcommitDiff syntax/diff.vim
syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@gitcommitDiff
syn match gitcommitSummary "^.*\%<51v." contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
syn match gitcommitOverflow ".*" contained contains=@Spell
syn match gitcommitBlank "^[^#].*" contained contains=@Spell
syn match gitcommitBlank "^.\+" contained contains=@Spell
syn match gitcommitFirstLine "\%^.*" nextgroup=gitcommitBlank,gitcommitComment skipnl
if get(g:, "gitcommit_cleanup") is# "scissors"
syn match gitcommitFirstLine "\%^.*" nextgroup=gitcommitBlank skipnl
syn region gitcommitComment start=/^# -\+ >8 -\+$/ end=/\%$/ contains=gitcommitDiff
else
syn match gitcommitFirstLine "\%^[^#].*" nextgroup=gitcommitBlank skipnl
syn match gitcommitComment "^#.*"
let s:scissors = 0
let s:l = search('^[#;@!$%^&|:] -\{24,\} >8 -\{24,\}$', 'cnW', '', 100)
if s:l == 0
let s:l = line('$')
elseif getline(s:l)[0] !=# getline(s:l - 1)[0]
let s:scissors = 1
endif
let s:comment = escape((matchstr(getline(s:l), '^[#;@!$%^&|:]\S\@!') . '#')[0], '^$.*[]~\"/')
syn match gitcommitHead "^\%(# .*\n\)\+#$" contained transparent
syn match gitcommitOnBranch "\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
syn match gitcommitOnBranch "\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
if s:scissors
let s:comment .= ' -\{24,\} >8 -\{24,\}$'
exe 'syn region gitcommitComment start="^' . s:comment . '" end="\%$" contains=gitcommitDiff'
else
exe 'syn match gitcommitComment "^' . s:comment . '.*"'
endif
exe 'syn match gitcommitTrailers "\n\@<=\n\%([[:alnum:]-]\+\s*:.*\|(cherry picked from commit .*\)\%(\n\s.*\|\n[[:alnum:]-]\+\s*:.*\|\n(cherry picked from commit .*\)*\%(\n\n*\%(' . s:comment . '\)\|\n*\%$\)\@="'
unlet s:l s:comment s:scissors
syn match gitcommitTrailerToken "^[[:alnum:]-]\+\s*:" contained containedin=gitcommitTrailers
syn match gitcommitHash "\<\x\{40,}\>" contains=@NoSpell display
syn match gitcommitOnBranch "\%(^. \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
syn match gitcommitOnBranch "\%(^. \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
syn match gitcommitBranch "[^ ']\+" contained
syn match gitcommitNoBranch "\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment
syn match gitcommitHeader "\%(^# \)\@<=.*:$" contained containedin=gitcommitComment
syn region gitcommitAuthor matchgroup=gitCommitHeader start=/\%(^# \)\@<=\%(Author\|Committer\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
syn match gitcommitNoChanges "\%(^# \)\@<=No changes$" contained containedin=gitcommitComment
syn match gitcommitNoBranch "\%(^. \)\@<=Not currently on any branch." contained containedin=gitcommitComment
syn match gitcommitHeader "\%(^. \)\@<=\S.*[:]\%(\n^$\)\@!$" contained containedin=gitcommitComment
syn region gitcommitAuthor matchgroup=gitCommitHeader start=/\%(^. \)\@<=\%(Author\|Committer\|Date\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
syn match gitcommitHeader "\%(^. \)\@<=commit\%( \x\{40,\}$\)\@=" contained containedin=gitcommitComment nextgroup=gitcommitHash skipwhite
syn match gitcommitNoChanges "\%(^. \)\@<=No changes$" contained containedin=gitcommitComment
syn region gitcommitUntracked start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold
syn match gitcommitUntrackedFile "\t\@<=.*" contained
syn match gitcommitType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained containedin=gitcommitComment nextgroup=gitcommitFile skipwhite
syn match gitcommitFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitArrow
syn match gitcommitArrow " -> " contained nextgroup=gitcommitFile
syn match gitcommitUntrackedFile "\%(^.\t\)\@<=[^:/]*\%(/.*\)\=$" contained containedin=gitcommitComment
syn region gitcommitDiscarded start=/^# Change\%(s not staged for commit\|d but not updated\):/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
syn region gitcommitSelected start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold
syn region gitcommitUnmerged start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold
syn region gitcommitUntracked start=/^\z(.\) Untracked files:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
syn region gitcommitDiscarded start=/^\z(.\) Change\%(s not staged for commit\|d but not updated\):$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitDiscardedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
syn region gitcommitSelected start=/^\z(.\) Changes to be committed:$/ end=/^\z1$\|^\z1\@!/ contains=gitcommitHeader,gitcommitSelectedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
syn region gitcommitUnmerged start=/^\z(.\) Unmerged paths:$/ end=/^\z1\=$\|^\z1\@!/ contains=gitcommitHeader,gitcommitUnmergedType containedin=gitcommitComment containedin=gitcommitComment contained transparent fold
syn match gitcommitUntrackedFile "\%(^.\t\)\@<=.*" contained containedin=gitcommitUntracked
syn match gitcommitDiscardedType "\t\@<=[[:lower:]][^:]*[[:lower:]]: "he=e-2 contained containedin=gitcommitComment nextgroup=gitcommitDiscardedFile skipwhite
syn match gitcommitSelectedType "\t\@<=[[:lower:]][^:]*[[:lower:]]: "he=e-2 contained containedin=gitcommitComment nextgroup=gitcommitSelectedFile skipwhite
syn match gitcommitUnmergedType "\t\@<=[[:lower:]][^:]*[[:lower:]]: "he=e-2 contained containedin=gitcommitComment nextgroup=gitcommitUnmergedFile skipwhite
syn match gitcommitDiscardedFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow
syn match gitcommitSelectedFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
syn match gitcommitUnmergedFile ".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
syn match gitcommitDiscardedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained nextgroup=gitcommitDiscardedFile skipwhite
syn match gitcommitSelectedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained nextgroup=gitcommitSelectedFile skipwhite
syn match gitcommitUnmergedType "\%(^.\t\)\@<=[^[:punct:][:space:]][^/:]*[^[:punct:][:space:]][:]\ze "he=e-1 contained nextgroup=gitcommitUnmergedFile skipwhite
syn match gitcommitDiscardedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow
syn match gitcommitSelectedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
syn match gitcommitUnmergedFile "\S.\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitUnmergedArrow
syn match gitcommitDiscardedArrow " -> " contained nextgroup=gitcommitDiscardedFile
syn match gitcommitSelectedArrow " -> " contained nextgroup=gitcommitSelectedFile
syn match gitcommitUnmergedArrow " -> " contained nextgroup=gitcommitSelectedFile
syn match gitcommitWarning "\%^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl
syn match gitcommitWarning "^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl contained
syn match gitcommitWarning "^\%(no changes added to commit\|nothing \%(added \)\=to commit\)\>.*\%$"
syn match gitcommitUnmergedArrow " -> " contained nextgroup=gitcommitUnmergedFile
hi def link gitcommitSummary Keyword
hi def link gitcommitTrailerToken Label
hi def link gitcommitComment Comment
hi def link gitcommitUntracked gitcommitComment
hi def link gitcommitDiscarded gitcommitComment
hi def link gitcommitSelected gitcommitComment
hi def link gitcommitUnmerged gitcommitComment
hi def link gitcommitHash Identifier
hi def link gitcommitOnBranch Comment
hi def link gitcommitBranch Special
hi def link gitcommitNoBranch gitCommitBranch

View File

@@ -2,7 +2,7 @@
" Language: git rebase --interactive
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Filenames: git-rebase-todo
" Last Change: 2019 Dec 06
" Last Change: 2022 Jan 05
if exists("b:current_syntax")
finish
@@ -10,8 +10,10 @@ endif
syn case match
syn match gitrebaseHash "\v<\x{7,}>" contained
syn match gitrebaseCommit "\v<\x{7,}>" nextgroup=gitrebaseSummary skipwhite
let s:c = escape((matchstr(getline('$'), '^[#;@!$%^&|:]\S\@!') . '#')[0], '^$.*[]~\"/')
syn match gitrebaseHash "\v<\x{7,}>" contained contains=@NoSpell
syn match gitrebaseCommit "\v<\x{7,}>" nextgroup=gitrebaseSummary skipwhite contains=@NoSpell
syn match gitrebasePick "\v^p%(ick)=>" nextgroup=gitrebaseCommit skipwhite
syn match gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite
syn match gitrebaseEdit "\v^e%(dit)=>" nextgroup=gitrebaseCommit skipwhite
@@ -26,12 +28,15 @@ syn match gitrebaseLabel "\v^l(abel)=>" nextgroup=gitrebaseName skipwhite
syn match gitrebaseReset "\v^(t|reset)=>" nextgroup=gitrebaseName skipwhite
syn match gitrebaseSummary ".*" contains=gitrebaseHash contained
syn match gitrebaseCommand ".*" contained
syn match gitrebaseComment "^\s*#.*" contains=gitrebaseHash
exe 'syn match gitrebaseComment " \@<=' . s:c . ' empty$" containedin=gitrebaseSummary contained'
exe 'syn match gitrebaseComment "^\s*' . s:c . '.*" contains=gitrebaseHash'
syn match gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
syn match gitrebaseMergeOption "\v-[Cc]>" nextgroup=gitrebaseMergeCommit skipwhite contained
syn match gitrebaseMergeCommit "\v<\x{7,}>" nextgroup=gitrebaseName skipwhite contained
syn match gitrebaseName "\v[^[:space:].*?i:^~/-]\S+" nextgroup=gitrebaseMergeComment skipwhite contained
syn match gitrebaseMergeComment "#" nextgroup=gitrebaseSummary skipwhite contained
exe 'syn match gitrebaseMergeComment "' . s:c . '" nextgroup=gitrebaseSummary skipwhite contained'
unlet s:c
hi def link gitrebaseCommit gitrebaseHash
hi def link gitrebaseHash Identifier

View File

@@ -1,8 +1,9 @@
" Vim syntax file
" Language: i3 config file
" Maintainer: Mohamed Boughaba <mohamed dot bgb at gmail dot com>
" Original Author: Mohamed Boughaba <mohamed dot bgb at gmail dot com>
" Maintainer: Quentin Hibon (github user hiqua)
" Version: 0.4
" Last Change: 2021 Dec 14
" Last Change: 2022 Jan 15
" References:
" http://i3wm.org/docs/userguide.html#configuring
@@ -174,7 +175,7 @@ syn keyword i3ConfigDrawingMarksKeyword show_marks contained
syn match i3ConfigDrawingMarks /^\s*show_marks\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDrawingMarksKeyword
" Group mode/bar
syn keyword i3ConfigBlockKeyword mode bar colors i3bar_command status_command position exec mode hidden_state modifier id position output background statusline tray_output tray_padding separator separator_symbol workspace_buttons strip_workspace_numbers binding_mode_indicator focused_workspace active_workspace inactive_workspace urgent_workspace binding_mode contained
syn keyword i3ConfigBlockKeyword mode bar colors i3bar_command status_command position exec mode hidden_state modifier id position output background statusline tray_output tray_padding separator separator_symbol workspace_min_width workspace_buttons strip_workspace_numbers binding_mode_indicator focused_workspace active_workspace inactive_workspace urgent_workspace binding_mode contained
syn region i3ConfigBlock start=+.*s\?{$+ end=+^}$+ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
" Line continuation

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Vim 8.2 script
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
" Last Change: December 21, 2021
" Version: 8.2-20
" Last Change: January 11, 2022
" Version: 8.2-24
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
" Automatically generated keyword lists: {{{1
@@ -19,12 +19,12 @@ syn keyword vimTodo contained COMBAK FIXME TODO XXX
syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
syn keyword vimCommand contained a ar[gs] argl[ocal] ba[ll] bl[ast] brea[k] buffers ca caf[ter] cbo[ttom] cex[pr] cgete[xpr] cl[ist] cn[ext] colo[rscheme] cons[t] cs d[elete] delel delf[unction] dif[fupdate] difft[his] dli[st] ds[earch] echoc[onsole] em[enu] endw[hile] export filt[er] fo[ld] fu[nction] gvim helpt[ags] iabc[lear] import isp[lit] keepa l[ist] laf[ter] lbel[ow] lcscope lf[ile] lgr[ep] lli[st] lnf[ile] lol[der] lt[ag] lw[indow] menut[ranslate] mkvie[w] nbc[lose] noh[lsearch] ol[dfiles] pa[ckadd] po[p] prof[ile] pta[g] ptr[ewind] py3f[ile] pythonx quita[ll] redraws[tatus] rew[ind] rubyf[ile] sIg sa[rgument] sba[ll] sbr[ewind] scl scscope sfir[st] sgl sic sin sm[ap] snoreme spelld[ump] spellw[rong] srg sta[g] sts[elect] sus[pend] syncbind tabN[ext] tabl[ast] tabr[ewind] tcld[o] tj[ump] tlu tno[remap] tu[nmenu] undol[ist] v vie[w] vne[w] wh[ile] wn[ext] wv[iminfo] xmenu xunme
syn keyword vimCommand contained ab arga[dd] argu[ment] bad[d] bm[odified] breaka[dd] bun[load] cabc[lear] cal[l] cc cf[ile] changes cla[st] cnew[er] com cope[n] cscope debug delep dell diffg[et] dig[raphs] do dsp[lit] echoe[rr] en[dif] ene[w] exu[sage] fin[d] foldc[lose] g h[elp] hi if in iuna[bbrev] keepalt la[st] lan[guage] lbo[ttom] ld[o] lfdo lgrepa[dd] lma lo[adview] lop[en] lua m[ove] mes[sages] mod[e] nbs[tart] nor omapc[lear] packl[oadall] popu[p] profd[el] ptf[irst] pts[elect] py3f[ile] pyx r[ead] redrawt[abline] ri[ght] rundo sIl sal[l] sbf[irst] sc scp se[t] sg sgn sie sip sme snoremenu spelli[nfo] spr[evious] sri star[tinsert] substitutepattern sv[iew] syntime tabc[lose] tabm[ove] tabs tclf[ile] tl[ast] tlunmenu to[pleft] tunma[p] unh[ide] var vim9[cmd] vs[plit] win[size] wp[revious] x[it] xnoreme xunmenu
syn keyword vimCommand contained abc[lear] argd[elete] as[cii] balt bn[ext] breakd[el] bw[ipeout] cabo[ve] cat[ch] ccl[ose] cfdo chd[ir] class cnf[ile] comc[lear] cp[revious] cstag debugg[reedy] deletel delm[arks] diffo[ff] dir doau e[dit] echom[sg] enddef eval f[ile] fina[lly] foldd[oopen] go[to] ha[rdcopy] hid[e] ij[ump] inor j[oin] keepj[umps] lab[ove] lat lc[d] le[ft] lfir[st] lh[elpgrep] lmak[e] loadk lp[revious] luado ma[rk] mk[exrc] mz[scheme] new nore on[ly] pc[lose] pp[op] promptf[ind] ptj[ump] pu[t] py[thon] pyxdo rec[over] reg[isters] rightb[elow] rv[iminfo] sIn san[dbox] sbl[ast] scI scr[iptnames] setf[iletype] sgI sgp sig sir smenu so[urce] spellr[are] sr srl startg[replace] substituterepeat sw[apname] t tabd[o] tabn[ext] tags te[aroff] tlm tm[enu] tp[revious] type unl ve[rsion] vim9s[cript] wN[ext] winc[md] wq xa[ll] xnoremenu xwininfo
syn keyword vimCommand contained abo[veleft] argdo au bd[elete] bo[tright] breakl[ist] cN[ext] cad[dbuffer] cb[uffer] cd cfir[st] che[ckpath] cle[arjumps] cnor comp[iler] cpf[ile] cun def deletep delp diffp[atch] disa[ssemble] doaut ea echon endf[unction] ex files fini[sh] folddoc[losed] gr[ep] helpc[lose] his[tory] il[ist] interface ju[mps] keepp[atterns] lad[dexpr] later lch[dir] lefta[bove] lg[etfile] lhi[story] lmapc[lear] loadkeymap lpf[ile] luafile mak[e] mks[ession] mzf[ile] nmapc[lear] nos[wapfile] opt[ions] pe[rl] pre[serve] promptr[epl] ptl[ast] pw[d] pydo pyxfile red[o] res[ize] ru[ntime] sI sIp sav[eas] sbm[odified] sce scripte[ncoding] setg[lobal] sgc sgr sign sl[eep] smile sor[t] spellr[epall] srI srn startr[eplace] sun[hide] sy tN[ext] tabe[dit] tabnew tc[d] ter[minal] tlmenu tma[p] tr[ewind] u[ndo] unlo[ckvar] verb[ose] vim[grep] w[rite] windo wqa[ll] xmapc[lear] xprop y[ank]
syn keyword vimCommand contained addd arge[dit] bN[ext] bel[owright] bp[revious] bro[wse] cNf[ile] cadde[xpr] cbe[fore] cdo cg[etfile] checkt[ime] clo[se] co[py] con[tinue] cq[uit] cuna[bbrev] defc[ompile] deletl dep diffpu[t] dj[ump] dp earlier el[se] endfo[r] exi[t] filet fir[st] foldo[pen] grepa[dd] helpf[ind] i imapc[lear] intro k lN[ext] laddb[uffer] lb[uffer] lcl[ose] leg[acy] lgetb[uffer] ll lne[xt] loc[kmarks] lr[ewind] lv[imgrep] marks mksp[ell] n[ext] noa nu[mber] ownsyntax ped[it] prev[ious] ps[earch] ptn[ext] py3 pyf[ile] q[uit] redi[r] ret[ab] rub[y] sIc sIr sbN[ext] sbn[ext] scg scriptv[ersion] setl[ocal] sge sh[ell] sil[ent] sla[st] sn[ext] sp[lit] spellr[rare] src srp stj[ump] sunme syn ta[g] tabf[ind] tabo[nly] tch[dir] tf[irst] tln tmapc[lear] try una[bbreviate] uns[ilent] vert[ical] vimgrepa[dd] wa[ll] winp[os] wundo xme xr[estore] z[^.=]
syn keyword vimCommand contained al[l] argg[lobal] b[uffer] bf[irst] br[ewind] bufdo c[hange] caddf[ile] cbel[ow] ce[nter] cgetb[uffer] chi[story] cmapc[lear] col[der] conf[irm] cr[ewind] cw[indow] delc[ommand] deletp di[splay] diffs[plit] dl dr[op] ec elsei[f] endt[ry] exp filetype fix[del] for gui helpg[rep] ia imp is[earch] kee[pmarks] lNf[ile] laddf[ile] lbe[fore] lcs lex[pr] lgete[xpr] lla[st] lnew[er] lockv[ar] ls lvimgrepa[dd] mat[ch] mkv[imrc] nb[key] noautocmd o[pen] p[rint] perld[o] pro ptN[ext] ptp[revious] py3do python3 qa[ll] redr[aw] retu[rn] rubyd[o] sIe sN[ext] sb[uffer] sbp[revious] sci scs sf[ind] sgi si sim[alt] sm[agic] sno[magic] spe[llgood] spellu[ndo] sre[wind] st[op] stopi[nsert] sunmenu sync tab tabfir[st] tabp[revious] tcl th[row] tlnoremenu tn[ext] ts[elect] undoj[oin] up[date] vi[sual] viu[sage]
syn keyword vimCommand contained a ar[gs] argg[lobal] b[uffer] bf[irst] br[ewind] bufdo c[hange] caddf[ile] cbel[ow] ce[nter] cgetb[uffer] chi[story] cmapc[lear] col[der] conf[irm] cr[ewind] cw[indow] delc[ommand] deletp di[splay] diffs[plit] dl dr[op] ec elsei[f] endt[ry] exp filetype fix[del] for gui helpg[rep] ia imp is[earch] kee[pmarks] lNf[ile] laddf[ile] lbe[fore] lcs lex[pr] lgete[xpr] lla[st] lnew[er] lockv[ar] ls lvimgrepa[dd] mat[ch] mkv[imrc] nb[key] noautocmd o[pen] p[rint] perld[o] pro ptN[ext] ptp[revious] py3do python3 qa[ll] redr[aw] retu[rn] rubyd[o] sIe sN[ext] sb[uffer] sbp[revious] sci scs sf[ind] sgi si sim[alt] sm[agic] sno[magic] spe[llgood] spellu[ndo] sre[wind] st[op] stopi[nsert] sunmenu sync tab tabfir[st] tabp[revious] tcl th[row] tlnoremenu tn[ext] ts[elect] undoj[oin] up[date] vi[sual] viu[sage] wh[ile] wn[ext] wv[iminfo] xmenu xunme
syn keyword vimCommand contained ab arga[dd] argl[ocal] ba[ll] bl[ast] brea[k] buffers ca caf[ter] cbo[ttom] cex[pr] cgete[xpr] cl[ist] cn[ext] colo[rscheme] cons[t] cs d[elete] delel delf[unction] dif[fupdate] difft[his] dli[st] ds[earch] echoc[onsole] em[enu] endw[hile] export filt[er] fo[ld] fu[nction] gvim helpt[ags] iabc[lear] import isp[lit] keepa l[ist] laf[ter] lbel[ow] lcscope lf[ile] lgr[ep] lli[st] lnf[ile] lol[der] lt[ag] lw[indow] menut[ranslate] mkvie[w] nbc[lose] noh[lsearch] ol[dfiles] pa[ckadd] po[p] prof[ile] pta[g] ptr[ewind] py3f[ile] pythonx quita[ll] redraws[tatus] rew[ind] rubyf[ile] sIg sa[rgument] sba[ll] sbr[ewind] scl scscope sfir[st] sgl sic sin sm[ap] snoreme spelld[ump] spellw[rong] srg sta[g] sts[elect] sus[pend] syncbind tabN[ext] tabl[ast] tabr[ewind] tcld[o] tj[ump] tlu tno[remap] tu[nmenu] undol[ist] v vie[w] vne[w] win[size] wp[revious] x[it] xnoreme xunmenu
syn keyword vimCommand contained abc[lear] argd[elete] argu[ment] bad[d] bm[odified] breaka[dd] bun[load] cabc[lear] cal[l] cc cf[ile] changes cla[st] cnew[er] com cope[n] cscope debug delep dell diffg[et] dig[raphs] do dsp[lit] echoe[rr] en[dif] ene[w] exu[sage] fin[d] foldc[lose] g h[elp] hi if in iuna[bbrev] keepalt la[st] lan[guage] lbo[ttom] ld[o] lfdo lgrepa[dd] lma lo[adview] lop[en] lua m[ove] mes[sages] mod[e] nbs[tart] nor omapc[lear] packl[oadall] popu[p] profd[el] ptf[irst] pts[elect] py3f[ile] pyx r[ead] redrawt[abline] ri[ght] rundo sIl sal[l] sbf[irst] sc scp se[t] sg sgn sie sip sme snoremenu spelli[nfo] spr[evious] sri star[tinsert] substitutepattern sv[iew] syntime tabc[lose] tabm[ove] tabs tclf[ile] tl[ast] tlunmenu to[pleft] tunma[p] unh[ide] var vim9[cmd] vs[plit] winc[md] wq xa[ll] xnoremenu xwininfo
syn keyword vimCommand contained abo[veleft] argded[upe] as[cii] balt bn[ext] breakd[el] bw[ipeout] cabo[ve] cat[ch] ccl[ose] cfdo chd[ir] class cnf[ile] comc[lear] cp[revious] cstag debugg[reedy] deletel delm[arks] diffo[ff] dir doau e[dit] echom[sg] enddef eval f[ile] fina[lly] foldd[oopen] go[to] ha[rdcopy] hid[e] ij[ump] inor j[oin] keepj[umps] lab[ove] lat lc[d] le[ft] lfir[st] lh[elpgrep] lmak[e] loadk lp[revious] luado ma[rk] mk[exrc] mz[scheme] new nore on[ly] pc[lose] pp[op] promptf[ind] ptj[ump] pu[t] py[thon] pyxdo rec[over] reg[isters] rightb[elow] rv[iminfo] sIn san[dbox] sbl[ast] scI scr[iptnames] setf[iletype] sgI sgp sig sir smenu so[urce] spellr[are] sr srl startg[replace] substituterepeat sw[apname] t tabd[o] tabn[ext] tags te[aroff] tlm tm[enu] tp[revious] type unl ve[rsion] vim9s[cript] wN[ext] windo wqa[ll] xmapc[lear] xprop y[ank]
syn keyword vimCommand contained addd argdo au bd[elete] bo[tright] breakl[ist] cN[ext] cad[dbuffer] cb[uffer] cd cfir[st] che[ckpath] cle[arjumps] cnor comp[iler] cpf[ile] cun def deletep delp diffp[atch] disa[ssemble] doaut ea echon endf[unction] ex files fini[sh] folddoc[losed] gr[ep] helpc[lose] his[tory] il[ist] interface ju[mps] keepp[atterns] lad[dexpr] later lch[dir] lefta[bove] lg[etfile] lhi[story] lmapc[lear] loadkeymap lpf[ile] luafile mak[e] mks[ession] mzf[ile] nmapc[lear] nos[wapfile] opt[ions] pe[rl] pre[serve] promptr[epl] ptl[ast] pw[d] pydo pyxfile red[o] res[ize] ru[ntime] sI sIp sav[eas] sbm[odified] sce scripte[ncoding] setg[lobal] sgc sgr sign sl[eep] smile sor[t] spellr[epall] srI srn startr[eplace] sun[hide] sy tN[ext] tabe[dit] tabnew tc[d] ter[minal] tlmenu tma[p] tr[ewind] u[ndo] unlo[ckvar] verb[ose] vim[grep] w[rite] winp[os] wundo xme xr[estore] z[^.=]
syn keyword vimCommand contained al[l] arge[dit] bN[ext] bel[owright] bp[revious] bro[wse] cNf[ile] cadde[xpr] cbe[fore] cdo cg[etfile] checkt[ime] clo[se] co[py] con[tinue] cq[uit] cuna[bbrev] defc[ompile] deletl dep diffpu[t] dj[ump] dp earlier el[se] endfo[r] exi[t] filet fir[st] foldo[pen] grepa[dd] helpf[ind] i imapc[lear] intro k lN[ext] laddb[uffer] lb[uffer] lcl[ose] leg[acy] lgetb[uffer] ll lne[xt] loc[kmarks] lr[ewind] lv[imgrep] marks mksp[ell] n[ext] noa nu[mber] ownsyntax ped[it] prev[ious] ps[earch] ptn[ext] py3 pyf[ile] q[uit] redi[r] ret[ab] rub[y] sIc sIr sbN[ext] sbn[ext] scg scriptv[ersion] setl[ocal] sge sh[ell] sil[ent] sla[st] sn[ext] sp[lit] spellr[rare] src srp stj[ump] sunme syn ta[g] tabf[ind] tabo[nly] tch[dir] tf[irst] tln tmapc[lear] try una[bbreviate] uns[ilent] vert[ical] vimgrepa[dd] wa[ll]
syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man N[ext] Over P[rint] Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Winbar XMLent XMLns
@@ -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 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_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight 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_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin 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_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win 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_drop_files test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout 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_gui_mouse_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline 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
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
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1

View File

@@ -8,7 +8,7 @@
になっています。
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
け時間を使うのかにもよりますが、およそ25から30分です。
け時間を使うのかにもよりますが、およそ30分です。
ATTENTION:
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
@@ -24,7 +24,7 @@
レッスン 1.1: カーソルの移動
** カーソルを移動するには、示される様に h,j,k,l を押します **
** カーソルを移動するには、示される様に h,j,k,l を押します **
^
k ヒント: h キーは左方向に移動します。
< h l > l キーは右方向に移動します。
@@ -65,11 +65,12 @@ NOTE: :q! <ENTER>
5. 1.3までカーソルを移動させましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.3: テキスト編集 - 削除
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
1. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -87,12 +88,11 @@ NOTE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.4: テキスト編集 - 挿入
** ノーマルモードにてテキストを挿入するには i を押します **
** ノーマルモードにてテキストを挿入するには i を押します **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
@@ -115,10 +115,10 @@ NOTE:
レッスン 1.5: テキスト編集 - 追加
** テキストを追加するには A を押しましょう **
** テキストを追加するには A を押しましょう **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
カーソルがその文字上にあってもかまいません。
カーソルがその行のどの文字上にあってもかまいません。
2. 追加が必要な場所で A をタイプしましょう。
@@ -137,18 +137,17 @@ NOTE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.6: ファイルの編集
** ファイルを保存して終了するには :wq とタイプします **
** ファイルを保存して終了するには :wq とタイプします。 **
!! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
ません
1. 別の端末がある場合はそこで以下の内容を行ってください。そうでなければ、
レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
します
2. シェルプロンプトでこのコマンドをタイプします: vim tutor <ENTER>
'vim' が Vim エディタを起動するコマンド、'tutor' は編集したいファイル
名前です。変更してもよいファイルを使いましょう。
2. シェルプロンプトでこのコマンドをタイプします: vim file.txt <ENTER>
'vim' が Vim エディタを起動するコマンド、'file.txt' は編集したいファイル
名前です。変更できるファイルの名前を使いましょう。
3. 前のレッスンで学んだように、テキストを挿入、削除します。
@@ -186,9 +185,9 @@ NOTE: <ESC>
レッスン 2.1: 削除コマンド
** 単語の末尾までを削除するには dw とタイプしましょう **
** 単語の末尾までを削除するには dw とタイプしましょう **
1. ノーマルモードであることを確認するため <ESC> を押しましょう。
1. 確実にノーマルモードするため <ESC> を押しましょう。
2. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -196,22 +195,22 @@ NOTE: <ESC>
4. 単語を削除するために dw とタイプしましょう。
NOTE: タイプすると、dw という文字がスクリーンの最下行に現われます。
タイプを間違ってしまった時には <ESC> を押してやり直しましょう。
NOTE: d をタイプすると、その文字がスクリーンの最下行に現われます。Vim は
あなたが w をタイプするのを待っています。もし d 以外の文字が表示された
時は何か間違っています。 <ESC> を押してやり直しましょう。
---> この 文 紙 には いくつかの たのしい 必要のない 単語 が 含まれて います。
5. 3 から 4 までを文が正しくなるまで繰り返し、レッスン 2.2 へ進みましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.2: その他の削除コマンド
** 行の末尾までを削除するには d$ とタイプしましょう **
** 行の末尾までを削除するには d$ とタイプしましょう **
1. ノーマルモードであることを確認するのに <ESC> を押しましょう。
1. 確実にノーマルモードにするため <ESC> を押しましょう。
2. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -232,7 +231,7 @@ NOTE: <ESC>
レッスン 2.3: オペレータとモーション
多くのコマンドはオペレータとモーションからテキストに変更を加えます。
テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
削除コマンド d のオペレータは次の様になっています:
d モーション
@@ -248,7 +247,7 @@ NOTE: <ESC>
つまり de とタイプすると、カーソル位置から単語の終わりまでを削除します。
NOTE: 冒険したい人は、ノーマルモードにてコマンドなしにモーションを押して
NOTE: 冒険したい人は、ノーマルモードにてオペレータなしにモーションを押して
みましょう。カーソルが目的語一覧で示される位置に移動するはずです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -259,7 +258,7 @@ NOTE:
1. 以下の ---> と示された行の先頭にカーソルを移動します。
2. 2w をタイプして単語2つ分に移動します。
2. 2w をタイプして単語2つ分に移動します。
3. 3e をタイプして3つ目の単語の終端に移動します。
@@ -284,24 +283,24 @@ NOTE:
より多くの削除が行えます:
d 数値 モーション
1. ---> と示された行の行頭部分にカーソルを移動しましょう。
1. ---> と示された行の最初の大文字の単語にカーソルを移動しましょう。
2. UPPER CASE の単語2つを d2w とタイプして削除します。
2. 大文字の単語2つを d2w とタイプして削除します。
3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
3. 連続した大文字の単語を、異なるカウントを指定した1つのコマンドで削除し、
ステップ 1 と 2 を繰り返します。
---> このABC DE行のFGHI JK LMN OP単語はQ RS TUV綺麗になった。
NOTE: オペレータ d とモーションの間にカウントを使った場合、オペレータのない
場合のモーションのように動作します。
例: 3dw と d3w は同等で、3w を削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.6: 行の操作
** 行全体を削除するには dd とタイプします **
** 行全体を削除するには dd とタイプします **
行全体を削除する頻度が多いので、Viのデザイナーは行の削除を d の2回タイプと
いう簡単なものに決めました。
@@ -319,24 +318,25 @@ NOTE:
---> 6) 砂糖は甘い
---> 7) オマエモナー
2回タイプで1行に対して作用させる方法は以下で述べるオペレータでも動作します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.7: やり直しコマンド
** 最後のコマンドを取り消すには u を押します。U は行全体の取です。 **
** 最後のコマンドを取り消すには u を押します。U は行全体の取り消しです。 **
1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
を移動しましょう。
2. x をタイプしていらない先頭の文字を削除しましょう。
2. x をタイプして最初のいらない文字を削除しましょう。
3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
4. 今度は、x を使用して誤りを全て修正しましょう。
4. 今度は、x を使用して行内の誤りを全て修正しましょう。
5. 大文字の U をタイプして、行を元の状態に戻しましょう。
6. u をタイプして直前の U コマンドを取消しましょう。
6. u をタイプして直前の U コマンドを取消しましょう。
7. ではコマンドを再実行するのに CTRL-R (CTRL を押したまま R を打つ)を数回
タイプしてみましょう(取消の取消)。
タイプしてみましょう(取り消しの取り消し)。
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
8. これはとても便利なコマンドです。さぁレッスン 2 要約へ進みましょう。
@@ -347,45 +347,47 @@ NOTE:
レッスン 2 要約
1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
2. カーソル位置からの末尾までを削除するには d$ とタイプします。
3. 行全体を削除するには dd とタイプします。
1. カーソル位置から次の単語までを削除するには dw とタイプします。
2. カーソル位置から単語の末尾までを削除するには de とタイプします。
3. カーソル位置から行の末尾までを削除するには d$ とタイプします。
4. 行全体を削除するには dd とタイプします。
4. モーションを繰り返すには数値を付与します: 2w
5. 変更に用いるコマンドの形式は
5. モーションを繰り返すには数値を付与します: 2w
6. 変更に用いるコマンドの形式は
オペレータ [数値] モーション
それぞれ:
オペレータ - 削除 d の類で何をするか。
数値 - そのコマンドを何回繰り返すか。
モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
けるか。
[数値] - そのコマンドを何回繰り返すか。
モーション - w (単語)や e (単語末尾)、$ (行末)などの類で、テキストの
何に対して働きかけるか。
6. 行の先頭に移動するにはゼロを使用します: 0
7. 行の先頭に移動するにはゼロを使用します: 0
8. 前回の動作を取り消す: u (小文字 u)
行全体の変更を取り消す: U (大文字 U)
取り消しの取り消し: CTRL-R
7. 前回の動作を取消す: u (小文字 u)
行全体の変更を取消す: U (大文字 U)
取消しの取消し: CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 3.1: 貼り付けコマンド
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
1. 以下の段落の最初の行にカーソルを移動しましょう。
1. ---> と示された以下の最初の行にカーソルを移動しましょう。
2. dd とタイプして行を削除し、Vim のバッファに格納しましょう。
2. dd とタイプして行を削除し、Vim のレジスタに格納しましょう。
3. 削除した行が本来あるべき位置の上の行まで、カーソルを移動させましょう。
3. 削除した行が本来あるべき位置の上の行である c) 行まで、カーソルを移動させ
ましょう。
4. ノーマルモードで p をタイプして格納した行を画面に戻します。
4. ノーマルモードで p をタイプして格納した行をカーソルの下に戻します。
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
d) 貴方も学ぶことができる?
b) スミレは青い、
c) 知恵とは学ぶもの、
a) バラは赤い、
---> d) 貴方も学ぶことができる?
---> b) スミレは青い、
---> c) 知恵とは学ぶもの、
---> a) バラは赤い、
@@ -393,7 +395,7 @@ NOTE:
レッスン 3.2: 置き換えコマンド
** カーソルの下の文字を置き換えるには r をタイプします **
** カーソルの下の文字を x に置き換えるには rx をタイプします **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
@@ -416,38 +418,38 @@ NOTE:
レッスン 3.3: 変更コマンド
** 単語の一部、もしくは全体を変更するには cw とタイプします **
** 単語の末尾までを変更するには ce とタイプします **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
2. lubw の u の位置にカーソルを移動しましょう。
3. cw とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
3. ce とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
4. 次の間違い(変更すべき文字の先頭)に移動するために <ESC> をタイプします。
4. <ESC> をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
---> This lubw has a few wptfd that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
ce は単語を削除した後、挿入モードに入ることに注意しましょう。
cc は同じことを行全体に対して行います。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 3.4: c を使用したその他の変更
** 変更コマンドは、削除コマンドと同じ様にオブジェクトを使用します **
** 変更オペレータは、削除と同じ様にモーションを使用します **
1. 変更コマンドは、削除コマンドと同じような動作をします。その形式は
1. 変更オペレータは、削除と同じような動作をします。その形式は
c [数値] モーション
2. オブジェクトも同じで、w は単語、 $ は行末などといったものです。
2. モーションも同じで、w は単語、 $ は行末などといったものです。
3. 以下の ---> と示された行にカーソルを移動しましょう。
3. 以下の ---> と示された最初の行にカーソルを移動しましょう。
4. 最初の間違いへカーソルを移動しましょう。
@@ -470,7 +472,7 @@ NOTE:
文字をタイプします。
3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
更することが可能です。例えば ce ならばカーソル位置から単語の終わりまで、
c$ ならば行の終わりまでを変更します。
4. 変更コマンドの形式は
@@ -485,7 +487,7 @@ NOTE:
レッスン 4.1: 位置とファイルの情報
** ファイル内での位置とファイルの状態を表示するには CTRL-G をタイプします。
ファイル内のある行に移動するには G をタイプします **
ファイル内のある行に移動するには G をタイプします **
NOTE: ステップを実行する前に、このレッスン全てに目を通しましょう!!
@@ -496,7 +498,7 @@ NOTE:
NOTE: 画面の右下隅にカーソルの位置が表示されているかもしれません。これは
'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
2. 最下行に移動するために G をタイプしましょう。
2. ファイルの最下行に移動するために G をタイプしましょう。
ファイルの先頭に移動するには gg とタイプしましょう。
3. 先ほどの行の番号をタイプし G をタイプしましょう。最初に CTRL-G を押した行
@@ -508,19 +510,19 @@ NOTE:
レッスン 4.2: 検索コマンド
** 語句を検索するには / と、前方検索する語句をタイプします。**
** 語句を検索するには / と、前方検索する語句をタイプします。 **
1. ノーマルモードで / という文字をタイプします。画面一番下に : コマンドと
同じ様に / が現れることに気づくでしょう。
2. では、'errroor' <ENTER> とタイプしましょう。これが検索したい単語です。
3. 同じ語をもう一度検索するときは 単に n をタイプします。
3. 同じ語をもう一度検索するときは 単に n をタイプします。
逆方向に語句を検索するときは N をタイプします。
4. 逆方向に語句を検索する場合は、/ の代わりに ? コマンドを使用します。
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら文字 o タイプ)をタイプし
ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
@@ -531,7 +533,7 @@ NOTE:
レッスン 4.3: 対応する括弧を検索
** 対応する ),] や } を検索するには % をタイプします **
** 対応する ),] や } を検索するには % をタイプします **
1. 下の ---> で示された行で (,[ か { のどれかにカーソルを移動しましょう。
@@ -554,7 +556,7 @@ NOTE:
レッスン 4.4: 間違いを変更する方法
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
1. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -567,9 +569,8 @@ NOTE:
---> thee best time to see thee flowers is in thee spring.
4. 複数行から見つかる文字を変更するには
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定しま
す。
4. 複数行から見つかる文字の全ての箇所を変更するには
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
:%s/old/new/g ファイル全体で見つかるものに対して変更する。
:%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりな
がら変更する。
@@ -593,7 +594,7 @@ NOTE:
4. 現在行の最初の old を new に置換する。 :s/old/new
現在行の全ての old を new に置換する。 :s/old/new/g
2つの # 間で語句を置換する。 :#,#s/old/new/g
2つの # 行の間で語句を置換する。 :#,#s/old/new/g
ファイルの中の全ての検索語句を置換する。 :%s/old/new/g
'c' を加えると置換の度に確認を求める。 :%s/old/new/gc
@@ -601,10 +602,10 @@ NOTE:
レッスン 5.1: 外部コマンドを実行する方法
** :! の後に実行する外部コマンドをタイプします **
** :! の後に実行する外部コマンドをタイプします **
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ : をタイプしましょう。
これでコマンドがタイプできる様になります。
これでコマンドライン命令がタイプできる様になります。
2. ここで ! という文字(感嘆符)をタイプしましょう。
これで外部シェルコマンドが実行できる様になります。
@@ -624,7 +625,7 @@ NOTE:
レッスン 5.2: その他のファイルへ書き込み
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
1. ディレクトリの一覧を得るために :!dir もしくは :!ls とタイプしましょう。
このあと <ENTER> を押すのは既にご存知ですね。
@@ -634,7 +635,7 @@ NOTE:
3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
4. これによりファイル全体が TEST という名前で保存されます。
もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
もう一度 :!dir もしくは :!ls とタイプしてディレクトリを確認してみましょう。
NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
チュートリアルの複製ができ上がるはずです。
@@ -647,7 +648,7 @@ NOTE:
レッスン 5.3: 選択した書き込み
** ファイルの位置を保存するには、v モーションと :w FILENAME をタイプします。 **
** ファイルの一部を保存するには、v モーションと :w FILENAME をタイプします。 **
1. この行にカーソルを移動します。
@@ -660,20 +661,20 @@ NOTE:
<ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
5. Vim は TEST というファイルに選択された行を書き込むでしょう。
!dir もしくは !ls でそれを確認します。
:!dir もしくは :!ls でそれを確認します。
それは削除しないでおいて下さい。次のレッスンで使用します。
NOTE: v を押すと、Visual 選択が始まります。カーソルを動かすことで、選択範囲を
大きくも小さくもできます。さらに、その選択範囲に対してオペレータを適用
きます。例えば d はテキストを削除します。
きます。例えば d はテキストを削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 5.4: ファイルの取込と合併
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
1. カーソルを以下の行に合わせます。
1. カーソルをこの行のすぐ上に合わせます。
NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れます。下に下がってこ
のレッスンに移動しましょう。
@@ -682,19 +683,18 @@ NOTE:
ここでいう TEST は使うファイルの名前のことです。
読み込まれたファイルは、カーソル行の下にあります。
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
オリジナルとファイルによるものの2つがあることがわかります。
NOTE: 外部コマンドの出力を読み込むことも出来ます。例えば、
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
:r !ls は ls コマンドの出力をカーソル以下に読み込みます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 5 要約
1. :!command によって 外部コマンドを実行します。
1. :!command によって 外部コマンドを実行す
よく使う例:
(Windows) (Unix)
@@ -717,13 +717,14 @@ NOTE:
レッスン 6.1: オープンコマンド
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
2. o (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
3. さらに挿入モードを終了する為に <ESC> をタイプします。
3. いくつか文字をタイプしてから、挿入モードを終了する為に <ESC> を
タイプします。
---> o をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
@@ -735,12 +736,11 @@ NOTE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.2: 追加コマンド
** カーソルの次の位置からテキストを追加するには a とタイプします **
** カーソルの次の位置からテキストを追加するには a とタイプします **
1. カーソルを ---> で示された最初の行へ移動しましょう。
@@ -763,7 +763,7 @@ NOTE: a, i
レッスン 6.3: その他の置換方法
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
ます。
@@ -781,12 +781,11 @@ NOTE: a, i
NOTE: 置換モードは挿入モードに似ていますが、全てのタイプされた文字は既存の文字
を削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.4: テキストのコピーとペースト
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
1. ---> と示された行へ移動し、カーソルを "a)" の後に置いておきます。
@@ -804,12 +803,13 @@ NOTE:
---> a) this is the first item.
b)
NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
NOTE: y をオペレータとして使うこともできます。yw は単語を1つ yank します。
yy は行を1つ yank し、p でその行を put します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.5: オプションの設定
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
1. 次の様に入力して 'ignore' を検索しましょう: /ignore <ENTER>
n を押して何度か検索を繰り返します。
@@ -826,7 +826,7 @@ NOTE:
6. 大文字小文字の区別を無効にするには次の様に入力します: :set noic
NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c
を使用します: /ignore\c <ENTER>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6 要約
@@ -835,13 +835,13 @@ NOTE: 1
O (大文字) をタイプするとカーソルの上の行で挿入モードになる。
2. カーソル上の文字の次からテキストを追加するには a とタイプする。
行末に自動でテキストを挿入するには大文字 A をタイプする。
行末にテキストを挿入するには大文字 A をタイプする。
3. e コマンドは単語の終端カーソルを移動する。
3. e コマンドは単語の終端カーソルを移動する。
4. y オペレータはテキストを yank (コピー)し、p はそれを put (ペースト)する。
5. 大文字の R をタイプすると置換モードに入り、<ESC>を押すと抜ける。
5. 大文字の R をタイプすると置換モードに入り、<ESC> を押すと抜ける。
6. ":set xxx" とタイプするとオプション "xxx" が設定される。
'ic' 'ignorecase' 検索時に大文字小文字の区別しない
@@ -849,7 +849,7 @@ NOTE: 1
'hls' 'hlsearch' マッチするすべてを強調表示する
長い方、短い方、どちらのオプション名でも使用できます。
7. オプションを無効にするには "no" を付与します: :set noic
7. オプションを無効にするには "no" を付与す: :set noic
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 7.1: オンラインヘルプコマンド
@@ -883,15 +883,15 @@ NOTE: 1
使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
を作成します。
1. "vimrc" ファイルの編集を開始す。これはシステムに依存します。
:edit ~/.vimrc UNIX 向け
:edit ~/_vimrc Windows 向け
1. "vimrc" ファイルの編集を開始します。これはシステムに依存します。
:e ~/.vimrc UNIX 向け
:e ~/_vimrc Windows 向け
2. ここでサンプルの "vimrc" を読み込みます。
:read $VIMRUNTIME/vimrc_example.vim
:r $VIMRUNTIME/vimrc_example.vim
3. 以下のようにファイルへ書き込みます。
:write
:w
次回 Vim を起動すると、色づけ構文が使えるようになるでしょう。
この "vimrc" ファイルへ、お好みの設定を追加することができます。
@@ -907,7 +907,7 @@ NOTE: 1
2. 現在のディレクトリに在るファイルを :!ls か :!dir で確認します。
3. コマンドの開始をタイプします: :e
3. コマンドの先頭をタイプします: :e
4. CTRL-D を押すと Vim は "e" から始まるコマンドの一覧を表示します。

View File

@@ -8,7 +8,7 @@
になっています。
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
け時間を使うのかにもよりますが、およそ25から30分です。
け時間を使うのかにもよりますが、およそ30分です。
ATTENTION:
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
@@ -24,7 +24,7 @@
レッスン 1.1: カーソルの移動
** カーソルを移動するには、示される様に h,j,k,l を押します **
** カーソルを移動するには、示される様に h,j,k,l を押します **
^
k ヒント: h キーは左方向に移動します。
< h l > l キーは右方向に移動します。
@@ -65,11 +65,12 @@ NOTE: :q! <ENTER>
5. 1.3までカーソルを移動させましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.3: テキスト編集 - 削除
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
1. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -87,12 +88,11 @@ NOTE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.4: テキスト編集 - 挿入
** ノーマルモードにてテキストを挿入するには i を押します **
** ノーマルモードにてテキストを挿入するには i を押します **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
@@ -115,10 +115,10 @@ NOTE:
レッスン 1.5: テキスト編集 - 追加
** テキストを追加するには A を押しましょう **
** テキストを追加するには A を押しましょう **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
カーソルがその文字上にあってもかまいません。
カーソルがその行のどの文字上にあってもかまいません。
2. 追加が必要な場所で A をタイプしましょう。
@@ -137,18 +137,17 @@ NOTE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.6: ファイルの編集
** ファイルを保存して終了するには :wq とタイプします **
** ファイルを保存して終了するには :wq とタイプします。 **
!! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
ません
1. 別の端末がある場合はそこで以下の内容を行ってください。そうでなければ、
レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
します
2. シェルプロンプトでこのコマンドをタイプします: vim tutor <ENTER>
'vim' が Vim エディタを起動するコマンド、'tutor' は編集したいファイル
名前です。変更してもよいファイルを使いましょう。
2. シェルプロンプトでこのコマンドをタイプします: vim file.txt <ENTER>
'vim' が Vim エディタを起動するコマンド、'file.txt' は編集したいファイル
名前です。変更できるファイルの名前を使いましょう。
3. 前のレッスンで学んだように、テキストを挿入、削除します。
@@ -186,9 +185,9 @@ NOTE: <ESC>
レッスン 2.1: 削除コマンド
** 単語の末尾までを削除するには dw とタイプしましょう **
** 単語の末尾までを削除するには dw とタイプしましょう **
1. ノーマルモードであることを確認するため <ESC> を押しましょう。
1. 確実にノーマルモードするため <ESC> を押しましょう。
2. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -196,22 +195,22 @@ NOTE: <ESC>
4. 単語を削除するために dw とタイプしましょう。
NOTE: タイプすると、dw という文字がスクリーンの最下行に現われます。
タイプを間違ってしまった時には <ESC> を押してやり直しましょう。
NOTE: d をタイプすると、その文字がスクリーンの最下行に現われます。Vim は
あなたが w をタイプするのを待っています。もし d 以外の文字が表示された
時は何か間違っています。 <ESC> を押してやり直しましょう。
---> この 文 紙 には いくつかの たのしい 必要のない 単語 が 含まれて います。
5. 3 から 4 までを文が正しくなるまで繰り返し、レッスン 2.2 へ進みましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.2: その他の削除コマンド
** 行の末尾までを削除するには d$ とタイプしましょう **
** 行の末尾までを削除するには d$ とタイプしましょう **
1. ノーマルモードであることを確認するのに <ESC> を押しましょう。
1. 確実にノーマルモードにするため <ESC> を押しましょう。
2. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -232,7 +231,7 @@ NOTE: <ESC>
レッスン 2.3: オペレータとモーション
多くのコマンドはオペレータとモーションからテキストに変更を加えます。
テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
削除コマンド d のオペレータは次の様になっています:
d モーション
@@ -248,7 +247,7 @@ NOTE: <ESC>
つまり de とタイプすると、カーソル位置から単語の終わりまでを削除します。
NOTE: 冒険したい人は、ノーマルモードにてコマンドなしにモーションを押して
NOTE: 冒険したい人は、ノーマルモードにてオペレータなしにモーションを押して
みましょう。カーソルが目的語一覧で示される位置に移動するはずです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -259,7 +258,7 @@ NOTE:
1. 以下の ---> と示された行の先頭にカーソルを移動します。
2. 2w をタイプして単語2つ分に移動します。
2. 2w をタイプして単語2つ分に移動します。
3. 3e をタイプして3つ目の単語の終端に移動します。
@@ -284,24 +283,24 @@ NOTE:
より多くの削除が行えます:
d 数値 モーション
1. ---> と示された行の行頭部分にカーソルを移動しましょう。
1. ---> と示された行の最初の大文字の単語にカーソルを移動しましょう。
2. UPPER CASE の単語2つを d2w とタイプして削除します。
2. 大文字の単語2つを d2w とタイプして削除します。
3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
3. 連続した大文字の単語を、異なるカウントを指定した1つのコマンドで削除し、
ステップ 1 と 2 を繰り返します。
---> このABC DE行のFGHI JK LMN OP単語はQ RS TUV綺麗になった。
NOTE: オペレータ d とモーションの間にカウントを使った場合、オペレータのない
場合のモーションのように動作します。
例: 3dw と d3w は同等で、3w を削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.6: 行の操作
** 行全体を削除するには dd とタイプします **
** 行全体を削除するには dd とタイプします **
行全体を削除する頻度が多いので、Viのデザイナーは行の削除を d の2回タイプと
いう簡単なものに決めました。
@@ -319,24 +318,25 @@ NOTE:
---> 6) 砂糖は甘い
---> 7) オマエモナー
2回タイプで1行に対して作用させる方法は以下で述べるオペレータでも動作します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.7: やり直しコマンド
** 最後のコマンドを取り消すには u を押します。U は行全体の取です。 **
** 最後のコマンドを取り消すには u を押します。U は行全体の取り消しです。 **
1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
を移動しましょう。
2. x をタイプしていらない先頭の文字を削除しましょう。
2. x をタイプして最初のいらない文字を削除しましょう。
3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
4. 今度は、x を使用して誤りを全て修正しましょう。
4. 今度は、x を使用して行内の誤りを全て修正しましょう。
5. 大文字の U をタイプして、行を元の状態に戻しましょう。
6. u をタイプして直前の U コマンドを取消しましょう。
6. u をタイプして直前の U コマンドを取消しましょう。
7. ではコマンドを再実行するのに CTRL-R (CTRL を押したまま R を打つ)を数回
タイプしてみましょう(取消の取消)。
タイプしてみましょう(取り消しの取り消し)。
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
8. これはとても便利なコマンドです。さぁレッスン 2 要約へ進みましょう。
@@ -347,45 +347,47 @@ NOTE:
レッスン 2 要約
1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
2. カーソル位置からの末尾までを削除するには d$ とタイプします。
3. 行全体を削除するには dd とタイプします。
1. カーソル位置から次の単語までを削除するには dw とタイプします。
2. カーソル位置から単語の末尾までを削除するには de とタイプします。
3. カーソル位置から行の末尾までを削除するには d$ とタイプします。
4. 行全体を削除するには dd とタイプします。
4. モーションを繰り返すには数値を付与します: 2w
5. 変更に用いるコマンドの形式は
5. モーションを繰り返すには数値を付与します: 2w
6. 変更に用いるコマンドの形式は
オペレータ [数値] モーション
それぞれ:
オペレータ - 削除 d の類で何をするか。
数値 - そのコマンドを何回繰り返すか。
モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
けるか。
[数値] - そのコマンドを何回繰り返すか。
モーション - w (単語)や e (単語末尾)、$ (行末)などの類で、テキストの
何に対して働きかけるか。
6. 行の先頭に移動するにはゼロを使用します: 0
7. 行の先頭に移動するにはゼロを使用します: 0
8. 前回の動作を取り消す: u (小文字 u)
行全体の変更を取り消す: U (大文字 U)
取り消しの取り消し: CTRL-R
7. 前回の動作を取消す: u (小文字 u)
行全体の変更を取消す: U (大文字 U)
取消しの取消し: CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 3.1: 貼り付けコマンド
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
1. 以下の段落の最初の行にカーソルを移動しましょう。
1. ---> と示された以下の最初の行にカーソルを移動しましょう。
2. dd とタイプして行を削除し、Vim のバッファに格納しましょう。
2. dd とタイプして行を削除し、Vim のレジスタに格納しましょう。
3. 削除した行が本来あるべき位置の上の行まで、カーソルを移動させましょう。
3. 削除した行が本来あるべき位置の上の行である c) 行まで、カーソルを移動させ
ましょう。
4. ノーマルモードで p をタイプして格納した行を画面に戻します。
4. ノーマルモードで p をタイプして格納した行をカーソルの下に戻します。
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
d) 貴方も学ぶことができる?
b) スミレは青い、
c) 知恵とは学ぶもの、
a) バラは赤い、
---> d) 貴方も学ぶことができる?
---> b) スミレは青い、
---> c) 知恵とは学ぶもの、
---> a) バラは赤い、
@@ -393,7 +395,7 @@ NOTE:
レッスン 3.2: 置き換えコマンド
** カーソルの下の文字を置き換えるには r をタイプします **
** カーソルの下の文字を x に置き換えるには rx をタイプします **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
@@ -416,38 +418,38 @@ NOTE:
レッスン 3.3: 変更コマンド
** 単語の一部、もしくは全体を変更するには cw とタイプします **
** 単語の末尾までを変更するには ce とタイプします **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
2. lubw の u の位置にカーソルを移動しましょう。
3. cw とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
3. ce とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
4. 次の間違い(変更すべき文字の先頭)に移動するために <ESC> をタイプします。
4. <ESC> をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
---> This lubw has a few wptfd that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
ce は単語を削除した後、挿入モードに入ることに注意しましょう。
cc は同じことを行全体に対して行います。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 3.4: c を使用したその他の変更
** 変更コマンドは、削除コマンドと同じ様にオブジェクトを使用します **
** 変更オペレータは、削除と同じ様にモーションを使用します **
1. 変更コマンドは、削除コマンドと同じような動作をします。その形式は
1. 変更オペレータは、削除と同じような動作をします。その形式は
c [数値] モーション
2. オブジェクトも同じで、w は単語、 $ は行末などといったものです。
2. モーションも同じで、w は単語、 $ は行末などといったものです。
3. 以下の ---> と示された行にカーソルを移動しましょう。
3. 以下の ---> と示された最初の行にカーソルを移動しましょう。
4. 最初の間違いへカーソルを移動しましょう。
@@ -470,7 +472,7 @@ NOTE:
文字をタイプします。
3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
更することが可能です。例えば ce ならばカーソル位置から単語の終わりまで、
c$ ならば行の終わりまでを変更します。
4. 変更コマンドの形式は
@@ -485,7 +487,7 @@ NOTE:
レッスン 4.1: 位置とファイルの情報
** ファイル内での位置とファイルの状態を表示するには CTRL-G をタイプします。
ファイル内のある行に移動するには G をタイプします **
ファイル内のある行に移動するには G をタイプします **
NOTE: ステップを実行する前に、このレッスン全てに目を通しましょう!!
@@ -496,7 +498,7 @@ NOTE:
NOTE: 画面の右下隅にカーソルの位置が表示されているかもしれません。これは
'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
2. 最下行に移動するために G をタイプしましょう。
2. ファイルの最下行に移動するために G をタイプしましょう。
ファイルの先頭に移動するには gg とタイプしましょう。
3. 先ほどの行の番号をタイプし G をタイプしましょう。最初に CTRL-G を押した行
@@ -508,19 +510,19 @@ NOTE:
レッスン 4.2: 検索コマンド
** 語句を検索するには / と、前方検索する語句をタイプします。**
** 語句を検索するには / と、前方検索する語句をタイプします。 **
1. ノーマルモードで / という文字をタイプします。画面一番下に : コマンドと
同じ様に / が現れることに気づくでしょう。
2. では、'errroor' <ENTER> とタイプしましょう。これが検索したい単語です。
3. 同じ語をもう一度検索するときは 単に n をタイプします。
3. 同じ語をもう一度検索するときは 単に n をタイプします。
逆方向に語句を検索するときは N をタイプします。
4. 逆方向に語句を検索する場合は、/ の代わりに ? コマンドを使用します。
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら文字 o タイプ)をタイプし
ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
@@ -531,7 +533,7 @@ NOTE:
レッスン 4.3: 対応する括弧を検索
** 対応する ),] や } を検索するには % をタイプします **
** 対応する ),] や } を検索するには % をタイプします **
1. 下の ---> で示された行で (,[ か { のどれかにカーソルを移動しましょう。
@@ -554,7 +556,7 @@ NOTE:
レッスン 4.4: 間違いを変更する方法
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
1. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -567,9 +569,8 @@ NOTE:
---> thee best time to see thee flowers is in thee spring.
4. 複数行から見つかる文字を変更するには
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定しま
す。
4. 複数行から見つかる文字の全ての箇所を変更するには
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
:%s/old/new/g ファイル全体で見つかるものに対して変更する。
:%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりな
がら変更する。
@@ -593,7 +594,7 @@ NOTE:
4. 現在行の最初の old を new に置換する。 :s/old/new
現在行の全ての old を new に置換する。 :s/old/new/g
2つの # 間で語句を置換する。 :#,#s/old/new/g
2つの # 行の間で語句を置換する。 :#,#s/old/new/g
ファイルの中の全ての検索語句を置換する。 :%s/old/new/g
'c' を加えると置換の度に確認を求める。 :%s/old/new/gc
@@ -601,10 +602,10 @@ NOTE:
レッスン 5.1: 外部コマンドを実行する方法
** :! の後に実行する外部コマンドをタイプします **
** :! の後に実行する外部コマンドをタイプします **
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ : をタイプしましょう。
これでコマンドがタイプできる様になります。
これでコマンドライン命令がタイプできる様になります。
2. ここで ! という文字(感嘆符)をタイプしましょう。
これで外部シェルコマンドが実行できる様になります。
@@ -624,7 +625,7 @@ NOTE:
レッスン 5.2: その他のファイルへ書き込み
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
1. ディレクトリの一覧を得るために :!dir もしくは :!ls とタイプしましょう。
このあと <ENTER> を押すのは既にご存知ですね。
@@ -634,7 +635,7 @@ NOTE:
3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
4. これによりファイル全体が TEST という名前で保存されます。
もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
もう一度 :!dir もしくは :!ls とタイプしてディレクトリを確認してみましょう。
NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
チュートリアルの複製ができ上がるはずです。
@@ -647,7 +648,7 @@ NOTE:
レッスン 5.3: 選択した書き込み
** ファイルの位置を保存するには、v モーションと :w FILENAME をタイプします。 **
** ファイルの一部を保存するには、v モーションと :w FILENAME をタイプします。 **
1. この行にカーソルを移動します。
@@ -660,20 +661,20 @@ NOTE:
<ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
5. Vim は TEST というファイルに選択された行を書き込むでしょう。
!dir もしくは !ls でそれを確認します。
:!dir もしくは :!ls でそれを確認します。
それは削除しないでおいて下さい。次のレッスンで使用します。
NOTE: v を押すと、Visual 選択が始まります。カーソルを動かすことで、選択範囲を
大きくも小さくもできます。さらに、その選択範囲に対してオペレータを適用
きます。例えば d はテキストを削除します。
きます。例えば d はテキストを削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 5.4: ファイルの取込と合併
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
1. カーソルを以下の行に合わせます。
1. カーソルをこの行のすぐ上に合わせます。
NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れます。下に下がってこ
のレッスンに移動しましょう。
@@ -682,19 +683,18 @@ NOTE:
ここでいう TEST は使うファイルの名前のことです。
読み込まれたファイルは、カーソル行の下にあります。
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
オリジナルとファイルによるものの2つがあることがわかります。
NOTE: 外部コマンドの出力を読み込むことも出来ます。例えば、
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
:r !ls は ls コマンドの出力をカーソル以下に読み込みます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 5 要約
1. :!command によって 外部コマンドを実行します。
1. :!command によって 外部コマンドを実行す
よく使う例:
(Windows) (Unix)
@@ -717,13 +717,14 @@ NOTE:
レッスン 6.1: オープンコマンド
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
2. o (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
3. さらに挿入モードを終了する為に <ESC> をタイプします。
3. いくつか文字をタイプしてから、挿入モードを終了する為に <ESC> を
タイプします。
---> o をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
@@ -735,12 +736,11 @@ NOTE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.2: 追加コマンド
** カーソルの次の位置からテキストを追加するには a とタイプします **
** カーソルの次の位置からテキストを追加するには a とタイプします **
1. カーソルを ---> で示された最初の行へ移動しましょう。
@@ -763,7 +763,7 @@ NOTE: a, i
レッスン 6.3: その他の置換方法
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
ます。
@@ -781,12 +781,11 @@ NOTE: a, i
NOTE: 置換モードは挿入モードに似ていますが、全てのタイプされた文字は既存の文字
を削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.4: テキストのコピーとペースト
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
1. ---> と示された行へ移動し、カーソルを "a)" の後に置いておきます。
@@ -804,12 +803,13 @@ NOTE:
---> a) this is the first item.
b)
NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
NOTE: y をオペレータとして使うこともできます。yw は単語を1つ yank します。
yy は行を1つ yank し、p でその行を put します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.5: オプションの設定
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
1. 次の様に入力して 'ignore' を検索しましょう: /ignore <ENTER>
n を押して何度か検索を繰り返します。
@@ -826,7 +826,7 @@ NOTE:
6. 大文字小文字の区別を無効にするには次の様に入力します: :set noic
NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c
を使用します: /ignore\c <ENTER>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6 要約
@@ -835,13 +835,13 @@ NOTE: 1
O (大文字) をタイプするとカーソルの上の行で挿入モードになる。
2. カーソル上の文字の次からテキストを追加するには a とタイプする。
行末に自動でテキストを挿入するには大文字 A をタイプする。
行末にテキストを挿入するには大文字 A をタイプする。
3. e コマンドは単語の終端カーソルを移動する。
3. e コマンドは単語の終端カーソルを移動する。
4. y オペレータはテキストを yank (コピー)し、p はそれを put (ペースト)する。
5. 大文字の R をタイプすると置換モードに入り、<ESC>を押すと抜ける。
5. 大文字の R をタイプすると置換モードに入り、<ESC> を押すと抜ける。
6. ":set xxx" とタイプするとオプション "xxx" が設定される。
'ic' 'ignorecase' 検索時に大文字小文字の区別しない
@@ -849,7 +849,7 @@ NOTE: 1
'hls' 'hlsearch' マッチするすべてを強調表示する
長い方、短い方、どちらのオプション名でも使用できます。
7. オプションを無効にするには "no" を付与します: :set noic
7. オプションを無効にするには "no" を付与す: :set noic
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 7.1: オンラインヘルプコマンド
@@ -883,15 +883,15 @@ NOTE: 1
使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
を作成します。
1. "vimrc" ファイルの編集を開始す。これはシステムに依存します。
:edit ~/.vimrc UNIX 向け
:edit ~/_vimrc Windows 向け
1. "vimrc" ファイルの編集を開始します。これはシステムに依存します。
:e ~/.vimrc UNIX 向け
:e ~/_vimrc Windows 向け
2. ここでサンプルの "vimrc" を読み込みます。
:read $VIMRUNTIME/vimrc_example.vim
:r $VIMRUNTIME/vimrc_example.vim
3. 以下のようにファイルへ書き込みます。
:write
:w
次回 Vim を起動すると、色づけ構文が使えるようになるでしょう。
この "vimrc" ファイルへ、お好みの設定を追加することができます。
@@ -907,7 +907,7 @@ NOTE: 1
2. 現在のディレクトリに在るファイルを :!ls か :!dir で確認します。
3. コマンドの開始をタイプします: :e
3. コマンドの先頭をタイプします: :e
4. CTRL-D を押すと Vim は "e" から始まるコマンドの一覧を表示します。

View File

@@ -8,7 +8,7 @@
になっています。
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
け時間を使うのかにもよりますが、およそ25から30分です。
け時間を使うのかにもよりますが、およそ30分です。
ATTENTION:
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
@@ -24,7 +24,7 @@
レッスン 1.1: カーソルの移動
** カーソルを移動するには、示される様に h,j,k,l を押します **
** カーソルを移動するには、示される様に h,j,k,l を押します **
^
k ヒント: h キーは左方向に移動します。
< h l > l キーは右方向に移動します。
@@ -65,11 +65,12 @@ NOTE: :q! <ENTER> は全ての変更を破棄します。レッスンにて変
5. 1.3までカーソルを移動させましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.3: テキスト編集 - 削除
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
1. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -87,12 +88,11 @@ NOTE: 全てのレッスンを通じて、覚えようとするのではなく
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.4: テキスト編集 - 挿入
** ノーマルモードにてテキストを挿入するには i を押します **
** ノーマルモードにてテキストを挿入するには i を押します **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
@@ -115,10 +115,10 @@ NOTE: 全てのレッスンを通じて、覚えようとするのではなく
レッスン 1.5: テキスト編集 - 追加
** テキストを追加するには A を押しましょう **
** テキストを追加するには A を押しましょう **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
カーソルがその文字上にあってもかまいません。
カーソルがその行のどの文字上にあってもかまいません。
2. 追加が必要な場所で A をタイプしましょう。
@@ -137,18 +137,17 @@ NOTE: 全てのレッスンを通じて、覚えようとするのではなく
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 1.6: ファイルの編集
** ファイルを保存して終了するには :wq とタイプします **
** ファイルを保存して終了するには :wq とタイプします。 **
!! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
ません
1. 別の端末がある場合はそこで以下の内容を行ってください。そうでなければ、
レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
します
2. シェルプロンプトでこのコマンドをタイプします: vim tutor <ENTER>
'vim' が Vim エディタを起動するコマンド、'tutor' は編集したいファイル
名前です。変更してもよいファイルを使いましょう。
2. シェルプロンプトでこのコマンドをタイプします: vim file.txt <ENTER>
'vim' が Vim エディタを起動するコマンド、'file.txt' は編集したいファイル
名前です。変更できるファイルの名前を使いましょう。
3. 前のレッスンで学んだように、テキストを挿入、削除します。
@@ -186,9 +185,9 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
レッスン 2.1: 削除コマンド
** 単語の末尾までを削除するには dw とタイプしましょう **
** 単語の末尾までを削除するには dw とタイプしましょう **
1. ノーマルモードであることを確認するため <ESC> を押しましょう。
1. 確実にノーマルモードするため <ESC> を押しましょう。
2. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -196,22 +195,22 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
4. 単語を削除するために dw とタイプしましょう。
NOTE: タイプすると、dw という文字がスクリーンの最下行に現われます。
タイプを間違ってしまった時には <ESC> を押してやり直しましょう。
NOTE: d をタイプすると、その文字がスクリーンの最下行に現われます。Vim は
あなたが w をタイプするのを待っています。もし d 以外の文字が表示された
時は何か間違っています。 <ESC> を押してやり直しましょう。
---> この 文 紙 には いくつかの たのしい 必要のない 単語 が 含まれて います。
5. 3 から 4 までを文が正しくなるまで繰り返し、レッスン 2.2 へ進みましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.2: その他の削除コマンド
** 行の末尾までを削除するには d$ とタイプしましょう **
** 行の末尾までを削除するには d$ とタイプしましょう **
1. ノーマルモードであることを確認するのに <ESC> を押しましょう。
1. 確実にノーマルモードにするため <ESC> を押しましょう。
2. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -232,7 +231,7 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
レッスン 2.3: オペレータとモーション
多くのコマンドはオペレータとモーションからテキストに変更を加えます。
テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
削除コマンド d のオペレータは次の様になっています:
d モーション
@@ -248,7 +247,7 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
つまり de とタイプすると、カーソル位置から単語の終わりまでを削除します。
NOTE: 冒険したい人は、ノーマルモードにてコマンドなしにモーションを押して
NOTE: 冒険したい人は、ノーマルモードにてオペレータなしにモーションを押して
みましょう。カーソルが目的語一覧で示される位置に移動するはずです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -259,7 +258,7 @@ NOTE: 冒険したい人は、ノーマルモードにてコマンドなしに
1. 以下の ---> と示された行の先頭にカーソルを移動します。
2. 2w をタイプして単語2つ分に移動します。
2. 2w をタイプして単語2つ分に移動します。
3. 3e をタイプして3つ目の単語の終端に移動します。
@@ -284,24 +283,24 @@ NOTE: 冒険したい人は、ノーマルモードにてコマンドなしに
より多くの削除が行えます:
d 数値 モーション
1. ---> と示された行の行頭部分にカーソルを移動しましょう。
1. ---> と示された行の最初の大文字の単語にカーソルを移動しましょう。
2. UPPER CASE の単語2つを d2w とタイプして削除します。
2. 大文字の単語2つを d2w とタイプして削除します。
3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
3. 連続した大文字の単語を、異なるカウントを指定した1つのコマンドで削除し、
ステップ 1 と 2 を繰り返します。
---> このABC DE行のFGHI JK LMN OP単語はQ RS TUV綺麗になった。
NOTE: オペレータ d とモーションの間にカウントを使った場合、オペレータのない
場合のモーションのように動作します。
例: 3dw と d3w は同等で、3w を削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.6: 行の操作
** 行全体を削除するには dd とタイプします **
** 行全体を削除するには dd とタイプします **
行全体を削除する頻度が多いので、Viのデザイナーは行の削除を d の2回タイプと
いう簡単なものに決めました。
@@ -319,24 +318,25 @@ NOTE: オペレータ d とモーションの間にカウントを使った場
---> 6) 砂糖は甘い
---> 7) オマエモナー
2回タイプで1行に対して作用させる方法は以下で述べるオペレータでも動作します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 2.7: やり直しコマンド
** 最後のコマンドを取り消すには u を押します。U は行全体の取です。 **
** 最後のコマンドを取り消すには u を押します。U は行全体の取り消しです。 **
1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
を移動しましょう。
2. x をタイプしていらない先頭の文字を削除しましょう。
2. x をタイプして最初のいらない文字を削除しましょう。
3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
4. 今度は、x を使用して誤りを全て修正しましょう。
4. 今度は、x を使用して行内の誤りを全て修正しましょう。
5. 大文字の U をタイプして、行を元の状態に戻しましょう。
6. u をタイプして直前の U コマンドを取消しましょう。
6. u をタイプして直前の U コマンドを取消しましょう。
7. ではコマンドを再実行するのに CTRL-R (CTRL を押したまま R を打つ)を数回
タイプしてみましょう(取消の取消)。
タイプしてみましょう(取り消しの取り消し)。
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
8. これはとても便利なコマンドです。さぁレッスン 2 要約へ進みましょう。
@@ -347,45 +347,47 @@ NOTE: オペレータ d とモーションの間にカウントを使った場
レッスン 2 要約
1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
2. カーソル位置からの末尾までを削除するには d$ とタイプします。
3. 行全体を削除するには dd とタイプします。
1. カーソル位置から次の単語までを削除するには dw とタイプします。
2. カーソル位置から単語の末尾までを削除するには de とタイプします。
3. カーソル位置から行の末尾までを削除するには d$ とタイプします。
4. 行全体を削除するには dd とタイプします。
4. モーションを繰り返すには数値を付与します: 2w
5. 変更に用いるコマンドの形式は
5. モーションを繰り返すには数値を付与します: 2w
6. 変更に用いるコマンドの形式は
オペレータ [数値] モーション
それぞれ:
オペレータ - 削除 d の類で何をするか。
数値 - そのコマンドを何回繰り返すか。
モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
けるか。
[数値] - そのコマンドを何回繰り返すか。
モーション - w (単語)や e (単語末尾)、$ (行末)などの類で、テキストの
何に対して働きかけるか。
6. 行の先頭に移動するにはゼロを使用します: 0
7. 行の先頭に移動するにはゼロを使用します: 0
8. 前回の動作を取り消す: u (小文字 u)
行全体の変更を取り消す: U (大文字 U)
取り消しの取り消し: CTRL-R
7. 前回の動作を取消す: u (小文字 u)
行全体の変更を取消す: U (大文字 U)
取消しの取消し: CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 3.1: 貼り付けコマンド
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
1. 以下の段落の最初の行にカーソルを移動しましょう。
1. ---> と示された以下の最初の行にカーソルを移動しましょう。
2. dd とタイプして行を削除し、Vim のバッファに格納しましょう。
2. dd とタイプして行を削除し、Vim のレジスタに格納しましょう。
3. 削除した行が本来あるべき位置の上の行まで、カーソルを移動させましょう。
3. 削除した行が本来あるべき位置の上の行である c) 行まで、カーソルを移動させ
ましょう。
4. ノーマルモードで p をタイプして格納した行を画面に戻します。
4. ノーマルモードで p をタイプして格納した行をカーソルの下に戻します。
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
d) 貴方も学ぶことができる?
b) スミレは青い、
c) 知恵とは学ぶもの、
a) バラは赤い、
---> d) 貴方も学ぶことができる?
---> b) スミレは青い、
---> c) 知恵とは学ぶもの、
---> a) バラは赤い、
@@ -393,7 +395,7 @@ NOTE: オペレータ d とモーションの間にカウントを使った場
レッスン 3.2: 置き換えコマンド
** カーソルの下の文字を置き換えるには r をタイプします **
** カーソルの下の文字を x に置き換えるには rx をタイプします **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
@@ -416,38 +418,38 @@ NOTE: 実際に試しましょう。決して覚えるだけにはしないこ
レッスン 3.3: 変更コマンド
** 単語の一部、もしくは全体を変更するには cw とタイプします **
** 単語の末尾までを変更するには ce とタイプします **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
2. lubw の u の位置にカーソルを移動しましょう。
3. cw とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
3. ce とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
4. 次の間違い(変更すべき文字の先頭)に移動するために <ESC> をタイプします。
4. <ESC> をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
---> This lubw has a few wptfd that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
ce は単語を削除した後、挿入モードに入ることに注意しましょう。
cc は同じことを行全体に対して行います。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 3.4: c を使用したその他の変更
** 変更コマンドは、削除コマンドと同じ様にオブジェクトを使用します **
** 変更オペレータは、削除と同じ様にモーションを使用します **
1. 変更コマンドは、削除コマンドと同じような動作をします。その形式は
1. 変更オペレータは、削除と同じような動作をします。その形式は
c [数値] モーション
2. オブジェクトも同じで、w は単語、 $ は行末などといったものです。
2. モーションも同じで、w は単語、 $ は行末などといったものです。
3. 以下の ---> と示された行にカーソルを移動しましょう。
3. 以下の ---> と示された最初の行にカーソルを移動しましょう。
4. 最初の間違いへカーソルを移動しましょう。
@@ -470,7 +472,7 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
文字をタイプします。
3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
更することが可能です。例えば ce ならばカーソル位置から単語の終わりまで、
c$ ならば行の終わりまでを変更します。
4. 変更コマンドの形式は
@@ -485,7 +487,7 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
レッスン 4.1: 位置とファイルの情報
** ファイル内での位置とファイルの状態を表示するには CTRL-G をタイプします。
ファイル内のある行に移動するには G をタイプします **
ファイル内のある行に移動するには G をタイプします **
NOTE: ステップを実行する前に、このレッスン全てに目を通しましょう!!
@@ -496,7 +498,7 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
NOTE: 画面の右下隅にカーソルの位置が表示されているかもしれません。これは
'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
2. 最下行に移動するために G をタイプしましょう。
2. ファイルの最下行に移動するために G をタイプしましょう。
ファイルの先頭に移動するには gg とタイプしましょう。
3. 先ほどの行の番号をタイプし G をタイプしましょう。最初に CTRL-G を押した行
@@ -508,19 +510,19 @@ NOTE: 画面の右下隅にカーソルの位置が表示されているかも
レッスン 4.2: 検索コマンド
** 語句を検索するには / と、前方検索する語句をタイプします。**
** 語句を検索するには / と、前方検索する語句をタイプします。 **
1. ノーマルモードで / という文字をタイプします。画面一番下に : コマンドと
同じ様に / が現れることに気づくでしょう。
2. では、'errroor' <ENTER> とタイプしましょう。これが検索したい単語です。
3. 同じ語をもう一度検索するときは 単に n をタイプします。
3. 同じ語をもう一度検索するときは 単に n をタイプします。
逆方向に語句を検索するときは N をタイプします。
4. 逆方向に語句を検索する場合は、/ の代わりに ? コマンドを使用します。
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら文字 o タイプ)をタイプし
ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
@@ -531,7 +533,7 @@ NOTE: 検索がファイルの終わりに達すると、オプション 'wrapsc
レッスン 4.3: 対応する括弧を検索
** 対応する ),] や } を検索するには % をタイプします **
** 対応する ),] や } を検索するには % をタイプします **
1. 下の ---> で示された行で (,[ か { のどれかにカーソルを移動しましょう。
@@ -554,7 +556,7 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
レッスン 4.4: 間違いを変更する方法
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
1. 以下の ---> と示された行にカーソルを移動しましょう。
@@ -567,9 +569,8 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
---> thee best time to see thee flowers is in thee spring.
4. 複数行から見つかる文字を変更するには
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定しま
す。
4. 複数行から見つかる文字の全ての箇所を変更するには
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
:%s/old/new/g ファイル全体で見つかるものに対して変更する。
:%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりな
がら変更する。
@@ -593,7 +594,7 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
4. 現在行の最初の old を new に置換する。 :s/old/new
現在行の全ての old を new に置換する。 :s/old/new/g
2つの # 間で語句を置換する。 :#,#s/old/new/g
2つの # 行の間で語句を置換する。 :#,#s/old/new/g
ファイルの中の全ての検索語句を置換する。 :%s/old/new/g
'c' を加えると置換の度に確認を求める。 :%s/old/new/gc
@@ -601,10 +602,10 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
レッスン 5.1: 外部コマンドを実行する方法
** :! の後に実行する外部コマンドをタイプします **
** :! の後に実行する外部コマンドをタイプします **
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ : をタイプしましょう。
これでコマンドがタイプできる様になります。
これでコマンドライン命令がタイプできる様になります。
2. ここで ! という文字(感嘆符)をタイプしましょう。
これで外部シェルコマンドが実行できる様になります。
@@ -624,7 +625,7 @@ NOTE: 全ての : コマンドは <ENTER> を押して終了しなければな
レッスン 5.2: その他のファイルへ書き込み
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
1. ディレクトリの一覧を得るために :!dir もしくは :!ls とタイプしましょう。
このあと <ENTER> を押すのは既にご存知ですね。
@@ -634,7 +635,7 @@ NOTE: 全ての : コマンドは <ENTER> を押して終了しなければな
3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
4. これによりファイル全体が TEST という名前で保存されます。
もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
もう一度 :!dir もしくは :!ls とタイプしてディレクトリを確認してみましょう。
NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
チュートリアルの複製ができ上がるはずです。
@@ -647,7 +648,7 @@ NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると
レッスン 5.3: 選択した書き込み
** ファイルの位置を保存するには、v モーションと :w FILENAME をタイプします。 **
** ファイルの一部を保存するには、v モーションと :w FILENAME をタイプします。 **
1. この行にカーソルを移動します。
@@ -660,20 +661,20 @@ NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると
<ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
5. Vim は TEST というファイルに選択された行を書き込むでしょう。
!dir もしくは !ls でそれを確認します。
:!dir もしくは :!ls でそれを確認します。
それは削除しないでおいて下さい。次のレッスンで使用します。
NOTE: v を押すと、Visual 選択が始まります。カーソルを動かすことで、選択範囲を
大きくも小さくもできます。さらに、その選択範囲に対してオペレータを適用
きます。例えば d はテキストを削除します。
きます。例えば d はテキストを削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 5.4: ファイルの取込と合併
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
1. カーソルを以下の行に合わせます。
1. カーソルをこの行のすぐ上に合わせます。
NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れます。下に下がってこ
のレッスンに移動しましょう。
@@ -682,19 +683,18 @@ NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れ
ここでいう TEST は使うファイルの名前のことです。
読み込まれたファイルは、カーソル行の下にあります。
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
オリジナルとファイルによるものの2つがあることがわかります。
NOTE: 外部コマンドの出力を読み込むことも出来ます。例えば、
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
:r !ls は ls コマンドの出力をカーソル以下に読み込みます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 5 要約
1. :!command によって 外部コマンドを実行します。
1. :!command によって 外部コマンドを実行す
よく使う例:
(Windows) (Unix)
@@ -717,13 +717,14 @@ NOTE: 外部コマンドの出力を読み込むことも出来ます。例え
レッスン 6.1: オープンコマンド
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
2. o (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
3. さらに挿入モードを終了する為に <ESC> をタイプします。
3. いくつか文字をタイプしてから、挿入モードを終了する為に <ESC> を
タイプします。
---> o をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
@@ -735,12 +736,11 @@ NOTE: 外部コマンドの出力を読み込むことも出来ます。例え
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.2: 追加コマンド
** カーソルの次の位置からテキストを追加するには a とタイプします **
** カーソルの次の位置からテキストを追加するには a とタイプします **
1. カーソルを ---> で示された最初の行へ移動しましょう。
@@ -763,7 +763,7 @@ NOTE: a, i と A は同じ挿入モードへ移りますが、文字が挿入さ
レッスン 6.3: その他の置換方法
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
ます。
@@ -781,12 +781,11 @@ NOTE: a, i と A は同じ挿入モードへ移りますが、文字が挿入さ
NOTE: 置換モードは挿入モードに似ていますが、全てのタイプされた文字は既存の文字
を削除します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.4: テキストのコピーとペースト
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
1. ---> と示された行へ移動し、カーソルを "a)" の後に置いておきます。
@@ -804,12 +803,13 @@ NOTE: 置換モードは挿入モードに似ていますが、全てのタイ
---> a) this is the first item.
b)
NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
NOTE: y をオペレータとして使うこともできます。yw は単語を1つ yank します。
yy は行を1つ yank し、p でその行を put します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6.5: オプションの設定
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
1. 次の様に入力して 'ignore' を検索しましょう: /ignore <ENTER>
n を押して何度か検索を繰り返します。
@@ -826,7 +826,7 @@ NOTE: 置換モードは挿入モードに似ていますが、全てのタイ
6. 大文字小文字の区別を無効にするには次の様に入力します: :set noic
NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c
を使用します: /ignore\c <ENTER>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 6 要約
@@ -835,13 +835,13 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
O (大文字) をタイプするとカーソルの上の行で挿入モードになる。
2. カーソル上の文字の次からテキストを追加するには a とタイプする。
行末に自動でテキストを挿入するには大文字 A をタイプする。
行末にテキストを挿入するには大文字 A をタイプする。
3. e コマンドは単語の終端カーソルを移動する。
3. e コマンドは単語の終端カーソルを移動する。
4. y オペレータはテキストを yank (コピー)し、p はそれを put (ペースト)する。
5. 大文字の R をタイプすると置換モードに入り、<ESC>を押すと抜ける。
5. 大文字の R をタイプすると置換モードに入り、<ESC> を押すと抜ける。
6. ":set xxx" とタイプするとオプション "xxx" が設定される。
'ic' 'ignorecase' 検索時に大文字小文字の区別しない
@@ -849,7 +849,7 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
'hls' 'hlsearch' マッチするすべてを強調表示する
長い方、短い方、どちらのオプション名でも使用できます。
7. オプションを無効にするには "no" を付与します: :set noic
7. オプションを無効にするには "no" を付与す: :set noic
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
レッスン 7.1: オンラインヘルプコマンド
@@ -883,15 +883,15 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
を作成します。
1. "vimrc" ファイルの編集を開始す。これはシステムに依存します。
:edit ~/.vimrc UNIX 向け
:edit ~/_vimrc Windows 向け
1. "vimrc" ファイルの編集を開始します。これはシステムに依存します。
:e ~/.vimrc UNIX 向け
:e ~/_vimrc Windows 向け
2. ここでサンプルの "vimrc" を読み込みます。
:read $VIMRUNTIME/vimrc_example.vim
:r $VIMRUNTIME/vimrc_example.vim
3. 以下のようにファイルへ書き込みます。
:write
:w
次回 Vim を起動すると、色づけ構文が使えるようになるでしょう。
この "vimrc" ファイルへ、お好みの設定を追加することができます。
@@ -907,7 +907,7 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
2. 現在のディレクトリに在るファイルを :!ls か :!dir で確認します。
3. コマンドの開始をタイプします: :e
3. コマンドの先頭をタイプします: :e
4. CTRL-D を押すと Vim は "e" から始まるコマンドの一覧を表示します。

View File

@@ -1237,7 +1237,7 @@ $(OUTDIR)/gui_beval.o: gui_beval.c $(INCL) $(GUI_INCL)
$(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL) version.h
$(CC) -c $(CFLAGS) gui_w32.c -o $@
$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL)
$(CC) -c $(CFLAGS) if_cscope.c -o $@
$(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP)

View File

@@ -508,7 +508,8 @@ NETBEANS_LIB = WSock32.lib Ws2_32.lib
# gdi32.lib and comdlg32.lib for printing support
# ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:$(CPU)
comdlg32.lib ole32.lib netapi32.lib uuid.lib user32.lib \
/machine:$(CPU)
!if "$(DELAYLOAD)" == "yes"
CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
!endif
@@ -671,6 +672,7 @@ CFLAGS = $(CFLAGS) /fsanitize=address
!endif
!ifdef NODEBUG
VIM = vim
! if "$(OPTIMIZE)" == "SPACE"
OPTFLAG = /O1
@@ -701,7 +703,9 @@ LIBC = msvcrt.lib
LIBC = libcmt.lib
CFLAGS = $(CFLAGS) /Zl /MT
! endif
!else # DEBUG
VIM = vimd
! if ("$(CPU)" == "i386") || ("$(CPU)" == "ix86")
DEBUGINFO = /ZI
@@ -721,6 +725,7 @@ LIBC = $(LIBC) msvcrtd.lib
LIBC = $(LIBC) libcmtd.lib
CFLAGS = $(CFLAGS) /Zl /MTd
! endif
!endif # DEBUG
!if "$(CL)" == "/D_USING_V110_SDK71_"
@@ -910,9 +915,7 @@ GUI_OBJ = \
$(OUTDIR)\gui_beval.obj \
$(OUTDIR)\gui_w32.obj
GUI_LIB = \
gdi32.lib version.lib $(IME_LIB) \
winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \
/machine:$(CPU)
version.lib $(IME_LIB) winspool.lib comctl32.lib
!else
SUBSYSTEM = console
CUI_INCL = iscygpty.h
@@ -1320,11 +1323,11 @@ conflags = $(conflags) /map /mapinfo:lines
!ENDIF
LINKARGS1 = $(linkdebug) $(conflags)
LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) user32.lib \
LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) \
$(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \
$(TCL_LIB) $(SOUND_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(SOD_LIB) $(LINK_PDB)
# Report link time code generation progress if used.
# Report link time code generation progress if used.
!ifdef NODEBUG
! if $(MSVC_MAJOR) >= 8
! if "$(OPTIMIZE)" != "SPACE"
@@ -1670,7 +1673,7 @@ $(OUTDIR)/gui_w32.obj: $(OUTDIR) gui_w32.c $(INCL) $(GUI_INCL) version.h
$(OUTDIR)/gui_dwrite.obj: $(OUTDIR) gui_dwrite.cpp gui_dwrite.h
$(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c $(INCL) if_cscope.h
$(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c $(INCL)
$(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c $(INCL)
$(CC) $(CFLAGS_OUTDIR) $(LUA_INC) if_lua.c

View File

@@ -908,7 +908,7 @@ highlight.obj : highlight.c vim.h [.auto]config.h feature.h os_unix.h \
if_cscope.obj : if_cscope.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
errors.h globals.h if_cscope.h
errors.h globals.h
if_xcmdsrv.obj : if_xcmdsrv.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \

View File

@@ -1491,13 +1491,14 @@ POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(EXTRA_DEFS)
ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(SANITIZER_CFLAGS) $(LEAK_CFLAGS) $(ABORT_CFLAGS) $(POST_DEFS)
ALL_IF_CFLAGS = $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(RUBY_CFLAGS) $(TCL_CFLAGS)
ALL_IF_CFLAGS_EXTRA = $(LUA_CFLAGS_EXTRA) $(PERL_CFLAGS_EXTRA) $(PYTHON_CFLAGS_EXTRA) $(PYTHON3_CFLAGS_EXTRA) $(RUBY_CFLAGS_EXTRA) $(TCL_CFLAGS_EXTRA)
# Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
# with "-E".
OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) \
$(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) \
$(PYTHON3_CFLAGS) $(TCL_CFLAGS) $(VTERM_CFLAGS) \
LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(ALL_IF_CFLAGS) $(VTERM_CFLAGS) \
-Dinline= -D__extension__= -Dalloca=alloca
LINT_EXTRA = -D"__attribute__(x)="
@@ -1873,7 +1874,7 @@ OBJ_COMMON = \
$(OS_EXTRA_OBJ) \
$(NETBEANS_OBJ) \
$(CHANNEL_OBJ) \
$(XDIFF_OBJS)
$(XDIFF_OBJS_USED)
# The files included by tests are not in OBJ_COMMON.
OBJ_MAIN = \
@@ -3357,7 +3358,7 @@ objects/if_xcmdsrv.o: if_xcmdsrv.c
$(CCC) -o $@ if_xcmdsrv.c
objects/if_lua.o: if_lua.c
$(CCC_NF) $(LUA_CFLAGS) $(ALL_CFLAGS) -o $@ if_lua.c
$(CCC_NF) $(LUA_CFLAGS) $(ALL_CFLAGS) $(LUA_CFLAGS_EXTRA) -o $@ if_lua.c
objects/if_mzsch.o: if_mzsch.c $(MZSCHEME_EXTRA)
$(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c
@@ -3366,22 +3367,22 @@ mzscheme_base.c:
$(MZSCHEME_MZC) --c-mods mzscheme_base.c ++lib scheme/base
objects/if_perl.o: auto/if_perl.c
$(CCC_NF) $(PERL_CFLAGS) $(ALL_CFLAGS) -o $@ auto/if_perl.c
$(CCC_NF) $(PERL_CFLAGS) $(ALL_CFLAGS) $(PERL_CFLAGS_EXTRA) -o $@ auto/if_perl.c
objects/if_perlsfio.o: if_perlsfio.c
$(CCC_NF) $(PERL_CFLAGS) $(ALL_CFLAGS) -o $@ if_perlsfio.c
$(CCC_NF) $(PERL_CFLAGS) $(ALL_CFLAGS) $(PERL_CFLAGS_EXTRA) -o $@ if_perlsfio.c
objects/if_python.o: if_python.c if_py_both.h
$(CCC_NF) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) $(ALL_CFLAGS) -o $@ if_python.c
$(CCC_NF) $(PYTHON_CFLAGS) $(ALL_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
objects/if_python3.o: if_python3.c if_py_both.h
$(CCC_NF) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) $(ALL_CFLAGS) -o $@ if_python3.c
$(CCC_NF) $(PYTHON3_CFLAGS) $(ALL_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
objects/if_ruby.o: if_ruby.c
$(CCC_NF) $(RUBY_CFLAGS) $(ALL_CFLAGS) -o $@ if_ruby.c
$(CCC_NF) $(RUBY_CFLAGS) $(ALL_CFLAGS) $(RUBY_CFLAGS_EXTRA) -o $@ if_ruby.c
objects/if_tcl.o: if_tcl.c
$(CCC_NF) $(TCL_CFLAGS) $(ALL_CFLAGS) -o $@ if_tcl.c
$(CCC_NF) $(TCL_CFLAGS) $(ALL_CFLAGS) $(TCL_CFLAGS_EXTRA) -o $@ if_tcl.c
objects/indent.o: indent.c
$(CCC) -o $@ indent.c
@@ -3459,10 +3460,10 @@ objects/ops.o: ops.c
$(CCC) -o $@ ops.c
objects/option.o: option.c optiondefs.h
$(CCC_NF) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(RUBY_CFLAGS) $(TCL_CFLAGS) $(ALL_CFLAGS) -o $@ option.c
$(CCC_NF) $(ALL_IF_CFLAGS) $(ALL_CFLAGS) $(ALL_IF_CFLAGS_EXTRA) -o $@ option.c
objects/optionstr.o: optionstr.c
$(CCC_NF) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(RUBY_CFLAGS) $(TCL_CFLAGS) $(ALL_CFLAGS) -o $@ optionstr.c
$(CCC_NF) $(ALL_IF_CFLAGS) $(ALL_CFLAGS) $(ALL_IF_CFLAGS_EXTRA) -o $@ optionstr.c
objects/os_qnx.o: os_qnx.c $(VIM_H_DEPENDENCIES)
$(CCC) -o $@ os_qnx.c
@@ -3921,7 +3922,7 @@ objects/highlight.o: highlight.c vim.h protodef.h auto/config.h feature.h \
objects/if_cscope.o: if_cscope.c vim.h protodef.h auto/config.h feature.h \
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h errors.h if_cscope.h
proto.h globals.h errors.h
objects/if_xcmdsrv.o: if_xcmdsrv.c vim.h protodef.h auto/config.h feature.h \
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \

View File

@@ -151,6 +151,7 @@ alloc(size_t size)
return lalloc(size, TRUE);
}
#if defined(FEAT_QUICKFIX) || defined(PROTO)
/*
* alloc() with an ID for alloc_fail().
*/
@@ -163,6 +164,7 @@ alloc_id(size_t size, alloc_id_T id UNUSED)
#endif
return lalloc(size, TRUE);
}
#endif
/*
* Allocate memory and set all bytes to zero.
@@ -178,6 +180,7 @@ alloc_clear(size_t size)
return p;
}
#if defined(FEAT_SIGNS) || defined(PROTO)
/*
* Same as alloc_clear() but with allocation id for testing
*/
@@ -190,6 +193,7 @@ alloc_clear_id(size_t size, alloc_id_T id UNUSED)
#endif
return alloc_clear(size);
}
#endif
/*
* Allocate memory like lalloc() and set all bytes to zero.
@@ -224,7 +228,7 @@ lalloc(size_t size, int message)
{
// Don't hide this message
emsg_silent = 0;
iemsg(_("E341: Internal error: lalloc(0, )"));
iemsg(_(e_internal_error_lalloc_zero));
return NULL;
}
@@ -236,7 +240,7 @@ lalloc(size_t size, int message)
// if some blocks are released call malloc again.
for (;;)
{
// Handle three kind of systems:
// Handle three kinds of systems:
// 1. No check for available memory: Just return.
// 2. Slow check for available memory: call mch_avail_mem() after
// allocating KEEP_ROOM amount of memory.
@@ -339,7 +343,7 @@ do_outofmem_msg(size_t size)
// message fails, e.g. when setting v:errmsg.
did_outofmem_msg = TRUE;
semsg(_("E342: Out of memory! (allocating %lu bytes)"), (long_u)size);
semsg(_(e_out_of_memory_allocating_nr_bytes), (long_u)size);
if (starting == NO_SCREEN)
// Not even finished with initializations and already out of
@@ -648,6 +652,7 @@ ga_clear_strings(garray_T *gap)
ga_clear(gap);
}
#if defined(FEAT_EVAL) || defined(PROTO)
/*
* Copy a growing array that contains a list of strings.
*/
@@ -682,6 +687,7 @@ ga_copy_strings(garray_T *from, garray_T *to)
to->ga_len = from->ga_len;
return OK;
}
#endif
/*
* Initialize a growing array. Don't forget to set ga_itemsize and
@@ -696,7 +702,7 @@ ga_init(garray_T *gap)
}
void
ga_init2(garray_T *gap, int itemsize, int growsize)
ga_init2(garray_T *gap, size_t itemsize, int growsize)
{
ga_init(gap);
gap->ga_itemsize = itemsize;
@@ -783,7 +789,7 @@ ga_concat_strings(garray_T *gap, char *sep)
* When out of memory nothing changes and FAIL is returned.
*/
int
ga_add_string(garray_T *gap, char_u *p)
ga_copy_string(garray_T *gap, char_u *p)
{
char_u *cp = vim_strsave(p);
@@ -799,6 +805,19 @@ ga_add_string(garray_T *gap, char_u *p)
return OK;
}
/*
* Add string "p" to "gap".
* When out of memory "p" is freed and FAIL is returned.
*/
int
ga_add_string(garray_T *gap, char_u *p)
{
if (ga_grow(gap, 1) == FAIL)
return FAIL;
((char_u **)(gap->ga_data))[gap->ga_len++] = p;
return OK;
}
/*
* Concatenate a string to a growarray which contains bytes.
* When "s" is NULL does not do anything.

View File

@@ -51,7 +51,7 @@ alist_clear(alist_T *al)
void
alist_init(alist_T *al)
{
ga_init2(&al->al_ga, (int)sizeof(aentry_T), 5);
ga_init2(&al->al_ga, sizeof(aentry_T), 5);
}
/*
@@ -275,7 +275,7 @@ do_one_arg(char_u *str)
static int
get_arglist(garray_T *gap, char_u *str, int escaped)
{
ga_init2(gap, (int)sizeof(char_u *), 20);
ga_init2(gap, sizeof(char_u *), 20);
while (*str != NUL)
{
if (ga_grow(gap, 1) == FAIL)
@@ -460,7 +460,7 @@ do_arglist(
vim_regfree(regmatch.regprog);
vim_free(p);
if (!didone)
semsg(_(e_nomatch2), ((char_u **)new_ga.ga_data)[i]);
semsg(_(e_no_match_str_2), ((char_u **)new_ga.ga_data)[i]);
}
ga_clear(&new_ga);
}
@@ -471,7 +471,7 @@ do_arglist(
ga_clear(&new_ga);
if (i == FAIL || exp_count == 0)
{
emsg(_(e_nomatch));
emsg(_(e_no_match));
return FAIL;
}
@@ -673,11 +673,11 @@ do_argfile(exarg_T *eap, int argn)
if (argn < 0 || argn >= ARGCOUNT)
{
if (ARGCOUNT <= 1)
emsg(_("E163: There is only one file to edit"));
emsg(_(e_there_is_only_one_file_to_edit));
else if (argn < 0)
emsg(_("E164: Cannot go before first file"));
emsg(_(e_cannot_go_before_first_file));
else
emsg(_("E165: Cannot go beyond last file"));
emsg(_(e_cannot_go_beyond_last_file));
}
else
{
@@ -758,6 +758,33 @@ ex_next(exarg_T *eap)
}
}
/*
* ":argdedupe"
*/
void
ex_argdedupe(exarg_T *eap UNUSED)
{
int i;
int j;
for (i = 0; i < ARGCOUNT; ++i)
for (j = i + 1; j < ARGCOUNT; ++j)
if (fnamecmp(ARGLIST[i].ae_fname, ARGLIST[j].ae_fname) == 0)
{
vim_free(ARGLIST[j].ae_fname);
mch_memmove(ARGLIST + j, ARGLIST + j + 1,
(ARGCOUNT - j - 1) * sizeof(aentry_T));
--ARGCOUNT;
if (curwin->w_arg_idx == j)
curwin->w_arg_idx = i;
else if (curwin->w_arg_idx > j)
--curwin->w_arg_idx;
--j;
}
}
/*
* ":argedit"
*/
@@ -812,7 +839,7 @@ ex_argdelete(exarg_T *eap)
{
if (curwin->w_arg_idx >= ARGCOUNT)
{
emsg(_("E610: No argument to delete"));
emsg(_(e_no_argument_to_delete));
return;
}
eap->line1 = eap->line2 = curwin->w_arg_idx + 1;
@@ -823,7 +850,7 @@ ex_argdelete(exarg_T *eap)
n = eap->line2 - eap->line1 + 1;
if (*eap->arg != NUL)
// Can't have both a range and an argument.
emsg(_(e_invarg));
emsg(_(e_invalid_argument));
else if (n <= 0)
{
// Don't give an error for ":%argdel" if the list is empty.
@@ -1102,7 +1129,7 @@ do_arg_all(
else if (wpnext->w_frame->fr_parent
!= curwin->w_frame->fr_parent)
{
emsg(_("E249: window layout changed unexpectedly"));
emsg(_(e_window_layout_changed_unexpectedly));
i = count;
break;
}

59
src/auto/configure vendored
View File

@@ -662,12 +662,14 @@ CHANNEL_SRC
NETBEANS_OBJ
NETBEANS_SRC
RUBY_LIBS
RUBY_CFLAGS_EXTRA
RUBY_CFLAGS
RUBY_PRO
RUBY_OBJ
RUBY_SRC
vi_cv_path_ruby
TCL_LIBS
TCL_CFLAGS_EXTRA
TCL_CFLAGS
TCL_PRO
TCL_OBJ
@@ -675,15 +677,18 @@ TCL_SRC
vi_cv_path_tcl
PYTHON3_OBJ
PYTHON3_SRC
PYTHON3_CFLAGS_EXTRA
PYTHON3_CFLAGS
PYTHON3_LIBS
vi_cv_path_python3
PYTHON_OBJ
PYTHON_SRC
PYTHON_CFLAGS_EXTRA
PYTHON_CFLAGS
PYTHON_LIBS
vi_cv_path_python
PERL_LIBS
PERL_CFLAGS_EXTRA
PERL_CFLAGS
PERL_PRO
PERL_OBJ
@@ -700,6 +705,7 @@ MZSCHEME_PRO
MZSCHEME_OBJ
MZSCHEME_SRC
vi_cv_path_mzscheme
LUA_CFLAGS_EXTRA
LUA_CFLAGS
LUA_LIBS
LUA_PRO
@@ -708,6 +714,7 @@ LUA_SRC
vi_cv_path_plain_lua
vi_cv_path_luajit
vi_cv_path_lua
XDIFF_OBJS_USED
compiledby
dogvimdiff
dovimdiff
@@ -5249,6 +5256,12 @@ esac
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
has_eval=no
else
has_eval=yes
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-compiledby argument" >&5
$as_echo_n "checking --with-compiledby argument... " >&6; }
@@ -5299,6 +5312,20 @@ else
$as_echo "yes" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking diff feature" >&5
$as_echo_n "checking diff feature... " >&6; }
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled in $features version" >&5
$as_echo "disabled in $features version" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled" >&5
$as_echo "enabled" >&6; }
$as_echo "#define FEAT_DIFF 1" >>confdefs.h
XDIFF_OBJS_USED="\$(XDIFF_OBJS)"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-luainterp argument" >&5
$as_echo_n "checking --enable-luainterp argument... " >&6; }
# Check whether --enable-luainterp was given.
@@ -5312,7 +5339,7 @@ fi
$as_echo "$enable_luainterp" >&6; }
if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
as_fn_error $? "cannot use Lua with tiny or small features" "$LINENO" 5
fi
@@ -5658,6 +5685,7 @@ $as_echo "yes" >&6; }
fi
@@ -6081,7 +6109,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_perlinterp" >&5
$as_echo "$enable_perlinterp" >&6; }
if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
as_fn_error $? "cannot use Perl with tiny or small features" "$LINENO" 5
fi
@@ -6273,6 +6301,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-pythoninterp argument" >&5
$as_echo_n "checking --enable-pythoninterp argument... " >&6; }
# Check whether --enable-pythoninterp was given.
@@ -6285,7 +6314,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pythoninterp" >&5
$as_echo "$enable_pythoninterp" >&6; }
if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
as_fn_error $? "cannot use Python with tiny or small features" "$LINENO" 5
fi
@@ -6623,6 +6652,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-python3interp argument" >&5
$as_echo_n "checking --enable-python3interp argument... " >&6; }
# Check whether --enable-python3interp was given.
@@ -6635,7 +6665,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5
$as_echo "$enable_python3interp" >&6; }
if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
as_fn_error $? "cannot use Python with tiny or small features" "$LINENO" 5
fi
@@ -6969,6 +6999,7 @@ fi
if test "$python_ok" = yes && test "$python3_ok" = yes; then
$as_echo "#define DYNAMIC_PYTHON 1" >>confdefs.h
@@ -7549,6 +7580,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-rubyinterp argument" >&5
$as_echo_n "checking --enable-rubyinterp argument... " >&6; }
# Check whether --enable-rubyinterp was given.
@@ -7561,7 +7593,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
$as_echo "$enable_rubyinterp" >&6; }
if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
as_fn_error $? "cannot use Ruby with tiny or small features" "$LINENO" 5
fi
@@ -7712,6 +7744,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-cscope argument" >&5
$as_echo_n "checking --enable-cscope argument... " >&6; }
# Check whether --enable-cscope was given.
@@ -7738,7 +7771,7 @@ else
fi
if test "$enable_netbeans" = "yes"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use NetBeans with tiny or small features" >&5
$as_echo "cannot use NetBeans with tiny or small features" >&6; }
enable_netbeans="no"
@@ -7761,7 +7794,7 @@ else
fi
if test "$enable_channel" = "yes"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use channels with tiny or small features" >&5
$as_echo "cannot use channels with tiny or small features" >&6; }
enable_channel="no"
@@ -8065,7 +8098,7 @@ else
fi
if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use terminal emulator with tiny or small features" >&5
$as_echo "cannot use terminal emulator with tiny or small features" >&6; }
enable_terminal="no"
@@ -13024,8 +13057,14 @@ $as_echo "Defaulting to no" >&6; }
enable_canberra="no"
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_canberra" >&5
if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use sound with tiny or small features" >&5
$as_echo "cannot use sound with tiny or small features" >&6; }
enable_canberra="no"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_canberra" >&5
$as_echo "$enable_canberra" >&6; }
fi
fi
if test "$enable_canberra" = "yes"; then
if test "x$PKG_CONFIG" != "xno"; then
@@ -13040,7 +13079,7 @@ if test "$enable_canberra" = "yes"; then
$as_echo_n "checking for libcanberra... " >&6; }
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
if `echo "$CFLAGS" | grep -v "$canberra_cflags" >/dev/null`; then
if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
CFLAGS="$CFLAGS $canberra_cflags"
fi
LIBS="$LIBS $canberra_lib"

View File

@@ -515,9 +515,9 @@ au_del_group(char_u *name)
i = au_find_group(name);
if (i == AUGROUP_ERROR) // the group doesn't exist
semsg(_("E367: No such group: \"%s\""), name);
semsg(_(e_no_such_group_str), name);
else if (i == current_augroup)
emsg(_("E936: Cannot delete the current group"));
emsg(_(e_cannot_delete_current_group));
else
{
event_T event;
@@ -580,7 +580,7 @@ do_augroup(char_u *arg, int del_group)
if (del_group)
{
if (*arg == NUL)
emsg(_(e_argreq));
emsg(_(e_argument_required));
else
au_del_group(arg);
}
@@ -687,7 +687,7 @@ find_end_event(
{
if (arg[1] && !VIM_ISWHITE(arg[1]))
{
semsg(_("E215: Illegal character after *: %s"), arg);
semsg(_(e_illegal_character_after_star_str), arg);
return NULL;
}
pat = arg + 1;
@@ -699,9 +699,9 @@ find_end_event(
if ((int)event_name2nr(pat, &p) >= NUM_EVENTS)
{
if (have_group)
semsg(_("E216: No such event: %s"), pat);
semsg(_(e_no_such_event_str), pat);
else
semsg(_("E216: No such group or event: %s"), pat);
semsg(_(e_no_such_group_or_event_str), pat);
return NULL;
}
}
@@ -911,7 +911,7 @@ do_autocmd(exarg_T *eap, char_u *arg_in, int forceit)
if (STRNCMP(cmd, "++once", 6) == 0 && VIM_ISWHITE(cmd[6]))
{
if (once)
semsg(_(e_duparg2), "++once");
semsg(_(e_duplicate_argument_str), "++once");
once = TRUE;
cmd = skipwhite(cmd + 6);
}
@@ -920,7 +920,7 @@ do_autocmd(exarg_T *eap, char_u *arg_in, int forceit)
if ((STRNCMP(cmd, "++nested", 8) == 0 && VIM_ISWHITE(cmd[8])))
{
if (nested)
semsg(_(e_duparg2), "++nested");
semsg(_(e_duplicate_argument_str), "++nested");
nested = TRUE;
cmd = skipwhite(cmd + 8);
}
@@ -929,7 +929,7 @@ do_autocmd(exarg_T *eap, char_u *arg_in, int forceit)
if (STRNCMP(cmd, "nested", 6) == 0 && VIM_ISWHITE(cmd[6]))
{
if (nested)
semsg(_(e_duparg2), "nested");
semsg(_(e_duplicate_argument_str), "nested");
nested = TRUE;
cmd = skipwhite(cmd + 6);
}
@@ -967,7 +967,7 @@ do_autocmd(exarg_T *eap, char_u *arg_in, int forceit)
last_group = AUGROUP_ERROR; // for listing the group name
if (*arg == '*' || *arg == NUL || *arg == '|')
{
if (!forceit && *cmd != NUL)
if (*cmd != NUL)
emsg(_(e_cannot_define_autocommands_for_all_events));
else
for (event = (event_T)0; (int)event < NUM_EVENTS;
@@ -1205,8 +1205,7 @@ do_autocmd_event(
if (is_buflocal && (buflocal_nr == 0
|| buflist_findnr(buflocal_nr) == NULL))
{
semsg(_("E680: <buffer=%d>: invalid buffer number "),
buflocal_nr);
semsg(_(e_buffer_nr_invalid_buffer_number), buflocal_nr);
return FAIL;
}
@@ -1329,7 +1328,7 @@ do_doautocmd(
if (*arg == '*')
{
emsg(_("E217: Can't execute autocommands for ALL events"));
emsg(_(e_cant_execute_autocommands_for_all_events));
return FAIL;
}
@@ -1425,8 +1424,6 @@ ex_doautoall(exarg_T *eap)
if (call_do_modelines && did_aucmd)
do_modelines(0);
}
check_cursor(); // just in case lines got deleted
}
/*
@@ -1533,6 +1530,10 @@ aucmd_prepbuf(
curbuf = buf;
aco->new_curwin_id = curwin->w_id;
set_bufref(&aco->new_curbuf, curbuf);
// disable the Visual area, the position may be invalid in another buffer
aco->save_VIsual_active = VIsual_active;
VIsual_active = FALSE;
}
/*
@@ -1657,6 +1658,11 @@ win_found:
check_cursor();
}
}
check_cursor(); // just in case lines got deleted
VIsual_active = aco->save_VIsual_active;
if (VIsual_active)
check_pos(curbuf, &VIsual);
}
static int autocmd_nested = FALSE;
@@ -1942,7 +1948,7 @@ apply_autocmds_group(
*/
if (nesting == 10)
{
emsg(_("E218: autocommand nesting too deep"));
emsg(_(e_autocommand_nesting_too_deep));
goto BYPASS_AU;
}

View File

@@ -350,7 +350,7 @@ blob_slice_or_index(
}
else
{
semsg(_(e_blobidx), n1);
semsg(_(e_blob_index_out_of_range_nr), n1);
return FAIL;
}
}
@@ -366,7 +366,7 @@ check_blob_index(long bloblen, varnumber_T n1, int quiet)
if (n1 < 0 || n1 > bloblen)
{
if (!quiet)
semsg(_(e_blobidx), n1);
semsg(_(e_blob_index_out_of_range_nr), n1);
return FAIL;
}
return OK;
@@ -381,7 +381,7 @@ check_blob_range(long bloblen, varnumber_T n1, varnumber_T n2, int quiet)
if (n2 < 0 || n2 >= bloblen || n2 < n1)
{
if (!quiet)
semsg(_(e_blobidx), n2);
semsg(_(e_blob_index_out_of_range_nr), n2);
return FAIL;
}
return OK;
@@ -399,7 +399,7 @@ blob_set_range(blob_T *dest, long n1, long n2, typval_T *src)
if (n2 - n1 + 1 != blob_len(src->vval.v_blob))
{
emsg(_("E972: Blob value does not have the right number of bytes"));
emsg(_(e_blob_value_does_not_have_right_number_of_bytes));
return FAIL;
}
@@ -465,7 +465,7 @@ blob_remove(typval_T *argvars, typval_T *rettv, char_u *arg_errmsg)
idx = len + idx;
if (idx < 0 || idx >= len)
{
semsg(_(e_blobidx), idx);
semsg(_(e_blob_index_out_of_range_nr), idx);
return;
}
if (argvars[2].v_type == VAR_UNKNOWN)
@@ -487,7 +487,7 @@ blob_remove(typval_T *argvars, typval_T *rettv, char_u *arg_errmsg)
end = len + end;
if (end >= len || idx > end)
{
semsg(_(e_blobidx), end);
semsg(_(e_blob_index_out_of_range_nr), end);
return;
}
newblob = blob_alloc();
@@ -563,7 +563,7 @@ blob_filter_map(
if (newtv.v_type != VAR_NUMBER && newtv.v_type != VAR_BOOL)
{
clear_tv(&newtv);
emsg(_(e_invalblob));
emsg(_(e_invalid_operation_for_blob));
break;
}
if (filtermap != FILTERMAP_FILTER)
@@ -614,7 +614,7 @@ blob_insert_func(typval_T *argvars, typval_T *rettv)
return; // type error; errmsg already given
if (before < 0 || before > len)
{
semsg(_(e_invarg2), tv_get_string(&argvars[2]));
semsg(_(e_invalid_argument_str), tv_get_string(&argvars[2]));
return;
}
}
@@ -623,7 +623,7 @@ blob_insert_func(typval_T *argvars, typval_T *rettv)
return;
if (val < 0 || val > 255)
{
semsg(_(e_invarg2), tv_get_string(&argvars[1]));
semsg(_(e_invalid_argument_str), tv_get_string(&argvars[1]));
return;
}
@@ -660,7 +660,7 @@ blob_reduce(
{
if (b == NULL || b->bv_ga.ga_len == 0)
{
semsg(_(e_reduceempty), "Blob");
semsg(_(e_reduce_of_an_empty_str_with_no_initial_value), "Blob");
return;
}
initial.v_type = VAR_NUMBER;

View File

@@ -416,7 +416,7 @@ bf_key_init(
keylen = (int)STRLEN(key) / 2;
if (keylen == 0)
{
iemsg(_("E831: bf_key_init() called with empty password"));
iemsg(_(e_bf_key_init_called_with_empty_password));
return;
}
for (i = 0; i < keylen; i++)
@@ -519,7 +519,7 @@ bf_self_test(void)
// warning.
if (ui != 0xffffffffUL || ui + 1 != 0) {
err++;
emsg(_("E820: sizeof(uint32_t) != 4"));
emsg(_(e_sizeof_uint32_isnot_four));
}
if (!bf_check_tables(pax_init, sbx_init, 0x6ffa520a))
@@ -540,7 +540,7 @@ bf_self_test(void)
if (memcmp(bk.uc, bf_test_data[i].cryptxt, 8) != 0)
{
if (err == 0 && memcmp(bk.uc, bf_test_data[i].badcryptxt, 8) == 0)
emsg(_("E817: Blowfish big/little endian use wrong"));
emsg(_(e_blowfish_big_little_endian_use_wrong));
err++;
}
}
@@ -651,7 +651,7 @@ crypt_blowfish_init(
state->method_state = bfs;
// "blowfish" uses a 64 byte buffer, causing it to repeat 8 byte groups 8
// times. "blowfish2" uses a 8 byte buffer to avoid repeating.
// times. "blowfish2" uses an 8 byte buffer to avoid repeating.
bfs->cfb_len = state->method_nr == CRYPT_M_BF ? BF_MAX_CFB_LEN : BF_BLOCK;
if (blowfish_self_test() == FAIL)
@@ -672,12 +672,12 @@ blowfish_self_test(void)
{
if (sha256_self_test() == FAIL)
{
emsg(_("E818: sha256 test failed"));
emsg(_(e_sha256_test_failed));
return FAIL;
}
if (bf_self_test() == FAIL)
{
emsg(_("E819: Blowfish test failed"));
emsg(_(e_blowfish_test_failed));
return FAIL;
}
return OK;

View File

@@ -63,7 +63,6 @@ static void clear_wininfo(buf_T *buf);
static char *msg_loclist = N_("[Location List]");
static char *msg_qflist = N_("[Quickfix List]");
#endif
static char *e_auabort = N_("E855: Autocommands caused command to abort");
// Number of times free_buffer() was called.
static int buf_free_count = 0;
@@ -139,6 +138,7 @@ read_buffer(
return retval;
}
#if defined(FEAT_EVAL) || defined(PROTO)
/*
* Ensure buffer "buf" is loaded. Does not trigger the swap-exists action.
*/
@@ -155,6 +155,7 @@ buffer_ensure_loaded(buf_T *buf)
aucmd_restbuf(&aco);
}
}
#endif
/*
* Open current buffer, that is: open the memfile and read the file into
@@ -427,7 +428,7 @@ buf_hashtab_add(buf_T *buf)
{
sprintf((char *)buf->b_key, "%x", buf->b_fnum);
if (hash_add(&buf_hashtab, buf->b_key) == FAIL)
emsg(_("E931: Buffer cannot be registered"));
emsg(_(e_buffer_cannot_be_registered));
}
static void
@@ -461,8 +462,7 @@ can_unload_buffer(buf_T *buf)
}
}
if (!can_unload)
semsg(_("E937: Attempt to delete a buffer that is in use: %s"),
buf->b_fname);
semsg(_(e_attempt_to_delete_buffer_that_is_in_use_str), buf->b_fname);
return can_unload;
}
@@ -594,7 +594,7 @@ close_buffer(
{
// Autocommands deleted the buffer.
aucmd_abort:
emsg(_(e_auabort));
emsg(_(e_autocommands_caused_command_to_abort));
return FALSE;
}
--buf->b_locked;
@@ -1610,7 +1610,7 @@ do_bufdel(
if (addr_count == 2)
{
if (*arg) // both range and argument is not allowed
return ex_errmsg(e_trailing_arg, arg);
return ex_errmsg(e_trailing_characters_str, arg);
bnr = start_bnr;
}
else // addr_count == 1
@@ -1660,11 +1660,11 @@ do_bufdel(
if (deleted == 0)
{
if (command == DOBUF_UNLOAD)
STRCPY(IObuff, _("E515: No buffers were unloaded"));
STRCPY(IObuff, _(e_no_buffers_were_unloaded));
else if (command == DOBUF_DEL)
STRCPY(IObuff, _("E516: No buffers were deleted"));
STRCPY(IObuff, _(e_no_buffers_were_deleted));
else
STRCPY(IObuff, _("E517: No buffers were wiped out"));
STRCPY(IObuff, _(e_no_buffers_were_wiped_out));
errormsg = (char *)IObuff;
}
else if (deleted >= p_report)
@@ -1823,7 +1823,7 @@ enter_buffer(buf_T *buf)
if (curbuf->b_ml.ml_mfp == NULL) // need to load the file
{
// If there is no filetype, allow for detecting one. Esp. useful for
// ":ball" used in a autocommand. If there already is a filetype we
// ":ball" used in an autocommand. If there already is a filetype we
// might prefer to keep it.
if (*curbuf->b_p_ft == NUL)
did_filetype = FALSE;
@@ -1905,7 +1905,7 @@ no_write_message(void)
{
#ifdef FEAT_TERMINAL
if (term_job_running(curbuf->b_term))
emsg(_("E948: Job still running (add ! to end the job)"));
emsg(_(e_job_still_running_add_bang_to_end_the_job));
else
#endif
emsg(_(e_no_write_since_last_change_add_bang_to_override));
@@ -1916,7 +1916,7 @@ no_write_message_nobang(buf_T *buf UNUSED)
{
#ifdef FEAT_TERMINAL
if (term_job_running(buf->b_term))
emsg(_("E948: Job still running"));
emsg(_(e_job_still_running));
else
#endif
emsg(_(e_no_write_since_last_change));
@@ -4610,15 +4610,7 @@ build_stl_str_hl(
case STL_VIRTCOL:
case STL_VIRTCOL_ALT:
// In list mode virtcol needs to be recomputed
virtcol = wp->w_virtcol;
if (wp->w_p_list && wp->w_lcs_chars.tab1 == NUL)
{
wp->w_p_list = FALSE;
getvcol(wp, &wp->w_cursor, NULL, &virtcol, NULL);
wp->w_p_list = TRUE;
}
++virtcol;
virtcol = wp->w_virtcol + 1;
// Don't display %V if it's the same as %c.
if (opt == STL_VIRTCOL_ALT
&& (virtcol == (colnr_T)(!(State & INSERT) && empty_line
@@ -5031,7 +5023,7 @@ build_stl_str_hl(
sp->userhl = 0;
}
// When inside update_screen we do not want redrawing a stausline, ruler,
// When inside update_screen we do not want redrawing a statusline, ruler,
// title, etc. to trigger another redraw, it may cause an endless loop.
if (updating_screen)
{
@@ -5611,6 +5603,7 @@ bt_prompt(buf_T *buf)
return buf != NULL && buf->b_p_bt[0] == 'p' && buf->b_p_bt[1] == 'r';
}
#if defined(FEAT_PROP_POPUP) || defined(PROTO)
/*
* Return TRUE if "buf" is a buffer for a popup window.
*/
@@ -5620,6 +5613,7 @@ bt_popup(buf_T *buf)
return buf != NULL && buf->b_p_bt != NULL
&& buf->b_p_bt[0] == 'p' && buf->b_p_bt[1] == 'o';
}
#endif
/*
* Return TRUE if "buf" is a "nofile", "acwrite", "terminal" or "prompt"
@@ -5634,6 +5628,7 @@ bt_nofilename(buf_T *buf)
|| buf->b_p_bt[0] == 'p');
}
#if defined(FEAT_QUICKFIX) || defined(PROTO)
/*
* Return TRUE if "buf" has 'buftype' set to "nofile".
*/
@@ -5642,6 +5637,7 @@ bt_nofile(buf_T *buf)
{
return buf != NULL && buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f';
}
#endif
/*
* Return TRUE if "buf" is a "nowrite", "nofile", "terminal" or "prompt"
@@ -5661,7 +5657,7 @@ bt_dontwrite_msg(buf_T *buf)
{
if (bt_dontwrite(buf))
{
emsg(_("E382: Cannot write, 'buftype' option is set"));
emsg(_(e_cannot_write_buftype_option_is_set));
return TRUE;
}
return FALSE;

View File

@@ -667,7 +667,6 @@ buf_write(
int prev_got_int = got_int;
int checking_conversion;
int file_readonly = FALSE; // overwritten file is read-only
static char *err_readonly = "is read-only (cannot override: \"W\" in 'cpoptions')";
#if defined(UNIX) // XXX fix me sometime?
int made_writable = FALSE; // 'w' bit has been set
#endif
@@ -701,7 +700,7 @@ buf_write(
{
// This can happen during startup when there is a stray "w" in the
// vimrc file.
emsg(_(e_emptybuf));
emsg(_(e_empty_buffer));
return FAIL;
}
@@ -897,7 +896,7 @@ buf_write(
--no_wait_return;
msg_scroll = msg_save;
if (nofile_err)
emsg(_("E676: No matching autocommands for acwrite buffer"));
emsg(_(e_no_matching_autocommands_for_acwrite_buffer));
if (nofile_err
#ifdef FEAT_EVAL
@@ -932,7 +931,7 @@ buf_write(
#ifdef FEAT_EVAL
if (!aborting())
#endif
emsg(_("E203: Autocommands deleted or unloaded buffer to be written"));
emsg(_(e_autocommands_deleted_or_unloaded_buffer_to_be_written));
return FAIL;
}
@@ -953,7 +952,7 @@ buf_write(
{
--no_wait_return;
msg_scroll = msg_save;
emsg(_("E204: Autocommand changed number of lines in unexpected way"));
emsg(_(e_autocommands_changed_number_of_lines_in_unexpected_way));
return FAIL;
}
}
@@ -995,7 +994,7 @@ buf_write(
else
{
errnum = (char_u *)"E656: ";
errmsg = (char_u *)_("NetBeans disallows writes of unmodified buffers");
errmsg = (char_u *)_(e_netbeans_disallows_writes_of_unmodified_buffers);
buffer = NULL;
goto fail;
}
@@ -1003,7 +1002,7 @@ buf_write(
else
{
errnum = (char_u *)"E657: ";
errmsg = (char_u *)_("Partial writes disallowed for NetBeans buffers");
errmsg = (char_u *)_(e_partial_writes_disallowed_for_netbeans_buffers);
buffer = NULL;
goto fail;
}
@@ -1050,13 +1049,13 @@ buf_write(
if (S_ISDIR(st_old.st_mode))
{
errnum = (char_u *)"E502: ";
errmsg = (char_u *)_("is a directory");
errmsg = (char_u *)_(e_is_a_directory);
goto fail;
}
if (mch_nodetype(fname) != NODE_WRITABLE)
{
errnum = (char_u *)"E503: ";
errmsg = (char_u *)_("is not a file or writable device");
errmsg = (char_u *)_(e_is_not_file_or_writable_device);
goto fail;
}
// It's a device of some kind (or a fifo) which we can write to
@@ -1072,7 +1071,7 @@ buf_write(
if (c == NODE_OTHER)
{
errnum = (char_u *)"E503: ";
errmsg = (char_u *)_("is not a file or writable device");
errmsg = (char_u *)_(e_is_not_file_or_writable_device);
goto fail;
}
if (c == NODE_WRITABLE)
@@ -1083,7 +1082,7 @@ buf_write(
if (!p_odev)
{
errnum = (char_u *)"E796: ";
errmsg = (char_u *)_("writing to device disabled with 'opendevice' option");
errmsg = (char_u *)_(e_writing_to_device_disabled_with_opendevice_option);
goto fail;
}
# endif
@@ -1099,7 +1098,7 @@ buf_write(
else if (mch_isdir(fname))
{
errnum = (char_u *)"E502: ";
errmsg = (char_u *)_("is a directory");
errmsg = (char_u *)_(e_is_a_directory);
goto fail;
}
if (overwriting)
@@ -1118,12 +1117,12 @@ buf_write(
if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
{
errnum = (char_u *)"E504: ";
errmsg = (char_u *)_(err_readonly);
errmsg = (char_u *)_(e_is_read_only_cannot_override_W_in_cpoptions);
}
else
{
errnum = (char_u *)"E505: ";
errmsg = (char_u *)_("is read-only (add ! to override)");
errmsg = (char_u *)_(e_is_read_only_add_bang_to_override);
}
goto fail;
}
@@ -1477,21 +1476,21 @@ buf_write(
{
if (buf_write_bytes(&write_info) == FAIL)
{
errmsg = (char_u *)_("E506: Can't write to backup file (add ! to override)");
errmsg = (char_u *)_(e_canot_write_to_backup_file_add_bang_to_override);
break;
}
ui_breakcheck();
if (got_int)
{
errmsg = (char_u *)_(e_interr);
errmsg = (char_u *)_(e_interrupted);
break;
}
}
if (close(bfd) < 0 && errmsg == NULL)
errmsg = (char_u *)_("E507: Close error for backup file (add ! to override)");
errmsg = (char_u *)_(e_close_error_for_backup_file_add_bang_to_write_anyway);
if (write_info.bw_len < 0)
errmsg = (char_u *)_("E508: Can't read file for backup (add ! to override)");
errmsg = (char_u *)_(e_cant_read_file_for_backup_add_bang_to_write_anyway);
#ifdef UNIX
set_file_time(backup, st_old.st_atime, st_old.st_mtime);
#endif
@@ -1513,7 +1512,7 @@ buf_write(
vim_free(copybuf);
if (backup == NULL && errmsg == NULL)
errmsg = (char_u *)_("E509: Cannot create backup file (add ! to override)");
errmsg = (char_u *)_(e_cannot_create_backup_file_add_bang_to_write_anyway);
// ignore errors when forceit is TRUE
if ((some_error || errmsg != NULL) && !forceit)
{
@@ -1536,7 +1535,7 @@ buf_write(
if (file_readonly && vim_strchr(p_cpo, CPO_FWRITE) != NULL)
{
errnum = (char_u *)"E504: ";
errmsg = (char_u *)_(err_readonly);
errmsg = (char_u *)_(e_is_read_only_cannot_override_W_in_cpoptions);
goto fail;
}
@@ -1608,7 +1607,7 @@ buf_write(
}
if (backup == NULL && !forceit)
{
errmsg = (char_u *)_("E510: Can't make backup file (add ! to override)");
errmsg = (char_u *)_(e_cant_make_backup_file_add_bang_to_write_anyway);
goto fail;
}
}
@@ -1650,7 +1649,7 @@ buf_write(
ml_preserve(buf, FALSE);
if (got_int)
{
errmsg = (char_u *)_(e_interr);
errmsg = (char_u *)_(e_interrupted);
goto restore_backup;
}
}
@@ -1746,7 +1745,7 @@ buf_write(
wfname = vim_tempname('w', FALSE);
if (wfname == NULL) // Can't write without a tempfile!
{
errmsg = (char_u *)_("E214: Can't find temp file for writing");
errmsg = (char_u *)_(e_cant_find_temp_file_for_writing);
goto restore_backup;
}
}
@@ -1764,7 +1763,7 @@ buf_write(
{
if (!forceit)
{
errmsg = (char_u *)_("E213: Cannot convert (add ! to write without conversion)");
errmsg = (char_u *)_(e_cannot_convert_add_bang_to_write_without_conversion);
goto restore_backup;
}
notconverted = TRUE;
@@ -1821,11 +1820,12 @@ buf_write(
|| (mch_lstat((char *)fname, &st) == 0
&& (st.st_dev != st_old.st_dev
|| st.st_ino != st_old.st_ino)))
errmsg = (char_u *)_("E166: Can't open linked file for writing");
errmsg =
(char_u *)_(e_cant_open_linked_file_for_writing);
else
#endif
{
errmsg = (char_u *)_("E212: Can't open file for writing");
errmsg = (char_u *)_(e_cant_open_file_for_writing);
if (forceit && vim_strchr(p_cpo, CPO_FWRITE) == NULL
&& perm >= 0)
{
@@ -1902,7 +1902,7 @@ restore_backup:
&& st.st_ino != st_old.st_ino)
{
close(fd);
errmsg = (char_u *)_("E949: File changed while writing");
errmsg = (char_u *)_(e_file_changed_while_writing);
goto fail;
}
}
@@ -2178,7 +2178,7 @@ restore_backup:
// If the 'fsync' option is FALSE, don't fsync(). Useful for laptops.
if (p_fs && vim_fsync(fd) != 0 && !device)
{
errmsg = (char_u *)_(e_fsync);
errmsg = (char_u *)_(e_fsync_failed);
end = 0;
}
#endif
@@ -2228,7 +2228,7 @@ restore_backup:
#endif
if (close(fd) != 0)
{
errmsg = (char_u *)_("E512: Close failed");
errmsg = (char_u *)_(e_close_failed);
end = 0;
}
@@ -2285,19 +2285,19 @@ restore_backup:
if (write_info.bw_conv_error)
{
if (write_info.bw_conv_error_lnum == 0)
errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
errmsg = (char_u *)_(e_write_error_conversion_failed_make_fenc_empty_to_override);
else
{
errmsg_allocated = TRUE;
errmsg = alloc(300);
vim_snprintf((char *)errmsg, 300, _("E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"),
vim_snprintf((char *)errmsg, 300, _(e_write_error_conversion_failed_in_line_nr_make_fenc_empty_to_override),
(long)write_info.bw_conv_error_lnum);
}
}
else if (got_int)
errmsg = (char_u *)_(e_interr);
errmsg = (char_u *)_(e_interrupted);
else
errmsg = (char_u *)_("E514: write error (file system full?)");
errmsg = (char_u *)_(e_write_error_file_system_full);
}
// If we have a backup file, try to put it in place of the new file,
@@ -2315,7 +2315,7 @@ restore_backup:
// know we got the message.
if (got_int)
{
msg(_(e_interr));
msg(_(e_interrupted));
out_flush();
}
if ((fd = mch_open((char *)backup, O_RDONLY | O_EXTRA, 0)) >= 0)
@@ -2453,7 +2453,7 @@ restore_backup:
// If the original file does not exist yet
// the current backup file becomes the original file
if (org == NULL)
emsg(_("E205: Patchmode: can't save original file"));
emsg(_(e_patchmode_cant_save_original_file));
else if (mch_stat(org, &st) < 0)
{
vim_rename(backup, (char_u *)org);
@@ -2473,7 +2473,7 @@ restore_backup:
|| (empty_fd = mch_open(org,
O_CREAT | O_EXTRA | O_EXCL | O_NOFOLLOW,
perm < 0 ? 0666 : (perm & 0777))) < 0)
emsg(_("E206: patchmode: can't touch empty original file"));
emsg(_(e_patchmode_cant_touch_empty_original_file));
else
close(empty_fd);
}
@@ -2488,7 +2488,7 @@ restore_backup:
// conversion error.
if (!p_bk && backup != NULL && !write_info.bw_conv_error
&& mch_remove(backup) != 0)
emsg(_("E207: Can't delete backup file"));
emsg(_(e_cant_delete_backup_file));
goto nofail;

View File

@@ -1247,7 +1247,7 @@ del_bytes(
// If "count" is negative the caller must be doing something wrong.
if (count < 1)
{
siemsg("E292: Invalid count for del_bytes(): %ld", count);
siemsg(e_invalid_count_for_del_bytes_nr, count);
return FAIL;
}
@@ -1655,13 +1655,14 @@ open_line(
lead_len = get_leader_len(saved_line, &lead_flags,
dir == BACKWARD, TRUE);
#ifdef FEAT_CINDENT
if (lead_len == 0 && do_cindent)
if (lead_len == 0 && do_cindent && dir == FORWARD)
{
// Check for a line comment after code.
comment_start = check_linecomment(saved_line);
if (comment_start != MAXCOL)
{
lead_len = get_leader_len(saved_line + comment_start,
&lead_flags, dir == BACKWARD, TRUE);
&lead_flags, FALSE, TRUE);
if (lead_len != 0)
{
lead_len += comment_start;

View File

@@ -161,7 +161,7 @@ ch_logfile(char_u *fname, char_u *opt)
file = fopen((char *)fname, *opt == 'w' ? "w" : "a");
if (file == NULL)
{
semsg(_(e_notopen), fname);
semsg(_(e_cant_open_file_str), fname);
return;
}
vim_free(log_name);
@@ -707,8 +707,6 @@ channel_gui_unregister(channel_T *channel)
#endif // FEAT_GUI
static char *e_cannot_connect = N_("E902: Cannot connect to port");
/*
* For Unix we need to call connect() again after connect() failed.
* On Win32 one time is sufficient.
@@ -737,7 +735,7 @@ channel_connect(
if (sd == -1)
{
ch_error(channel, "in socket() in channel_connect().");
PERROR(_("E898: socket() in channel_connect()"));
PERROR(_(e_socket_in_channel_connect));
return -1;
}
@@ -778,7 +776,7 @@ channel_connect(
{
ch_error(channel,
"channel_connect: Connect failed with errno %d", errno);
PERROR(_(e_cannot_connect));
PERROR(_(e_cannot_connect_to_port));
sock_close(sd);
return -1;
}
@@ -824,7 +822,7 @@ channel_connect(
SOCK_ERRNO;
ch_error(channel,
"channel_connect: Connect failed with errno %d", errno);
PERROR(_(e_cannot_connect));
PERROR(_(e_cannot_connect_to_port));
sock_close(sd);
return -1;
}
@@ -863,7 +861,7 @@ channel_connect(
ch_error(channel,
"channel_connect: Connect failed with errno %d",
so_error);
PERROR(_(e_cannot_connect));
PERROR(_(e_cannot_connect_to_port));
sock_close(sd);
return -1;
}
@@ -982,8 +980,7 @@ channel_open(
if ((err = getaddrinfo(hostname, NULL, &hints, &res)) != 0)
{
ch_error(channel, "in getaddrinfo() in channel_open()");
semsg(_("E901: getaddrinfo() in channel_open(): %s"),
gai_strerror(err));
semsg(_(e_getaddrinfo_in_channel_open_str), gai_strerror(err));
channel_free(channel);
return NULL;
}
@@ -1047,7 +1044,7 @@ channel_open(
if ((host = gethostbyname(hostname)) == NULL)
{
ch_error(channel, "in gethostbyname() in channel_open()");
PERROR(_("E901: gethostbyname() in channel_open()"));
PERROR(_(e_gethostbyname_in_channel_open));
channel_free(channel);
return NULL;
}
@@ -1318,7 +1315,7 @@ channel_open_func(typval_T *argvars)
if (argvars[1].v_type != VAR_UNKNOWN
&& (argvars[1].v_type != VAR_DICT || argvars[1].vval.v_dict == NULL))
{
emsg(_(e_invarg));
emsg(_(e_invalid_argument));
return NULL;
}
@@ -1330,7 +1327,7 @@ channel_open_func(typval_T *argvars)
p = vim_strchr(address + 1, ']');
if (p == NULL || *++p != ':')
{
semsg(_(e_invarg2), address);
semsg(_(e_invalid_argument_str), address);
return NULL;
}
}
@@ -1339,14 +1336,14 @@ channel_open_func(typval_T *argvars)
p = vim_strchr(address, ':');
if (p == NULL)
{
semsg(_(e_invarg2), address);
semsg(_(e_invalid_argument_str), address);
return NULL;
}
}
port = strtol((char *)(p + 1), &rest, 10);
if (*address == NUL || port <= 0 || port >= 65536 || *rest != NUL)
{
semsg(_(e_invarg2), address);
semsg(_(e_invalid_argument_str), address);
return NULL;
}
if (is_ipv6)
@@ -1367,7 +1364,7 @@ channel_open_func(typval_T *argvars)
goto theend;
if (opt.jo_timeout < 0)
{
emsg(_(e_invarg));
emsg(_(e_invalid_argument));
goto theend;
}
@@ -2309,7 +2306,7 @@ channel_add_block_id(chanpart_T *chanpart, int id)
garray_T *gap = &chanpart->ch_block_ids;
if (gap->ga_growsize == 0)
ga_init2(gap, (int)sizeof(int), 10);
ga_init2(gap, sizeof(int), 10);
if (ga_grow(gap, 1) == OK)
{
((int *)gap->ga_data)[gap->ga_len] = id;
@@ -2480,7 +2477,7 @@ channel_exe_cmd(channel_T *channel, ch_part_T part, typval_T *argv)
{
ch_error(channel, "received command with non-string argument");
if (p_verbose > 2)
emsg(_("E903: received command with non-string argument"));
emsg(_(e_received_command_with_non_string_argument));
return;
}
arg = argv[1].vval.v_string;
@@ -2537,13 +2534,13 @@ channel_exe_cmd(channel_T *channel, ch_part_T part, typval_T *argv)
{
ch_error(channel, "last argument for expr/call must be a number");
if (p_verbose > 2)
emsg(_("E904: last argument for expr/call must be a number"));
emsg(_(e_last_argument_for_expr_call_must_be_number));
}
else if (is_call && argv[2].v_type != VAR_LIST)
{
ch_error(channel, "third argument for call must be a list");
if (p_verbose > 2)
emsg(_("E904: third argument for call must be a list"));
emsg(_(e_third_argument_for_call_must_be_list));
}
else
{
@@ -2600,7 +2597,7 @@ channel_exe_cmd(channel_T *channel, ch_part_T part, typval_T *argv)
else if (p_verbose > 2)
{
ch_error(channel, "Received unknown command: %s", (char *)cmd);
semsg(_("E905: received unknown command: %s"), cmd);
semsg(_(e_received_unknown_command_str), cmd);
}
}
@@ -3833,7 +3830,7 @@ get_channel_arg(typval_T *tv, int check_open, int reading, ch_part_T part)
}
else
{
semsg(_(e_invarg2), tv_get_string(tv));
semsg(_(e_invalid_argument_str), tv_get_string(tv));
return NULL;
}
if (channel != NULL && reading)
@@ -3843,7 +3840,7 @@ get_channel_arg(typval_T *tv, int check_open, int reading, ch_part_T part)
if (check_open && (channel == NULL || (!channel_is_open(channel)
&& !(reading && has_readahead))))
{
emsg(_("E906: not an open channel"));
emsg(_(e_not_an_open_channel));
return NULL;
}
return channel;
@@ -4051,7 +4048,7 @@ channel_send(
if (!channel->ch_error && fun != NULL)
{
ch_error(channel, "%s(): write while not connected", fun);
semsg(_("E630: %s(): write while not connected"), fun);
semsg(_(e_str_write_while_not_connected), fun);
}
channel->ch_error = TRUE;
return FAIL;
@@ -4197,7 +4194,7 @@ channel_send(
if (!channel->ch_error && fun != NULL)
{
ch_error(channel, "%s(): write failed", fun);
semsg(_("E631: %s(): write failed"), fun);
semsg(_(e_str_write_failed), fun);
}
channel->ch_error = TRUE;
return FAIL;
@@ -4245,7 +4242,7 @@ send_common(
{
if (eval)
{
semsg(_("E917: Cannot use a callback with %s()"), fun);
semsg(_(e_cannot_use_callback_with_str), fun);
return NULL;
}
channel_set_req_callback(channel, *part_read, &opt->jo_callback, id);
@@ -4290,7 +4287,7 @@ ch_expr_common(typval_T *argvars, typval_T *rettv, int eval)
ch_mode = channel_get_mode(channel, part_send);
if (ch_mode == MODE_RAW || ch_mode == MODE_NL)
{
emsg(_("E912: cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel"));
emsg(_(e_cannot_use_evalexpr_sendexpr_with_raw_or_nl_channel));
return;
}

View File

@@ -1240,10 +1240,15 @@ getvcol(
posptr = NULL; // continue until the NUL
else
{
// Special check for an empty line, which can happen on exit, when
// ml_get_buf() always returns an empty string.
if (*ptr == NUL)
pos->col = 0;
colnr_T i;
// In a few cases the position can be beyond the end of the line.
for (i = 0; i < pos->col; ++i)
if (ptr[i] == NUL)
{
pos->col = i;
break;
}
posptr = ptr + pos->col;
if (has_mbyte)
// always start on the first byte
@@ -1471,6 +1476,7 @@ skipwhite(char_u *q)
return p;
}
#if defined(FEAT_EVAL) || defined(PROTO)
/*
* skip over ' ', '\t' and '\n'.
*/
@@ -1483,6 +1489,7 @@ skipwhite_and_nl(char_u *q)
++p;
return p;
}
#endif
/*
* getwhitecols: return the number of whitespace

View File

@@ -66,8 +66,6 @@ cin_is_cinword(char_u *line)
}
#endif
#if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL)
/*
* Skip to the end of a "string" and a 'c' character.
* If there is no string or character, return argument unmodified.
@@ -137,6 +135,21 @@ skip_string(char_u *p)
return p;
}
/*
* Return TRUE if "line[col]" is inside a C string.
*/
int
is_pos_in_string(char_u *line, colnr_T col)
{
char_u *p;
for (p = line; *p && (colnr_T)(p - line) < col; ++p)
p = skip_string(p);
return !((colnr_T)(p - line) <= col);
}
#if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL)
/*
* Find the start of a comment, not knowing if we are in a comment right now.
* Search starts at w_cursor.lnum and goes backwards.
@@ -152,8 +165,6 @@ ind_find_start_comment(void) // XXX
find_start_comment(int ind_maxcomment) // XXX
{
pos_T *pos;
char_u *line;
char_u *p;
int cur_maxcomment = ind_maxcomment;
for (;;)
@@ -164,10 +175,7 @@ find_start_comment(int ind_maxcomment) // XXX
// Check if the comment start we found is inside a string.
// If it is then restrict the search to below this line and try again.
line = ml_get(pos->lnum);
for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p)
p = skip_string(p);
if ((colnr_T)(p - line) <= pos->col)
if (!is_pos_in_string(ml_get(pos->lnum), pos->col))
break;
cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1;
if (cur_maxcomment <= 0)
@@ -188,8 +196,6 @@ find_start_comment(int ind_maxcomment) // XXX
find_start_rawstring(int ind_maxcomment) // XXX
{
pos_T *pos;
char_u *line;
char_u *p;
int cur_maxcomment = ind_maxcomment;
for (;;)
@@ -200,10 +206,7 @@ find_start_rawstring(int ind_maxcomment) // XXX
// Check if the raw string start we found is inside a string.
// If it is then restrict the search to below this line and try again.
line = ml_get(pos->lnum);
for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p)
p = skip_string(p);
if ((colnr_T)(p - line) <= pos->col)
if (!is_pos_in_string(ml_get(pos->lnum), pos->col))
break;
cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1;
if (cur_maxcomment <= 0)
@@ -1223,7 +1226,7 @@ cin_isfuncdecl(
if (*s == ')' && cin_nocode(s + 1))
{
// ')' at the end: may have found a match
// Check for he previous line not to end in a backslash:
// Check for the previous line not to end in a backslash:
// #if defined(x) && {backslash}
// defined(y)
lnum = first_lnum - 1;
@@ -1792,7 +1795,7 @@ parse_cino(buf_T *buf)
buf->b_ind_unclosed2 = sw;
// Suppress ignoring spaces from the indent of a line starting with an
// unclosed parentheses.
// unclosed parenthesis.
buf->b_ind_unclosed_noignore = 0;
// If the opening paren is the last nonwhite character on the line, and
@@ -1804,11 +1807,11 @@ parse_cino(buf_T *buf)
// an unclosed parenthesis.
buf->b_ind_unclosed_whiteok = 0;
// Indent a closing parentheses under the line start of the matching
// opening parentheses.
// Indent a closing parenthesis under the line start of the matching
// opening parenthesis.
buf->b_ind_matching_paren = 0;
// Indent a closing parentheses under the previous line.
// Indent a closing parenthesis under the previous line.
buf->b_ind_paren_prev = 0;
// Extra indent for comments.

View File

@@ -119,7 +119,7 @@ sendToLocalVim(char_u *cmd, int asExpr, char_u **result)
{
if (ret == NULL)
{
char *err = _(e_invexprmsg);
char *err = _(e_invalid_expression_received);
size_t len = STRLEN(cmd) + STRLEN(err) + 5;
char_u *msg;
@@ -709,7 +709,7 @@ check_connection(void)
make_connection();
if (X_DISPLAY == NULL)
{
emsg(_("E240: No connection to the X server"));
emsg(_(e_no_connection_to_x_server));
return FAIL;
}
return OK;
@@ -759,7 +759,7 @@ remote_common(typval_T *argvars, typval_T *rettv, int expr)
vim_free(r);
}
else
semsg(_("E241: Unable to send to %s"), server_name);
semsg(_(e_unable_to_send_to_str), server_name);
return;
}
@@ -929,7 +929,7 @@ f_remote_read(typval_T *argvars UNUSED, typval_T *rettv)
|| serverReadReply(X_DISPLAY, serverStrToWin(serverid),
&r, FALSE, timeout) < 0)
# endif
emsg(_("E277: Unable to read a server reply"));
emsg(_(e_unable_to_read_server_reply));
}
#endif
rettv->v_type = VAR_STRING;
@@ -972,7 +972,7 @@ f_remote_startserver(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
if (server == NULL)
return; // type error; errmsg already given
if (serverName != NULL)
emsg(_("E941: already started a server"));
emsg(_(e_already_started_server));
else
{
# ifdef FEAT_X11
@@ -983,7 +983,7 @@ f_remote_startserver(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
# endif
}
#else
emsg(_("E942: +clientserver feature not available"));
emsg(_(e_clientserver_feature_not_available));
#endif
}
@@ -1016,7 +1016,7 @@ f_server2client(typval_T *argvars UNUSED, typval_T *rettv)
if (serverSendReply(server, reply) < 0)
{
emsg(_("E258: Unable to send to client"));
emsg(_(e_unable_to_send_to_client));
return;
}
rettv->vval.v_number = 0;

View File

@@ -567,7 +567,7 @@ clip_get_word_boundaries(Clipboard_T *cb, int row, int col)
return;
p = ScreenLines + LineOffset[row];
// Correct for starting in the right halve of a double-wide char
// Correct for starting in the right half of a double-wide char
if (enc_dbcs != 0)
col -= dbcs_screen_head_off(p, p + col);
else if (enc_utf8 && p[col] == 0)
@@ -1030,7 +1030,7 @@ clip_copy_modeless_selection(int both UNUSED)
if (row2 > clip_star.max_row)
row2 = clip_star.max_row;
#endif
// correct starting point for being on right halve of double-wide char
// correct starting point for being on right half of double-wide char
p = ScreenLines + LineOffset[row1];
if (enc_dbcs != 0)
col1 -= (*mb_head_off)(p, p + col1);
@@ -1140,7 +1140,7 @@ clip_copy_modeless_selection(int both UNUSED)
bufp);
}
}
// Skip right halve of double-wide character.
// Skip right half of double-wide character.
if (ScreenLines[off + i + 1] == 0)
++i;
}
@@ -1305,12 +1305,12 @@ check_clipboard_option(void)
p += 8;
new_exclude_prog = vim_regcomp(p, RE_MAGIC);
if (new_exclude_prog == NULL)
errmsg = e_invarg;
errmsg = e_invalid_argument;
break;
}
else
{
errmsg = e_invarg;
errmsg = e_invalid_argument;
break;
}
if (*p == ',')
@@ -1540,6 +1540,7 @@ clip_x11_notify_cb(Widget w UNUSED, Atom *sel_atom UNUSED, Atom *target UNUSED)
/*
* Property callback to get a timestamp for XtOwnSelection.
*/
# if (defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)) || defined(PROTO)
static void
clip_x11_timestamp_cb(
Widget w,
@@ -1592,6 +1593,7 @@ x11_setup_selection(Widget w)
XtAddEventHandler(w, PropertyChangeMask, False,
/*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
}
# endif
static void
clip_x11_request_selection_cb(

View File

@@ -366,13 +366,13 @@ ExpandOne(
// are wildcards, the real problem is that there was no match,
// causing the pattern to be added, which has illegal characters.
if (!(options & WILD_SILENT) && (options & WILD_LIST_NOTFOUND))
semsg(_(e_nomatch2), str);
semsg(_(e_no_match_str_2), str);
#endif
}
else if (xp->xp_numfiles == 0)
{
if (!(options & WILD_SILENT))
semsg(_(e_nomatch2), str);
semsg(_(e_no_match_str_2), str);
}
else
{
@@ -2342,7 +2342,7 @@ expand_shellcmd(
// Go over all directories in $PATH. Expand matches in that directory and
// collect them in "ga". When "." is not in $PATH also expand for the
// current directory, to find "subdir/cmd".
ga_init2(&ga, (int)sizeof(char *), 10);
ga_init2(&ga, sizeof(char *), 10);
hash_init(&found_ht);
for (s = path; ; s = e)
{
@@ -2497,7 +2497,7 @@ ExpandUserDefined(
if (retstr == NULL)
return FAIL;
ga_init2(&ga, (int)sizeof(char *), 3);
ga_init2(&ga, sizeof(char *), 3);
for (s = retstr; *s != NUL; s = e)
{
e = vim_strchr(s, '\n');
@@ -2543,7 +2543,7 @@ ExpandUserList(
if (retlist == NULL)
return FAIL;
ga_init2(&ga, (int)sizeof(char *), 3);
ga_init2(&ga, sizeof(char *), 3);
// Loop over the items in the list.
FOR_ALL_LIST_ITEMS(retlist, li)
{
@@ -2903,7 +2903,7 @@ f_getcompletion(typval_T *argvars, typval_T *rettv)
pat = tv_get_string(&argvars[0]);
if (argvars[1].v_type != VAR_STRING)
{
semsg(_(e_invarg2), "type must be a string");
semsg(_(e_invalid_argument_str), "type must be a string");
return;
}
type = tv_get_string(&argvars[1]);
@@ -2933,7 +2933,7 @@ f_getcompletion(typval_T *argvars, typval_T *rettv)
xpc.xp_context = cmdcomplete_str_to_type(type);
if (xpc.xp_context == EXPAND_NOTHING)
{
semsg(_(e_invarg2), type);
semsg(_(e_invalid_argument_str), type);
return;
}

View File

@@ -37,11 +37,13 @@ get_histentry(int hist_type)
return history[hist_type];
}
#if defined(FEAT_VIMINFO) || defined(PROTO)
void
set_histentry(int hist_type, histentry_T *entry)
{
history[hist_type] = entry;
}
#endif
int *
get_hisidx(int hist_type)
@@ -49,11 +51,13 @@ get_hisidx(int hist_type)
return &hisidx[hist_type];
}
#if defined(FEAT_VIMINFO) || defined(PROTO)
int *
get_hisnum(int hist_type)
{
return &hisnum[hist_type];
}
#endif
/*
* Translate a history character to the associated type number.
@@ -724,7 +728,7 @@ ex_history(exarg_T *eap)
else
{
*end = i;
semsg(_(e_trailing_arg), arg);
semsg(_(e_trailing_characters_str), arg);
return;
}
}
@@ -736,7 +740,7 @@ ex_history(exarg_T *eap)
end = arg;
if (!get_list_range(&end, &hisidx1, &hisidx2) || *end != NUL)
{
semsg(_(e_trailing_arg), end);
semsg(_(e_trailing_characters_str), end);
return;
}

View File

@@ -37,10 +37,13 @@ X_PRE_LIBS = @X_PRE_LIBS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIB@
XDIFF_OBJS_USED = @XDIFF_OBJS_USED@
LUA_LIBS = @LUA_LIBS@
LUA_SRC = @LUA_SRC@
LUA_OBJ = @LUA_OBJ@
LUA_CFLAGS = @LUA_CFLAGS@
LUA_CFLAGS_EXTRA = @LUA_CFLAGS_EXTRA@
LUA_PRO = @LUA_PRO@
MZSCHEME_LIBS = @MZSCHEME_LIBS@
@@ -60,15 +63,18 @@ PERL_SRC = @PERL_SRC@
PERL_OBJ = @PERL_OBJ@
PERL_PRO = @PERL_PRO@
PERL_CFLAGS = @PERL_CFLAGS@
PERL_CFLAGS_EXTRA = @PERL_CFLAGS_EXTRA@
PYTHON_SRC = @PYTHON_SRC@
PYTHON_OBJ = @PYTHON_OBJ@
PYTHON_CFLAGS = @PYTHON_CFLAGS@
PYTHON_CFLAGS_EXTRA = @PYTHON_CFLAGS_EXTRA@
PYTHON_LIBS = @PYTHON_LIBS@
PYTHON3_SRC = @PYTHON3_SRC@
PYTHON3_OBJ = @PYTHON3_OBJ@
PYTHON3_CFLAGS = @PYTHON3_CFLAGS@
PYTHON3_CFLAGS_EXTRA = @PYTHON3_CFLAGS_EXTRA@
PYTHON3_LIBS = @PYTHON3_LIBS@
TCL = @vi_cv_path_tcl@
@@ -76,6 +82,7 @@ TCL_SRC = @TCL_SRC@
TCL_OBJ = @TCL_OBJ@
TCL_PRO = @TCL_PRO@
TCL_CFLAGS = @TCL_CFLAGS@
TCL_CFLAGS_EXTRA = @TCL_CFLAGS_EXTRA@
TCL_LIBS = @TCL_LIBS@
NETBEANS_SRC = @NETBEANS_SRC@
@@ -91,6 +98,7 @@ RUBY_SRC = @RUBY_SRC@
RUBY_OBJ = @RUBY_OBJ@
RUBY_PRO = @RUBY_PRO@
RUBY_CFLAGS = @RUBY_CFLAGS@
RUBY_CFLAGS_EXTRA = @RUBY_CFLAGS_EXTRA@
RUBY_LIBS = @RUBY_LIBS@
AWK = @AWK@

View File

@@ -540,6 +540,12 @@ esac
AC_SUBST(dovimdiff)
AC_SUBST(dogvimdiff)
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
has_eval=no
else
has_eval=yes
fi
AC_MSG_CHECKING(--with-compiledby argument)
AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
compiledby="$withval"; AC_MSG_RESULT($withval),
@@ -567,6 +573,16 @@ else
AC_MSG_RESULT(yes)
fi
AC_MSG_CHECKING([diff feature])
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
AC_MSG_RESULT([disabled in $features version])
else
AC_MSG_RESULT(enabled)
AC_DEFINE(FEAT_DIFF)
XDIFF_OBJS_USED="\$(XDIFF_OBJS)"
AC_SUBST(XDIFF_OBJS_USED)
fi
dnl Check for Lua feature.
AC_MSG_CHECKING(--enable-luainterp argument)
AC_ARG_ENABLE(luainterp,
@@ -575,7 +591,7 @@ AC_ARG_ENABLE(luainterp,
AC_MSG_RESULT($enable_luainterp)
if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_ERROR([cannot use Lua with tiny or small features])
fi
@@ -781,6 +797,7 @@ if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
AC_SUBST(LUA_PRO)
AC_SUBST(LUA_LIBS)
AC_SUBST(LUA_CFLAGS)
AC_SUBST(LUA_CFLAGS_EXTRA)
fi
@@ -1061,7 +1078,7 @@ AC_ARG_ENABLE(perlinterp,
[enable_perlinterp="no"])
AC_MSG_RESULT($enable_perlinterp)
if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_ERROR([cannot use Perl with tiny or small features])
fi
AC_SUBST(vi_cv_path_perl)
@@ -1201,6 +1218,7 @@ AC_SUBST(PERL_SRC)
AC_SUBST(PERL_OBJ)
AC_SUBST(PERL_PRO)
AC_SUBST(PERL_CFLAGS)
AC_SUBST(PERL_CFLAGS_EXTRA)
AC_SUBST(PERL_LIBS)
AC_MSG_CHECKING(--enable-pythoninterp argument)
@@ -1209,7 +1227,7 @@ AC_ARG_ENABLE(pythoninterp,
[enable_pythoninterp="no"])
AC_MSG_RESULT($enable_pythoninterp)
if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_ERROR([cannot use Python with tiny or small features])
fi
@@ -1433,6 +1451,7 @@ fi
AC_SUBST(PYTHON_LIBS)
AC_SUBST(PYTHON_CFLAGS)
AC_SUBST(PYTHON_CFLAGS_EXTRA)
AC_SUBST(PYTHON_SRC)
AC_SUBST(PYTHON_OBJ)
@@ -1443,7 +1462,7 @@ AC_ARG_ENABLE(python3interp,
[enable_python3interp="no"])
AC_MSG_RESULT($enable_python3interp)
if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_ERROR([cannot use Python with tiny or small features])
fi
@@ -1650,6 +1669,7 @@ fi
AC_SUBST(PYTHON3_LIBS)
AC_SUBST(PYTHON3_CFLAGS)
AC_SUBST(PYTHON3_CFLAGS_EXTRA)
AC_SUBST(PYTHON3_SRC)
AC_SUBST(PYTHON3_OBJ)
@@ -1946,6 +1966,7 @@ AC_SUBST(TCL_SRC)
AC_SUBST(TCL_OBJ)
AC_SUBST(TCL_PRO)
AC_SUBST(TCL_CFLAGS)
AC_SUBST(TCL_CFLAGS_EXTRA)
AC_SUBST(TCL_LIBS)
AC_MSG_CHECKING(--enable-rubyinterp argument)
@@ -1954,7 +1975,7 @@ AC_ARG_ENABLE(rubyinterp,
[enable_rubyinterp="no"])
AC_MSG_RESULT($enable_rubyinterp)
if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_ERROR([cannot use Ruby with tiny or small features])
fi
@@ -2050,6 +2071,7 @@ AC_SUBST(RUBY_SRC)
AC_SUBST(RUBY_OBJ)
AC_SUBST(RUBY_PRO)
AC_SUBST(RUBY_CFLAGS)
AC_SUBST(RUBY_CFLAGS_EXTRA)
AC_SUBST(RUBY_LIBS)
AC_MSG_CHECKING(--enable-cscope argument)
@@ -2066,7 +2088,7 @@ AC_ARG_ENABLE(netbeans,
[ --disable-netbeans Disable NetBeans integration support.],
, [enable_netbeans="yes"])
if test "$enable_netbeans" = "yes"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
enable_netbeans="no"
else
@@ -2081,7 +2103,7 @@ AC_ARG_ENABLE(channel,
[ --disable-channel Disable process communication support.],
, [enable_channel="yes"])
if test "$enable_channel" = "yes"; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_RESULT([cannot use channels with tiny or small features])
enable_channel="no"
else
@@ -2189,7 +2211,7 @@ AC_ARG_ENABLE(terminal,
[ --enable-terminal Enable terminal emulation support.],
, [enable_terminal="auto"])
if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
if test "$has_eval" = "no"; then
AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
enable_terminal="no"
else
@@ -3778,7 +3800,12 @@ if test "$enable_canberra" = "maybe"; then
enable_canberra="no"
fi
else
AC_MSG_RESULT($enable_canberra)
if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
AC_MSG_RESULT([cannot use sound with tiny or small features])
enable_canberra="no"
else
AC_MSG_RESULT($enable_canberra)
fi
fi
if test "$enable_canberra" = "yes"; then
if test "x$PKG_CONFIG" != "xno"; then
@@ -3792,7 +3819,7 @@ if test "$enable_canberra" = "yes"; then
AC_MSG_CHECKING(for libcanberra)
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
if `echo "$CFLAGS" | grep -v "$canberra_cflags" >/dev/null`; then
if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
CFLAGS="$CFLAGS $canberra_cflags"
fi
LIBS="$LIBS $canberra_lib"

View File

@@ -200,7 +200,7 @@ crypt_method_nr_from_magic(char *ptr, int len)
i = (int)STRLEN(crypt_magic_head);
if (len >= i && memcmp(ptr, crypt_magic_head, i) == 0)
emsg(_("E821: File is encrypted with unknown method"));
emsg(_(e_file_is_encrypted_with_unknown_method));
return -1;
}
@@ -247,6 +247,7 @@ crypt_get_header_len(int method_nr)
}
#if defined(FEAT_SODIUM) || defined(PROTO)
/*
* Get maximum crypt method specific length of the file header in bytes.
*/
@@ -265,6 +266,7 @@ crypt_get_max_header_len()
}
return max;
}
#endif
/*
* Set the crypt method for buffer "buf" to "method_nr" using the int value as

View File

@@ -594,7 +594,7 @@ dbg_parsearg(
bp->dbg_type = DBG_EXPR;
else
{
semsg(_(e_invarg2), p);
semsg(_(e_invalid_argument_str), p);
return FAIL;
}
p = skipwhite(p + 4);
@@ -619,7 +619,7 @@ dbg_parsearg(
|| (here && *p != NUL)
|| (bp->dbg_type == DBG_FUNC && strstr((char *)p, "()") != NULL))
{
semsg(_(e_invarg2), arg);
semsg(_(e_invalid_argument_str), arg);
return FAIL;
}
@@ -815,7 +815,7 @@ ex_breakdel(exarg_T *eap)
}
if (todel < 0)
semsg(_("E161: Breakpoint not found: %s"), eap->arg);
semsg(_(e_breakpoint_not_found_str), eap->arg);
else
{
while (gap->ga_len > 0)

View File

@@ -720,7 +720,7 @@ dict_get_number_check(dict_T *d, char_u *key)
return 0;
if (di->di_tv.v_type != VAR_NUMBER)
{
semsg(_(e_invarg2), tv_get_string(&di->di_tv));
semsg(_(e_invalid_argument_str), tv_get_string(&di->di_tv));
return 0;
}
return tv_get_number(&di->di_tv);
@@ -759,7 +759,7 @@ dict2string(typval_T *tv, int copyID, int restore_copyID)
if ((d = tv->vval.v_dict) == NULL)
return NULL;
ga_init2(&ga, (int)sizeof(char), 80);
ga_init2(&ga, sizeof(char), 80);
ga_append(&ga, '{');
todo = (int)d->dv_hashtab.ht_used;
@@ -962,7 +962,7 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
if (*skipwhite(*arg) == ':')
semsg(_(e_no_white_space_allowed_before_str_str), ":", *arg);
else
semsg(_(e_missing_dict_colon), *arg);
semsg(_(e_missing_colon_in_dictionary), *arg);
clear_tv(&tvkey);
goto failret;
}
@@ -1002,7 +1002,7 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
item = dict_find(d, key, -1);
if (item != NULL)
{
semsg(_(e_duplicate_key), key);
semsg(_(e_duplicate_key_in_dicitonary), key);
clear_tv(&tvkey);
clear_tv(&tv);
goto failret;
@@ -1042,7 +1042,7 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
if (**arg == ',')
semsg(_(e_no_white_space_allowed_before_str_str), ",", *arg);
else
semsg(_(e_missing_dict_comma), *arg);
semsg(_(e_missing_comma_in_dictionary), *arg);
goto failret;
}
}
@@ -1116,7 +1116,7 @@ dict_extend(dict_T *d1, dict_T *d2, char_u *action, char *func_name)
}
else if (*action == 'e')
{
semsg(_("E737: Key already exists: %s"), hi2->hi_key);
semsg(_(e_key_already_exists_str), hi2->hi_key);
break;
}
else if (*action == 'f' && HI2DI(hi2) != di1)
@@ -1257,7 +1257,7 @@ dict_extend_func(
break;
if (i == 3)
{
semsg(_(e_invarg2), action);
semsg(_(e_invalid_argument_str), action);
return;
}
}
@@ -1354,8 +1354,7 @@ dict_filter_map(
if (filtermap == FILTERMAP_MAP)
{
if (argtype != NULL && check_typval_arg_type(
argtype->tt_member, &newtv,
func_name, 0) == FAIL)
argtype->tt_member, &newtv, func_name, 0) == FAIL)
{
clear_tv(&newtv);
break;
@@ -1414,7 +1413,7 @@ dict_remove(typval_T *argvars, typval_T *rettv, char_u *arg_errmsg)
di = dict_find(d, key, -1);
if (di == NULL)
{
semsg(_(e_dictkey), key);
semsg(_(e_key_not_present_in_dictionary), key);
return;
}
@@ -1449,7 +1448,7 @@ dict_list(typval_T *argvars, typval_T *rettv, int what)
if (argvars[0].v_type != VAR_DICT)
{
emsg(_(e_dictreq));
emsg(_(e_dictionary_required));
return;
}
@@ -1572,7 +1571,7 @@ f_has_key(typval_T *argvars, typval_T *rettv)
if (argvars[0].v_type != VAR_DICT)
{
emsg(_(e_dictreq));
emsg(_(e_dictionary_required));
return;
}
if (argvars[0].vval.v_dict == NULL)

View File

@@ -64,6 +64,14 @@ typedef struct {
garray_T dout_ga; // used for internal diff
} diffout_T;
// used for recording hunks from xdiff
typedef struct {
linenr_T lnum_orig;
long count_orig;
linenr_T lnum_new;
long count_new;
} diffhunk_T;
// two diff inputs and one result
typedef struct {
diffin_T dio_orig; // original file input
@@ -84,12 +92,12 @@ static int diff_cmp(char_u *s1, char_u *s2);
#ifdef FEAT_FOLDING
static void diff_fold_update(diff_T *dp, int skip_idx);
#endif
static void diff_read(int idx_orig, int idx_new, diffout_T *fname);
static void diff_read(int idx_orig, int idx_new, diffio_T *dio);
static void diff_copy_entry(diff_T *dprev, diff_T *dp, int idx_orig, int idx_new);
static diff_T *diff_alloc_new(tabpage_T *tp, diff_T *dprev, diff_T *dp);
static int parse_diff_ed(char_u *line, linenr_T *lnum_orig, long *count_orig, linenr_T *lnum_new, long *count_new);
static int parse_diff_unified(char_u *line, linenr_T *lnum_orig, long *count_orig, linenr_T *lnum_new, long *count_new);
static int xdiff_out(void *priv, mmbuffer_t *mb, int nbuf);
static int parse_diff_ed(char_u *line, diffhunk_T *hunk);
static int parse_diff_unified(char_u *line, diffhunk_T *hunk);
static int xdiff_out(long start_a, long count_a, long start_b, long count_b, void *priv);
#define FOR_ALL_DIFFBLOCKS_IN_TAB(tp, dp) \
for ((dp) = (tp)->tp_first_diff; (dp) != NULL; (dp) = (dp)->df_next)
@@ -693,11 +701,11 @@ diff_redraw(
if (wp_other != NULL && curwin->w_p_scb)
{
if (used_max_fill_curwin)
// The current window was set to used the maximum number of filler
// The current window was set to use the maximum number of filler
// lines, may need to reduce them.
diff_set_topline(wp_other, curwin);
else if (used_max_fill_other)
// The other window was set to used the maximum number of filler
// The other window was set to use the maximum number of filler
// lines, may need to reduce them.
diff_set_topline(curwin, wp_other);
}
@@ -769,9 +777,14 @@ diff_write_buffer(buf_T *buf, diffin_T *din)
int orig_len;
char_u cbuf[MB_MAXBYTES + 1];
// xdiff doesn't support ignoring case, fold-case the text.
c = PTR2CHAR(s);
c = MB_CASEFOLD(c);
if (*s == NL)
c = NUL;
else
{
// xdiff doesn't support ignoring case, fold-case the text.
c = PTR2CHAR(s);
c = MB_CASEFOLD(c);
}
orig_len = mb_ptr2len(s);
if (mb_char2bytes(c, cbuf) != orig_len)
// TODO: handle byte length difference
@@ -783,7 +796,10 @@ diff_write_buffer(buf_T *buf, diffin_T *din)
len += orig_len;
}
else
ptr[len++] = *s++;
{
ptr[len++] = *s == NL ? NUL : *s;
s++;
}
}
ptr[len++] = NL;
}
@@ -880,7 +896,7 @@ diff_try_update(
continue;
// Read the diff output and add each entry to the diff list.
diff_read(idx_orig, idx_new, &dio->dio_diff);
diff_read(idx_orig, idx_new, dio);
clear_diffin(&dio->dio_new);
clear_diffout(&dio->dio_diff);
@@ -1080,7 +1096,7 @@ check_external_diff(diffio_T *diffio)
if (!ok)
{
if (io_error)
emsg(_("E810: Cannot read or write temp files"));
emsg(_(e_cannot_read_or_write_temp_files));
emsg(_(e_cannot_create_diffs));
diff_a_works = MAYBE;
#if defined(MSWIN)
@@ -1118,12 +1134,12 @@ diff_file_internal(diffio_T *diffio)
emit_cfg.ctxlen = 0; // don't need any diff_context here
emit_cb.priv = &diffio->dio_diff;
emit_cb.out_line = xdiff_out;
emit_cfg.hunk_func = xdiff_out;
if (xdl_diff(&diffio->dio_orig.din_mmfile,
&diffio->dio_new.din_mmfile,
&param, &emit_cfg, &emit_cb) < 0)
{
emsg(_("E960: Problem creating the internal diff"));
emsg(_(e_problem_creating_internal_diff));
return FAIL;
}
return OK;
@@ -1303,7 +1319,7 @@ ex_diffpatch(exarg_T *eap)
if (dirbuf[0] != NUL)
{
if (mch_chdir((char *)dirbuf) != 0)
emsg(_(e_prev_dir));
emsg(_(e_cannot_go_back_to_previous_directory));
shorten_fnames(TRUE);
}
#endif
@@ -1321,7 +1337,7 @@ ex_diffpatch(exarg_T *eap)
// Only continue if the output file was created.
if (mch_stat((char *)tmp_new, &st) < 0 || st.st_size == 0)
emsg(_("E816: Cannot read patch output"));
emsg(_(e_cannot_read_patch_output));
else
{
if (curbuf->b_fname != NULL)
@@ -1482,9 +1498,9 @@ diff_win_options(
wp->w_p_crb = TRUE;
if (!(diff_flags & DIFF_FOLLOWWRAP))
{
if (!wp->w_p_diff)
if (!wp->w_p_diff)
wp->w_p_wrap_save = wp->w_p_wrap;
wp->w_p_wrap = FALSE;
wp->w_p_wrap = FALSE;
}
# ifdef FEAT_FOLDING
if (!wp->w_p_diff)
@@ -1549,7 +1565,7 @@ ex_diffoff(exarg_T *eap)
if (!(diff_flags & DIFF_FOLLOWWRAP))
{
if (!wp->w_p_wrap)
wp->w_p_wrap = wp->w_p_wrap_save;
wp->w_p_wrap = wp->w_p_wrap_save;
}
#ifdef FEAT_FOLDING
free_string_option(wp->w_p_fdm);
@@ -1595,7 +1611,7 @@ ex_diffoff(exarg_T *eap)
diff_clear(curtab);
}
// Remove "hor" from from 'scrollopt' if there are no diff windows left.
// Remove "hor" from 'scrollopt' if there are no diff windows left.
if (!diffwin && vim_strchr(p_sbo, 'h') != NULL)
do_cmdline_cmd((char_u *)"set sbo-=hor");
}
@@ -1607,20 +1623,21 @@ ex_diffoff(exarg_T *eap)
diff_read(
int idx_orig, // idx of original file
int idx_new, // idx of new file
diffout_T *dout) // diff output
diffio_T *dio) // diff output
{
FILE *fd = NULL;
int line_idx = 0;
diff_T *dprev = NULL;
diff_T *dp = curtab->tp_first_diff;
diff_T *dn, *dpl;
diffout_T *dout = &dio->dio_diff;
char_u linebuf[LBUFLEN]; // only need to hold the diff line
char_u *line;
long off;
int i;
linenr_T lnum_orig, lnum_new;
long count_orig, count_new;
int notset = TRUE; // block "*dp" not set yet
diffhunk_T *hunk = NULL; // init to avoid gcc warning
enum {
DIFF_ED,
DIFF_UNIFIED,
@@ -1641,75 +1658,91 @@ diff_read(
}
}
if (!dio->dio_internal)
{
hunk = ALLOC_ONE(diffhunk_T);
if (hunk == NULL)
return;
}
for (;;)
{
if (fd == NULL)
if (dio->dio_internal)
{
if (line_idx >= dout->dout_ga.ga_len)
break; // did last line
line = ((char_u **)dout->dout_ga.ga_data)[line_idx++];
if (line_idx >= dout->dout_ga.ga_len) {
break; // did last line
}
hunk = ((diffhunk_T **)dout->dout_ga.ga_data)[line_idx++];
}
else
{
if (vim_fgets(linebuf, LBUFLEN, fd))
break; // end of file
line = linebuf;
}
if (diffstyle == DIFF_NONE)
{
// Determine diff style.
// ed like diff looks like this:
// {first}[,{last}]c{first}[,{last}]
// {first}a{first}[,{last}]
// {first}[,{last}]d{first}
//
// unified diff looks like this:
// --- file1 2018-03-20 13:23:35.783153140 +0100
// +++ file2 2018-03-20 13:23:41.183156066 +0100
// @@ -1,3 +1,5 @@
if (isdigit(*line))
diffstyle = DIFF_ED;
else if ((STRNCMP(line, "@@ ", 3) == 0))
diffstyle = DIFF_UNIFIED;
else if ((STRNCMP(line, "--- ", 4) == 0)
&& (vim_fgets(linebuf, LBUFLEN, fd) == 0)
&& (STRNCMP(line, "+++ ", 4) == 0)
&& (vim_fgets(linebuf, LBUFLEN, fd) == 0)
&& (STRNCMP(line, "@@ ", 3) == 0))
diffstyle = DIFF_UNIFIED;
if (fd == NULL)
{
if (line_idx >= dout->dout_ga.ga_len)
break; // did last line
line = ((char_u **)dout->dout_ga.ga_data)[line_idx++];
}
else
// Format not recognized yet, skip over this line. Cygwin diff
// may put a warning at the start of the file.
continue;
}
{
if (vim_fgets(linebuf, LBUFLEN, fd))
break; // end of file
line = linebuf;
}
if (diffstyle == DIFF_ED)
{
if (!isdigit(*line))
continue; // not the start of a diff block
if (parse_diff_ed(line, &lnum_orig, &count_orig,
&lnum_new, &count_new) == FAIL)
continue;
}
else if (diffstyle == DIFF_UNIFIED)
{
if (STRNCMP(line, "@@ ", 3) != 0)
continue; // not the start of a diff block
if (parse_diff_unified(line, &lnum_orig, &count_orig,
&lnum_new, &count_new) == FAIL)
continue;
}
else
{
emsg(_("E959: Invalid diff format."));
break;
if (diffstyle == DIFF_NONE)
{
// Determine diff style.
// ed like diff looks like this:
// {first}[,{last}]c{first}[,{last}]
// {first}a{first}[,{last}]
// {first}[,{last}]d{first}
//
// unified diff looks like this:
// --- file1 2018-03-20 13:23:35.783153140 +0100
// +++ file2 2018-03-20 13:23:41.183156066 +0100
// @@ -1,3 +1,5 @@
if (isdigit(*line))
diffstyle = DIFF_ED;
else if ((STRNCMP(line, "@@ ", 3) == 0))
diffstyle = DIFF_UNIFIED;
else if ((STRNCMP(line, "--- ", 4) == 0)
&& (vim_fgets(linebuf, LBUFLEN, fd) == 0)
&& (STRNCMP(line, "+++ ", 4) == 0)
&& (vim_fgets(linebuf, LBUFLEN, fd) == 0)
&& (STRNCMP(line, "@@ ", 3) == 0))
diffstyle = DIFF_UNIFIED;
else
// Format not recognized yet, skip over this line. Cygwin
// diff may put a warning at the start of the file.
continue;
}
if (diffstyle == DIFF_ED)
{
if (!isdigit(*line))
continue; // not the start of a diff block
if (parse_diff_ed(line, hunk) == FAIL)
continue;
}
else if (diffstyle == DIFF_UNIFIED)
{
if (STRNCMP(line, "@@ ", 3) != 0)
continue; // not the start of a diff block
if (parse_diff_unified(line, hunk) == FAIL)
continue;
}
else
{
emsg(_(e_invalid_diff_format));
break;
}
}
// Go over blocks before the change, for which orig and new are equal.
// Copy blocks from orig to new.
while (dp != NULL
&& lnum_orig > dp->df_lnum[idx_orig] + dp->df_count[idx_orig])
&& hunk->lnum_orig > dp->df_lnum[idx_orig]
+ dp->df_count[idx_orig])
{
if (notset)
diff_copy_entry(dprev, dp, idx_orig, idx_new);
@@ -1719,41 +1752,43 @@ diff_read(
}
if (dp != NULL
&& lnum_orig <= dp->df_lnum[idx_orig] + dp->df_count[idx_orig]
&& lnum_orig + count_orig >= dp->df_lnum[idx_orig])
&& hunk->lnum_orig <= dp->df_lnum[idx_orig]
+ dp->df_count[idx_orig]
&& hunk->lnum_orig + hunk->count_orig >= dp->df_lnum[idx_orig])
{
// New block overlaps with existing block(s).
// First find last block that overlaps.
for (dpl = dp; dpl->df_next != NULL; dpl = dpl->df_next)
if (lnum_orig + count_orig < dpl->df_next->df_lnum[idx_orig])
if (hunk->lnum_orig + hunk->count_orig
< dpl->df_next->df_lnum[idx_orig])
break;
// If the newly found block starts before the old one, set the
// start back a number of lines.
off = dp->df_lnum[idx_orig] - lnum_orig;
off = dp->df_lnum[idx_orig] - hunk->lnum_orig;
if (off > 0)
{
for (i = idx_orig; i < idx_new; ++i)
if (curtab->tp_diffbuf[i] != NULL)
dp->df_lnum[i] -= off;
dp->df_lnum[idx_new] = lnum_new;
dp->df_count[idx_new] = count_new;
dp->df_lnum[idx_new] = hunk->lnum_new;
dp->df_count[idx_new] = hunk->count_new;
}
else if (notset)
{
// new block inside existing one, adjust new block
dp->df_lnum[idx_new] = lnum_new + off;
dp->df_count[idx_new] = count_new - off;
dp->df_lnum[idx_new] = hunk->lnum_new + off;
dp->df_count[idx_new] = hunk->count_new - off;
}
else
// second overlap of new block with existing block
dp->df_count[idx_new] += count_new - count_orig
dp->df_count[idx_new] += hunk->count_new - hunk->count_orig
+ dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]
- (dp->df_lnum[idx_orig] + dp->df_count[idx_orig]);
// Adjust the size of the block to include all the lines to the
// end of the existing block or the new diff, whatever ends last.
off = (lnum_orig + count_orig)
off = (hunk->lnum_orig + hunk->count_orig)
- (dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]);
if (off < 0)
{
@@ -1785,10 +1820,10 @@ diff_read(
if (dp == NULL)
goto done;
dp->df_lnum[idx_orig] = lnum_orig;
dp->df_count[idx_orig] = count_orig;
dp->df_lnum[idx_new] = lnum_new;
dp->df_count[idx_new] = count_new;
dp->df_lnum[idx_orig] = hunk->lnum_orig;
dp->df_count[idx_orig] = hunk->count_orig;
dp->df_lnum[idx_new] = hunk->lnum_new;
dp->df_count[idx_new] = hunk->count_new;
// Set values for other buffers, these must be equal to the
// original buffer, otherwise there would have been a change
@@ -1811,6 +1846,9 @@ diff_read(
}
done:
if (!dio->dio_internal)
vim_free(hunk);
if (fd != NULL)
fclose(fd);
}
@@ -2644,7 +2682,7 @@ ex_diffgetput(exarg_T *eap)
if (idx_other == DB_COUNT)
{
if (found_not_ma)
emsg(_("E793: No other buffer in diff mode is modifiable"));
emsg(_(e_no_other_buffer_in_diff_mode_is_modifiable));
else
emsg(_(e_no_other_buffer_in_diff_mode));
return;
@@ -2731,7 +2769,7 @@ ex_diffgetput(exarg_T *eap)
change_warning(0);
if (diff_buf_idx(curbuf) != idx_to)
{
emsg(_("E787: Buffer changed unexpectedly"));
emsg(_(e_buffer_changed_unexpectedly));
goto theend;
}
}
@@ -3137,10 +3175,7 @@ diff_lnum_win(linenr_T lnum, win_T *wp)
static int
parse_diff_ed(
char_u *line,
linenr_T *lnum_orig,
long *count_orig,
linenr_T *lnum_new,
long *count_new)
diffhunk_T *hunk)
{
char_u *p;
long f1, l1, f2, l2;
@@ -3175,23 +3210,23 @@ parse_diff_ed(
if (difftype == 'a')
{
*lnum_orig = f1 + 1;
*count_orig = 0;
hunk->lnum_orig = f1 + 1;
hunk->count_orig = 0;
}
else
{
*lnum_orig = f1;
*count_orig = l1 - f1 + 1;
hunk->lnum_orig = f1;
hunk->count_orig = l1 - f1 + 1;
}
if (difftype == 'd')
{
*lnum_new = f2 + 1;
*count_new = 0;
hunk->lnum_new = f2 + 1;
hunk->count_new = 0;
}
else
{
*lnum_new = f2;
*count_new = l2 - f2 + 1;
hunk->lnum_new = f2;
hunk->count_new = l2 - f2 + 1;
}
return OK;
}
@@ -3203,10 +3238,7 @@ parse_diff_ed(
static int
parse_diff_unified(
char_u *line,
linenr_T *lnum_orig,
long *count_orig,
linenr_T *lnum_new,
long *count_new)
diffhunk_T *hunk)
{
char_u *p;
long oldline, oldcount, newline, newcount;
@@ -3245,10 +3277,10 @@ parse_diff_unified(
if (newline == 0)
newline = 1;
*lnum_orig = oldline;
*count_orig = oldcount;
*lnum_new = newline;
*count_new = newcount;
hunk->lnum_orig = oldline;
hunk->count_orig = oldcount;
hunk->lnum_new = newline;
hunk->count_new = newcount;
return OK;
}
@@ -3261,26 +3293,30 @@ parse_diff_unified(
* Stores the diff output in a grow array.
*/
static int
xdiff_out(void *priv, mmbuffer_t *mb, int nbuf)
xdiff_out(
long start_a,
long count_a,
long start_b,
long count_b,
void *priv)
{
diffout_T *dout = (diffout_T *)priv;
char_u *p;
diffhunk_T *p = ALLOC_ONE(diffhunk_T);
// The header line always comes by itself, text lines in at least two
// parts. We drop the text part.
if (nbuf > 1)
return 0;
// sanity check
if (STRNCMP(mb[0].ptr, "@@ ", 3) != 0)
return 0;
if (ga_grow(&dout->dout_ga, 1) == FAIL)
return -1;
p = vim_strnsave((char_u *)mb[0].ptr, mb[0].size);
if (p == NULL)
return -1;
((char_u **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
if (ga_grow(&dout->dout_ga, 1) == FAIL)
{
vim_free(p);
return -1;
}
p->lnum_orig = start_a + 1;
p->count_orig = count_a;
p->lnum_new = start_b + 1;
p->count_new = count_b;
((diffhunk_T **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
return 0;
}

View File

@@ -2596,7 +2596,7 @@ keymap_init(void)
if (source_runtime(buf, 0) == FAIL)
{
vim_free(buf);
return N_("E544: Keymap file not found");
return N_(e_keymap_file_not_found);
}
}
vim_free(buf);
@@ -2632,7 +2632,7 @@ ex_loadkeymap(exarg_T *eap)
keymap_unload();
curbuf->b_kmap_state = 0;
ga_init2(&curbuf->b_kmap_ga, (int)sizeof(kmap_T), 20);
ga_init2(&curbuf->b_kmap_ga, sizeof(kmap_T), 20);
// Set 'cpoptions' to "C" to avoid line continuation.
p_cpo = (char_u *)"C";
@@ -2661,7 +2661,7 @@ ex_loadkeymap(exarg_T *eap)
|| *kp->from == NUL || *kp->to == NUL)
{
if (kp->to != NULL && *kp->to == NUL)
emsg(_("E791: Empty keymap entry"));
emsg(_(e_empty_keymap_entry));
vim_free(kp->from);
vim_free(kp->to);
}

View File

@@ -2043,9 +2043,10 @@ win_line(
if (n_extra < 0)
n_extra = 0;
}
if (on_last_col)
if (on_last_col && c != TAB)
// Do not continue search/match highlighting over the
// line break.
// line break, but for TABs the highlighting should
// include the complete width of the character
search_attr = 0;
if (c == TAB && n_extra + col > wp->w_width)
@@ -2258,7 +2259,7 @@ win_line(
// Make sure, the highlighting for the tab char will be
// correctly set further below (effectively reverts the
// FIX_FOR_BOGSUCOLS macro
// FIX_FOR_BOGSUCOLS macro).
if (n_extra == tab_len + vc_saved && wp->w_p_list
&& wp->w_lcs_chars.tab1)
tab_len += vc_saved;
@@ -2938,7 +2939,7 @@ win_line(
#if defined(FEAT_RIGHTLEFT)
if (has_mbyte && wp->w_p_rl && (*mb_char2cells)(mb_c) > 1)
{
// A double-wide character is: put first halve in left cell.
// A double-wide character is: put first half in left cell.
--off;
--col;
}

View File

@@ -462,12 +462,13 @@ win_redr_status(win_T *wp, int ignore_pum UNUSED)
p = NameBuff;
len = (int)STRLEN(p);
if (bt_help(wp->w_buffer)
if ((bt_help(wp->w_buffer)
#ifdef FEAT_QUICKFIX
|| wp->w_p_pvw
|| wp->w_p_pvw
#endif
|| bufIsChanged(wp->w_buffer)
|| wp->w_buffer->b_p_ro)
|| bufIsChanged(wp->w_buffer)
|| wp->w_buffer->b_p_ro)
&& len < MAXPATHL - 1)
*(p + len++) = ' ';
if (bt_help(wp->w_buffer))
{
@@ -1814,10 +1815,11 @@ win_update(win_T *wp)
// When topline didn't change, find first entry in w_lines[] that
// needs updating.
// try to find wp->w_topline in wp->w_lines[].wl_lnum
// Try to find wp->w_topline in wp->w_lines[].wl_lnum. The check
// for "Rows" is in case "wl_size" is incorrect somehow.
j = -1;
row = 0;
for (i = 0; i < wp->w_lines_valid; i++)
for (i = 0; i < wp->w_lines_valid && i < Rows; i++)
{
if (wp->w_lines[i].wl_valid
&& wp->w_lines[i].wl_lnum == wp->w_topline)
@@ -1847,6 +1849,8 @@ win_update(win_T *wp)
// ... but don't delete new filler lines.
row -= wp->w_topfill;
#endif
if (row > Rows) // just in case
row = Rows;
if (row > 0)
{
check_for_delay(FALSE);
@@ -2538,6 +2542,11 @@ win_update(win_T *wp)
eof = TRUE;
break;
}
// Safety check: if any of the wl_size values is wrong we might go over
// the end of w_lines[].
if (idx >= Rows)
break;
}
// End of loop over all window lines.

View File

@@ -175,7 +175,7 @@ edit(
if (textwinlock != 0 || textlock != 0
|| ins_compl_active() || compl_busy || pum_visible())
{
emsg(_(e_textwinlock));
emsg(_(e_not_allowed_to_change_text_or_change_window));
return FALSE;
}
ins_compl_clear(); // clear stuff for CTRL-X mode
@@ -1055,8 +1055,9 @@ doESCkey:
case K_IGNORE: // Something mapped to nothing
break;
case K_COMMAND: // <Cmd>command<CR>
do_cmdline(NULL, getcmdkeycmd, NULL, 0);
case K_COMMAND: // <Cmd>command<CR>
case K_SCRIPT_COMMAND: // <ScriptCmd>command<CR>
do_cmdkey_command(c, 0);
#ifdef FEAT_TERMINAL
if (term_use_loop())
// Started a terminal that gets the input, exit Insert mode.
@@ -1280,7 +1281,7 @@ doESCkey:
// but it is under other ^X modes
if (*curbuf->b_p_cpt == NUL
&& (ctrl_x_mode_normal() || ctrl_x_mode_whole_line())
&& !(compl_cont_status & CONT_LOCAL))
&& !compl_status_local())
goto normalchar;
docomplete:
@@ -1289,7 +1290,7 @@ docomplete:
disable_fold_update++; // don't redraw folds here
#endif
if (ins_complete(c, TRUE) == FAIL)
compl_cont_status = 0;
compl_status_clear();
#ifdef FEAT_FOLDING
disable_fold_update--;
#endif
@@ -1657,8 +1658,8 @@ decodeModifyOtherKeys(int c)
*/
static int pc_status;
#define PC_STATUS_UNSET 0 // pc_bytes was not set
#define PC_STATUS_RIGHT 1 // right halve of double-wide char
#define PC_STATUS_LEFT 2 // left halve of double-wide char
#define PC_STATUS_RIGHT 1 // right half of double-wide char
#define PC_STATUS_LEFT 2 // left half of double-wide char
#define PC_STATUS_SET 3 // pc_bytes was filled
static char_u pc_bytes[MB_MAXBYTES + 1]; // saved bytes
static int pc_attr;
@@ -1715,6 +1716,7 @@ edit_putchar(int c, int highlight)
}
}
#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
/*
* Set the insert start position for when using a prompt buffer.
*/
@@ -1728,6 +1730,7 @@ set_insstart(linenr_T lnum, int col)
Insstart_blank_vcol = MAXCOL;
arrow_used = FALSE;
}
#endif
/*
* Undo the previous edit_putchar().
@@ -3980,6 +3983,9 @@ ins_bs(
int in_indent;
int oldState;
int cpc[MAX_MCO]; // composing characters
#if defined(FEAT_LISP) || defined(FEAT_CINDENT)
int call_fix_indent = FALSE;
#endif
/*
* can't delete anything in an empty file
@@ -4161,7 +4167,13 @@ ins_bs(
save_col = curwin->w_cursor.col;
beginline(BL_WHITE);
if (curwin->w_cursor.col < save_col)
{
mincol = curwin->w_cursor.col;
#if defined(FEAT_LISP) || defined(FEAT_CINDENT)
// should now fix the indent to match with the previous line
call_fix_indent = TRUE;
#endif
}
curwin->w_cursor.col = save_col;
}
@@ -4333,6 +4345,12 @@ ins_bs(
#endif
if (curwin->w_cursor.col <= 1)
did_ai = FALSE;
#if defined(FEAT_LISP) || defined(FEAT_CINDENT)
if (call_fix_indent)
fix_indent();
#endif
/*
* It's a little strange to put backspaces into the redo
* buffer, but it makes auto-indent a lot easier to deal

File diff suppressed because it is too large Load Diff

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