Merge #4648 from jamessan/packages

packages (vim-patch:7.4.{1384,1388,1396,1478,1479,1480,1486,1492,1499,1528,1550,1551,1552,1553,1554,1596,1649,1712,1840,1973,1986})
This commit is contained in:
Justin M. Keyes 2016-07-09 06:58:27 -04:00 committed by GitHub
commit adaacdd71a
75 changed files with 2410 additions and 878 deletions

View File

@ -2,6 +2,7 @@ set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genvimvim.lua)
set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime) set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime)
set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim) set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim)
set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags) set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags)
set(GENERATED_PACKAGE_DIR ${GENERATED_RUNTIME_DIR}/pack/dist/opt)
file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}) file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR})
file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax) file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax)
@ -18,6 +19,47 @@ add_custom_command(OUTPUT ${GENERATED_SYN_VIM}
${PROJECT_SOURCE_DIR}/src/nvim/eval.c ${PROJECT_SOURCE_DIR}/src/nvim/eval.c
) )
if(POLICY CMP0054)
cmake_policy(SET CMP0054 OLD)
endif()
file(GLOB PACKAGES ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
set(GENERATED_PACKAGE_TAGS)
foreach(PACKAGE ${PACKAGES})
get_filename_component(PACKNAME ${PACKAGE} NAME)
file(GLOB "${PACKNAME}_DOC_FILES" ${PACKAGE}/doc/*.txt)
if("${PACKNAME}_DOC_FILES")
file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME})
add_custom_target("${PACKNAME}-tags"
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PACKAGE} ${GENERATED_PACKAGE_DIR}/${PACKNAME}
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
-u NONE -i NONE -e --headless -c "helptags doc" -c quit
DEPENDS
nvim
WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}"
)
add_custom_command(OUTPUT "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags"
DEPENDS
"${PACKNAME}-tags"
)
set("${PACKNAME}_DOC_NAMES")
foreach(DF "${${PACKNAME}_DOC_FILES}")
get_filename_component(F ${DF} NAME)
list(APPEND "${PACKNAME}_DOC_NAMES" ${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/${F})
endforeach()
install_helper(
FILES ${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags "${${PACKNAME}_DOC_NAMES}"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/pack/dist/opt/${PACKNAME}/doc)
list(APPEND GENERATED_PACKAGE_TAGS "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags")
endif()
endforeach()
file(GLOB DOCFILES ${PROJECT_SOURCE_DIR}/runtime/doc/*.txt) file(GLOB DOCFILES ${PROJECT_SOURCE_DIR}/runtime/doc/*.txt)
set(BUILDDOCFILES) set(BUILDDOCFILES)
@ -53,6 +95,7 @@ add_custom_target(
DEPENDS DEPENDS
${GENERATED_SYN_VIM} ${GENERATED_SYN_VIM}
${GENERATED_HELP_TAGS} ${GENERATED_HELP_TAGS}
${GENERATED_PACKAGE_TAGS}
) )
# CMake is painful here. It will create the destination using the user's # CMake is painful here. It will create the destination using the user's

View File

@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 7.4. Last change: 2015 Dec 05 *autocmd.txt* For Vim version 7.4. Last change: 2016 Mar 26
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar

View File

@ -1,4 +1,4 @@
*change.txt* For Vim version 7.4. Last change: 2016 Feb 10 *change.txt* For Vim version 7.4. Last change: 2016 Mar 08
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -108,7 +108,9 @@ is an error when 'cpoptions' includes the 'E' flag.
*J* *J*
J Join [count] lines, with a minimum of two lines. J Join [count] lines, with a minimum of two lines.
Remove the indent and insert up to two spaces (see Remove the indent and insert up to two spaces (see
below). below). Fails when on the last line of the buffer.
If [count] is too big it is reduce to the number of
lines available.
*v_J* *v_J*
{Visual}J Join the highlighted lines, with a minimum of two {Visual}J Join the highlighted lines, with a minimum of two

View File

@ -1,4 +1,4 @@
*editing.txt* For Vim version 7.4. Last change: 2016 Feb 16 *editing.txt* For Vim version 7.4. Last change: 2016 Mar 28
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -358,7 +358,7 @@ These are the common ones:
To avoid the special meaning of the wildcards prepend a backslash. However, To avoid the special meaning of the wildcards prepend a backslash. However,
on MS-Windows the backslash is a path separator and "path\[abc]" is still seen on MS-Windows the backslash is a path separator and "path\[abc]" is still seen
as a wildcard when "[" is in the 'isfname' option. A simple way to avoid this as a wildcard when "[" is in the 'isfname' option. A simple way to avoid this
is to use "path\[[]abc]". Then the file "path[abc]" literally. is to use "path\[[]abc]", this matches the file "path\[abc]".
*starstar-wildcard* *starstar-wildcard*
Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems. Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.

View File

@ -1,4 +1,4 @@
*eval.txt* For Vim version 7.4. Last change: 2016 Feb 19 *eval.txt* For Vim version 7.4. Last change: 2016 Apr 12
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -413,7 +413,8 @@ only appear once. Examples: >
A key is always a String. You can use a Number, it will be converted to a A key is always a String. You can use a Number, it will be converted to a
String automatically. Thus the String '4' and the number 4 will find the same String automatically. Thus the String '4' and the number 4 will find the same
entry. Note that the String '04' and the Number 04 are different, since the entry. Note that the String '04' and the Number 04 are different, since the
Number will be converted to the String '4'. Number will be converted to the String '4'. The empty string can be used as a
key.
A value can be any expression. Using a Dictionary for a value creates a A value can be any expression. Using a Dictionary for a value creates a
nested Dictionary: > nested Dictionary: >
@ -861,11 +862,12 @@ These three can be repeated and mixed. Examples:
expr8 *expr8* expr8 *expr8*
----- -----
expr8[expr1] item of String or |List| *expr-[]* *E111* expr8[expr1] item of String or |List| *expr-[]* *E111*
*subscript*
If expr8 is a Number or String this results in a String that contains the If expr8 is a Number or String this results in a String that contains the
expr1'th single byte from expr8. expr8 is used as a String, expr1 as a expr1'th single byte from expr8. expr8 is used as a String, expr1 as a
Number. This doesn't recognize multi-byte encodings, see |byteidx()| for Number. This doesn't recognize multi-byte encodings, see |byteidx()| for
an alternative. an alternative, or use `split()` to turn the string into a list of characters.
Index zero gives the first byte. This is like it works in C. Careful: Index zero gives the first byte. This is like it works in C. Careful:
text column numbers start with one! Example, to get the byte under the text column numbers start with one! Example, to get the byte under the
@ -2155,6 +2157,7 @@ writefile({list}, {fname} [, {flags}])
Number write list of lines to file {fname} Number write list of lines to file {fname}
xor({expr}, {expr}) Number bitwise XOR xor({expr}, {expr}) Number bitwise XOR
abs({expr}) *abs()* abs({expr}) *abs()*
Return the absolute value of {expr}. When {expr} evaluates to Return the absolute value of {expr}. When {expr} evaluates to
a |Float| abs() returns a |Float|. When {expr} can be a |Float| abs() returns a |Float|. When {expr} can be
@ -2779,6 +2782,7 @@ cursor({list})
When there is one argument {list} this is used as a |List| When there is one argument {list} this is used as a |List|
with two, three or four item: with two, three or four item:
[{lnum}, {col}]
[{lnum}, {col}, {off}] [{lnum}, {col}, {off}]
[{lnum}, {col}, {off}, {curswant}] [{lnum}, {col}, {off}, {curswant}]
This is like the return value of |getpos()| or |getcurpos()|, This is like the return value of |getpos()| or |getcurpos()|,
@ -3207,7 +3211,10 @@ feedkeys({string} [, {mode}]) *feedkeys()*
similar to using ":normal!". You can call feedkeys() similar to using ":normal!". You can call feedkeys()
several times without 'x' and then one time with 'x' several times without 'x' and then one time with 'x'
(possibly with an empty {string}) to execute all the (possibly with an empty {string}) to execute all the
typeahead. typeahead. Note that when Vim ends in Insert mode it
will behave as if <Esc> is typed, to avoid getting
stuck, waiting for a character to be typed before the
script continues.
Return value is always 0. Return value is always 0.
filereadable({file}) *filereadable()* filereadable({file}) *filereadable()*
@ -7408,6 +7415,7 @@ unix Unix version of Vim.
user_commands User-defined commands. user_commands User-defined commands.
vertsplit Compiled with vertically split windows |:vsplit|. vertsplit Compiled with vertically split windows |:vsplit|.
vim_starting True while initial source'ing takes place. |startup| vim_starting True while initial source'ing takes place. |startup|
*vim_starting*
virtualedit Compiled with 'virtualedit' option. virtualedit Compiled with 'virtualedit' option.
visual Compiled with Visual mode. visual Compiled with Visual mode.
visualextra Compiled with extra Visual mode commands. visualextra Compiled with extra Visual mode commands.

View File

@ -1,4 +1,4 @@
*help.txt* For Vim version 7.4. Last change: 2016 Jan 10 *help.txt* For Vim version 7.4. Last change: 2016 Mar 31
VIM - main help file VIM - main help file
k k

View File

@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 7.4. Last change: 2014 Sep 19 *helphelp.txt* For Vim version 7.4. Last change: 2016 Apr 01
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -188,6 +188,9 @@ command: >
*E154* *E150* *E151* *E152* *E153* *E670* *E154* *E150* *E151* *E152* *E153* *E670*
:helpt[ags] [++t] {dir} :helpt[ags] [++t] {dir}
Generate the help tags file(s) for directory {dir}. Generate the help tags file(s) for directory {dir}.
When {dir} is ALL then all "doc" directories in
'runtimepath' will be used.
All "*.txt" and "*.??x" files in the directory and All "*.txt" and "*.??x" files in the directory and
sub-directories are scanned for a help tag definition sub-directories are scanned for a help tag definition
in between stars. The "*.??x" files are for in between stars. The "*.??x" files are for
@ -196,9 +199,11 @@ command: >
sorted. sorted.
When there are duplicates an error message is given. When there are duplicates an error message is given.
An existing tags file is silently overwritten. An existing tags file is silently overwritten.
The optional "++t" argument forces adding the The optional "++t" argument forces adding the
"help-tags" tag. This is also done when the {dir} is "help-tags" tag. This is also done when the {dir} is
equal to $VIMRUNTIME/doc. equal to $VIMRUNTIME/doc.
To rebuild the help tags in the runtime directory To rebuild the help tags in the runtime directory
(requires write permission there): > (requires write permission there): >
:helptags $VIMRUNTIME/doc :helptags $VIMRUNTIME/doc
@ -249,7 +254,9 @@ The second one finds the English user manual, even when 'helplang' is set to
When using command-line completion for the ":help" command, the "@en" When using command-line completion for the ":help" command, the "@en"
extension is only shown when a tag exists for multiple languages. When the extension is only shown when a tag exists for multiple languages. When the
tag only exists for English "@en" is omitted. tag only exists for English "@en" is omitted. When the first candidate has an
"@ab" extension and it matches the first language in 'helplang' "@ab" is also
omitted.
When using |CTRL-]| or ":help!" in a non-English help file Vim will try to When using |CTRL-]| or ":help!" in a non-English help file Vim will try to
find the tag in the same language. If not found then 'helplang' will be used find the tag in the same language. If not found then 'helplang' will be used
@ -306,6 +313,10 @@ aligned on a line.
When referring to an existing help tag and to create a hot-link, place the When referring to an existing help tag and to create a hot-link, place the
name between two bars (|) eg. |help-writing|. name between two bars (|) eg. |help-writing|.
When referring to a Vim command and to create a hot-link, place the
name between two backticks, eg. inside `:filetype`. You will see this is
highlighted as a command, like a code block (see below).
When referring to a Vim option in the help file, place the option name between When referring to a Vim option in the help file, place the option name between
two single quotes, eg. 'statusline' two single quotes, eg. 'statusline'

View File

@ -1,4 +1,4 @@
*index.txt* For Vim version 7.4. Last change: 2016 Jan 19 *index.txt* For Vim version 7.4. Last change: 2016 Mar 12
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -1378,6 +1378,8 @@ tag command action ~
|:ounmap| :ou[nmap] like ":unmap" but for Operator-pending mode |:ounmap| :ou[nmap] like ":unmap" but for Operator-pending mode
|:ounmenu| :ounme[nu] remove menu for Operator-pending mode |:ounmenu| :ounme[nu] remove menu for Operator-pending mode
|:ownsyntax| :ow[nsyntax] set new local syntax highlight for this window |:ownsyntax| :ow[nsyntax] set new local syntax highlight for this window
|:packadd| :pa[ckadd] add a plugin from 'packpath'
|:packloadall| :packl[oadall] load all packages under 'packpath'
|:pclose| :pc[lose] close preview window |:pclose| :pc[lose] close preview window
|:pedit| :ped[it] edit file in the preview window |:pedit| :ped[it] edit file in the preview window
|:print| :p[rint] print lines |:print| :p[rint] print lines

View File

@ -1,4 +1,4 @@
*message.txt* For Vim version 7.4. Last change: 2013 Feb 23 *message.txt* For Vim version 7.4. Last change: 2016 Feb 27
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar

View File

@ -1,4 +1,4 @@
*options.txt* For Vim version 7.4. Last change: 2016 Feb 20 *options.txt* For Vim version 7.4. Last change: 2016 Apr 12
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -2458,8 +2458,8 @@ A jump table for the options with a short description can be found at |Q_op|.
file only, the option is not changed. file only, the option is not changed.
When 'binary' is set, the value of 'fileformats' is not used. When 'binary' is set, the value of 'fileformats' is not used.
Note that when Vim starts up with an empty buffer this option is not When Vim starts up with an empty buffer the first item is used. You
used. Set 'fileformat' in your vimrc instead. can overrule this by setting 'fileformat' in your .vimrc.
For systems with a Dos-like <EOL> (<CR><NL>), when reading files that For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
are ":source"ed and for vimrc files, automatic <EOL> detection may be are ":source"ed and for vimrc files, automatic <EOL> detection may be
@ -4238,6 +4238,7 @@ A jump table for the options with a short description can be found at |Q_op|.
written. A ":set nomodified" command also resets the original written. A ":set nomodified" command also resets the original
values to the current values and the 'modified' option will be values to the current values and the 'modified' option will be
reset. reset.
Similarly for 'eol' and 'bomb'.
This option is not set when a change is made to the buffer as the This option is not set when a change is made to the buffer as the
result of a BufNewFile, BufRead/BufReadPost, BufWritePost, result of a BufNewFile, BufRead/BufReadPost, BufWritePost,
FileAppendPost or VimLeave autocommand event. See |gzip-example| for FileAppendPost or VimLeave autocommand event. See |gzip-example| for
@ -4499,6 +4500,12 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons. security reasons.
*'packpath'* *'pp'*
'packpath' 'pp' string (default: see 'runtimepath')
{not in Vi}
Directories used to find packages. See |packages|.
*'paragraphs'* *'para'* *'paragraphs'* *'para'*
'paragraphs' 'para' string (default "IPLPPPQPP TPHPLIPpLpItpplpipbp") 'paragraphs' 'para' string (default "IPLPPPQPP TPHPLIPpLpItpplpipbp")
global global

View File

@ -1,4 +1,4 @@
*os_win32.txt* For Vim version 7.4. Last change: 2014 Sep 25 *os_win32.txt* For Vim version 7.4. Last change: 2016 Mar 05
VIM REFERENCE MANUAL by George Reilly VIM REFERENCE MANUAL by George Reilly
@ -75,6 +75,31 @@ The directory of the Vim executable is appended to $PATH. This is mostly to
make "!xxd" work, as it is in the Tools menu. And it also means that when make "!xxd" work, as it is in the Tools menu. And it also means that when
executable() returns 1 the executable can actually be executed. executable() returns 1 the executable can actually be executed.
Quotes in file names *win32-quotes*
Quotes inside a file name (or any other command line argument) can be escaped
with a backslash. E.g. >
vim -c "echo 'foo\"bar'"
Alternatively use three quotes to get one: >
vim -c "echo 'foo"""bar'"
The quotation rules are:
1. A `"` starts quotation.
2. Another `"` or `""` ends quotation. If the quotation ends with `""`, a `"`
is produced at the end of the quoted string.
Examples, with [] around an argument:
"foo" -> [foo]
"foo"" -> [foo"]
"foo"bar -> [foobar]
"foo" bar -> [foo], [bar]
"foo""bar -> [foo"bar]
"foo"" bar -> [foo"], [bar]
"foo"""bar" -> [foo"bar]
============================================================================== ==============================================================================
3. Using the mouse *win32-mouse* 3. Using the mouse *win32-mouse*

View File

@ -1,4 +1,4 @@
*pattern.txt* For Vim version 7.4. Last change: 2016 Jan 03 *pattern.txt* For Vim version 7.4. Last change: 2016 Apr 03
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -1096,8 +1096,8 @@ x A single character, with no special meaning, matches itself
'/', alphabetic, numeric, '_' or '~'. '/', alphabetic, numeric, '_' or '~'.
These items only work for 8-bit characters, except [:lower:] and These items only work for 8-bit characters, except [:lower:] and
[:upper:] also work for multi-byte characters when using the new [:upper:] also work for multi-byte characters when using the new
regexp engine. In the future these items may work for multi-byte regexp engine. See |two-engines|. In the future these items may
characters. work for multi-byte characters.
*/[[=* *[==]* */[[=* *[==]*
- An equivalence class. This means that characters are matched that - An equivalence class. This means that characters are matched that
have almost the same meaning, e.g., when ignoring accents. This have almost the same meaning, e.g., when ignoring accents. This

View File

@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 7.4. Last change: 2016 Jan 21 *quickfix.txt* For Vim version 7.4. Last change: 2016 Mar 19
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -49,6 +49,10 @@ The following quickfix commands can be used. The location list commands are
similar to the quickfix commands, replacing the 'c' prefix in the quickfix similar to the quickfix commands, replacing the 'c' prefix in the quickfix
command with 'l'. command with 'l'.
*E924*
If the current window was closed by an |autocommand| while processing a
location list command, it will be aborted.
*:cc* *:cc*
:cc[!] [nr] Display error [nr]. If [nr] is omitted, the same :cc[!] [nr] Display error [nr]. If [nr] is omitted, the same
error is displayed again. Without [!] this doesn't error is displayed again. Without [!] this doesn't

View File

@ -1,4 +1,4 @@
*quickref.txt* For Vim version 7.4. Last change: 2015 Nov 10 *quickref.txt* For Vim version 7.4. Last change: 2016 Mar 30
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -794,6 +794,7 @@ Short explanation of each option: *option-list*
'omnifunc' 'ofu' function for filetype-specific completion 'omnifunc' 'ofu' function for filetype-specific completion
'opendevice' 'odev' allow reading/writing devices on MS-Windows 'opendevice' 'odev' allow reading/writing devices on MS-Windows
'operatorfunc' 'opfunc' function to be called for |g@| operator 'operatorfunc' 'opfunc' function to be called for |g@| operator
'packpath' 'pp' list of directories used for packages
'paragraphs' 'para' nroff macros that separate paragraphs 'paragraphs' 'para' nroff macros that separate paragraphs
'paste' allow pasting text 'paste' allow pasting text
'pastetoggle' 'pt' key code that causes 'paste' to toggle 'pastetoggle' 'pt' key code that causes 'paste' to toggle

View File

@ -1,4 +1,4 @@
*repeat.txt* For Vim version 7.4. Last change: 2016 Feb 12 *repeat.txt* For Vim version 7.4. Last change: 2016 Apr 05
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -12,8 +12,10 @@ Chapter 26 of the user manual introduces repeating |usr_26.txt|.
2. Multiple repeats |multi-repeat| 2. Multiple repeats |multi-repeat|
3. Complex repeats |complex-repeat| 3. Complex repeats |complex-repeat|
4. Using Vim scripts |using-scripts| 4. Using Vim scripts |using-scripts|
5. Debugging scripts |debug-scripts| 5. Using Vim packages |packages|
6. Profiling |profiling| 6. Creating Vim packages |package-create|
7. Debugging scripts |debug-scripts|
8. Profiling |profiling|
============================================================================== ==============================================================================
1. Single repeats *single-repeat* 1. Single repeats *single-repeat*
@ -68,8 +70,8 @@ examples.
The global commands work by first scanning through the [range] lines and The global commands work by first scanning through the [range] lines and
marking each line where a match occurs (for a multi-line pattern, only the marking each line where a match occurs (for a multi-line pattern, only the
start of the match matters). start of the match matters).
In a second scan the [cmd] is executed for each marked line with its line In a second scan the [cmd] is executed for each marked line, as if the cursor
number prepended. For ":v" and ":g!" the command is executed for each not was in that line. For ":v" and ":g!" the command is executed for each not
marked line. If a line is deleted its mark disappears. marked line. If a line is deleted its mark disappears.
The default for [range] is the whole buffer (1,$). Use "CTRL-C" to interrupt The default for [range] is the whole buffer (1,$). Use "CTRL-C" to interrupt
the command. If an error message is given for a line, the command for that the command. If an error message is given for a line, the command for that
@ -173,10 +175,12 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
commands. commands.
*:ru* *:runtime* *:ru* *:runtime*
:ru[ntime][!] {file} .. :ru[ntime][!] [where] {file} ..
Read Ex commands from {file} in each directory given Read Ex commands from {file} in each directory given
by 'runtimepath'. There is no error for non-existing by 'runtimepath' and/or 'packpath'. There is no error
files. Example: > for non-existing files.
Example: >
:runtime syntax/c.vim :runtime syntax/c.vim
< There can be multiple {file} arguments, separated by < There can be multiple {file} arguments, separated by
@ -190,6 +194,15 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
When it is not included only the first found file is When it is not included only the first found file is
sourced. sourced.
When [where] is omitted only 'runtimepath' is used.
Other values:
START search under "start" in 'packpath'
OPT search under "opt" in 'packpath'
PACK search under "start" and "opt" in
'packpath'
ALL first use 'runtimepath', then search
under "start" and "opt" in 'packpath'
When {file} contains wildcards it is expanded to all When {file} contains wildcards it is expanded to all
matching files. Example: > matching files. Example: >
:runtime! plugin/*.vim :runtime! plugin/*.vim
@ -203,6 +216,57 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
When 'verbose' is two or higher, there is a message When 'verbose' is two or higher, there is a message
about each searched file. about each searched file.
*:pa* *:packadd* *E919*
:pa[ckadd][!] {name} Search for an optional plugin directory in 'packpath'
and source any plugin files found. The directory must
match:
pack/*/opt/{name} ~
The directory is added to 'runtimepath' if it wasn't
there yet.
Note that {name} is the directory name, not the name
of the .vim file. All the files matching the pattern
pack/*/opt/{name}/plugin/**/*.vim ~
will be sourced. This allows for using subdirectories
below "plugin", just like with plugins in
'runtimepath'.
If the filetype detection was not enabled yet (this
is usually done with a "syntax enable" or "filetype
on" command in your .vimrc file), this will also look
for "{name}/ftdetect/*.vim" files.
When the optional ! is added no plugin files or
ftdetect scripts are loaded, only the matching
directories are added to 'runtimepath'. This is
useful in your .vimrc. The plugins will then be
loaded during initialization, see |load-plugins|.
Also see |pack-add|.
*:packl* *:packloadall*
:packl[oadall][!] Load all packages in the "start" directory under each
entry in 'packpath'.
First all the directories found are added to
'runtimepath', then the plugins found in the
directories are sourced. This allows for a plugin to
depend on something of another plugin, e.g. an
"autoload" directory. See |packload-two-steps| for
how this can be useful.
This is normally done automatically during startup,
after loading your .vimrc file. With this command it
can be done earlier.
Packages will be loaded only once. After this command
it won't happen again. When the optional ! is added
this command will load packages even when done before.
An error only causes sourcing the script where it
happens to be aborted, further plugins will be loaded.
See |packages|.
:scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167* :scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167*
Specify the character encoding used in the script. Specify the character encoding used in the script.
The following lines will be converted from [encoding] The following lines will be converted from [encoding]
@ -373,7 +437,186 @@ Rationale:
< Therefore the unusual leading backslash is used. < Therefore the unusual leading backslash is used.
============================================================================== ==============================================================================
5. Debugging scripts *debug-scripts* 5. Using Vim packages *packages*
A Vim package is a directory that contains one or more plugins. The
advantages over normal plugins:
- A package can be downloaded as an archive and unpacked in its own directory.
Thus the files are not mixed with files of other plugins. That makes it
easy to update and remove.
- A package can be a git, mercurial, etc. repository. That makes it really
easy to update.
- A package can contain multiple plugins that depend on each other.
- A package can contain plugins that are automatically loaded on startup and
ones that are only loaded when needed with `:packadd`.
Using a package and loading automatically ~
Let's assume your Vim files are in the "~/.local/share/nvim/site" directory
and you want to add a package from a zip archive "/tmp/foopack.zip":
% mkdir -p ~/.local/share/nvim/site/pack/foo
% cd ~/.local/share/nvim/site/pack/foo
% unzip /tmp/foopack.zip
The directory name "foo" is arbitrary, you can pick anything you like.
You would now have these files under ~/.local/share/nvim/site:
pack/foo/README.txt
pack/foo/start/foobar/plugin/foo.vim
pack/foo/start/foobar/syntax/some.vim
pack/foo/opt/foodebug/plugin/debugger.vim
When Vim starts up, after processing your .vimrc, it scans all directories in
'packpath' for plugins under the "pack/*/start" directory. First all those
directories are added to 'runtimepath'. Then all the plugins are loaded.
See |packload-two-steps| for how these two steps can be useful.
In the example Vim will find "pack/foo/start/foobar/plugin/foo.vim" and adds
"~/.local/share/nvim/site/pack/foo/start/foobar" to 'runtimepath'.
If the "foobar" plugin kicks in and sets the 'filetype' to "some", Vim will
find the syntax/some.vim file, because its directory is in 'runtimepath'.
Vim will also load ftdetect files, if there are any.
Note that the files under "pack/foo/opt" are not loaded automatically, only the
ones under "pack/foo/start". See |pack-add| below for how the "opt" directory
is used.
Loading packages automatically will not happen if loading plugins is disabled,
see |load-plugins|.
To load packages earlier, so that 'runtimepath' gets updated: >
:packloadall
This also works when loading plugins is disabled. The automatic loading will
only happen once.
Using a single plugin and loading it automatically ~
If you don't have a package but a single plugin, you need to create the extra
directory level:
% mkdir -p ~/.local/share/nvim/site/pack/foo/start/foobar
% cd ~/.local/share/nvim/site/pack/foo/start/foobar
% unzip /tmp/someplugin.zip
You would now have these files:
pack/foo/start/foobar/plugin/foo.vim
pack/foo/start/foobar/syntax/some.vim
From here it works like above.
Optional plugins ~
*pack-add*
To load an optional plugin from a pack use the `:packadd` command: >
:packadd foodebug
This searches for "pack/*/opt/foodebug" in 'packpath' and will find
~/.local/share/nvim/site/pack/foo/opt/foodebug/plugin/debugger.vim and source
it.
This could be done if some conditions are met. For example, depending on
whether Vim supports a feature or a dependency is missing.
You can also load an optional plugin at startup, by putting this command in
your |.vimrc|: >
:packadd! foodebug
The extra "!" is so that the plugin isn't loaded with Vim was started with
|--noplugin|.
It is perfectly normal for a package to only have files in the "opt"
directory. You then need to load each plugin when you want to use it.
Where to put what ~
Since color schemes, loaded with `:colorscheme`, are found below
"pack/*/start" and "pack/*/opt", you could put them anywhere. We recommend
you put them below "pack/*/opt", for example
".vim/pack/mycolors/opt/dark/colors/very_dark.vim".
Filetype plugins should go under "pack/*/start", so that they are always
found. Unless you have more than one plugin for a file type and want to
select which one to load with `:packadd`. E.g. depending on the compiler
version: >
if foo_compiler_version > 34
packadd foo_new
else
packadd foo_old
endif
The "after" directory is most likely not useful in a package. It's not
disallowed though.
==============================================================================
6. Creating Vim packages *package-create*
This assumes you write one or more plugins that you distribute as a package.
If you have two unrelated plugins you would use two packages, so that Vim
users can chose what they include or not. Or you can decide to use one
package with optional plugins, and tell the user to add the ones he wants with
`:packadd`.
Decide how you want to distribute the package. You can create an archive or
you could use a repository. An archive can be used by more users, but is a
bit harder to update to a new version. A repository can usually be kept
up-to-date easily, but it requires a program like "git" to be available.
You can do both, github can automatically create an archive for a release.
Your directory layout would be like this:
start/foobar/plugin/foo.vim " always loaded, defines commands
start/foobar/plugin/bar.vim " always loaded, defines commands
start/foobar/autoload/foo.vim " loaded when foo command used
start/foobar/doc/foo.txt " help for foo.vim
start/foobar/doc/tags " help tags
opt/fooextra/plugin/extra.vim " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt " help for extra.vim
opt/fooextra/doc/tags " help tags
This allows for the user to do: >
mkdir ~/.local/share/nvim/site/pack/myfoobar
cd ~/.local/share/nvim/site/pack/myfoobar
git clone https://github.com/you/foobar.git
Here "myfoobar" is a name that the user can choose, the only condition is that
it differs from other packages.
In your documentation you explain what the plugins do, and tell the user how
to load the optional plugin: >
:packadd! fooextra
You could add this packadd command in one of your plugins, to be executed when
the optional plugin is needed.
Run the `:helptags` command to generate the doc/tags file. Including this
generated file in the package means that the user can drop the package in his
pack directory and the help command works right away. Don't forget to re-run
the command after changing the plugin help: >
:helptags path/start/foobar/doc
:helptags path/opt/fooextra/doc
Dependencies between plugins ~
*packload-two-steps*
Suppose you have a two plugins that depend on the same functionality. You can
put the common functionality in an autoload directory, so that it will be
found automatically. Your package would have these files:
pack/foo/start/one/plugin/one.vim >
call foolib#getit()
< pack/foo/start/two/plugin/two.vim >
call foolib#getit()
< pack/foo/start/lib/autoload/foolib.vim >
func foolib#getit()
This works, because loading packages will first add all found directories to
'runtimepath' before sourcing the plugins.
==============================================================================
7. Debugging scripts *debug-scripts*
Besides the obvious messages that you can add to your scripts to find out what Besides the obvious messages that you can add to your scripts to find out what
they are doing, Vim offers a debug mode. This allows you to step through a they are doing, Vim offers a debug mode. This allows you to step through a
@ -484,7 +727,7 @@ Additionally, these commands can be used:
About the additional commands in debug mode: About the additional commands in debug mode:
- There is no command-line completion for them, you get the completion for the - There is no command-line completion for them, you get the completion for the
normal Ex commands only. normal Ex commands only.
- You can shorten them, up to a single character, unless more then one command - You can shorten them, up to a single character, unless more than one command
starts with the same letter. "f" stands for "finish", use "fr" for "frame". starts with the same letter. "f" stands for "finish", use "fr" for "frame".
- Hitting <CR> will repeat the previous one. When doing another command, this - Hitting <CR> will repeat the previous one. When doing another command, this
is reset (because it's not clear what you want to repeat). is reset (because it's not clear what you want to repeat).
@ -597,7 +840,7 @@ OBSCURE
user, don't use typeahead for debug commands. user, don't use typeahead for debug commands.
============================================================================== ==============================================================================
6. Profiling *profile* *profiling* 8. Profiling *profile* *profiling*
Profiling means that Vim measures the time that is spent on executing Profiling means that Vim measures the time that is spent on executing
functions and/or scripts. The |+profile| feature is required for this. functions and/or scripts. The |+profile| feature is required for this.

View File

@ -1,4 +1,4 @@
*starting.txt* For Vim version 7.4. Last change: 2016 Feb 18 *starting.txt* For Vim version 7.4. Last change: 2016 Apr 05
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -41,6 +41,7 @@ filename One or more file names. The first one will be the current
nvim -- -filename nvim -- -filename
< All arguments after the "--" will be interpreted as file names, < All arguments after the "--" will be interpreted as file names,
no other options or "+command" argument can follow. no other options or "+command" argument can follow.
For behavior of quotes on MS-Windows, see |win32-quotes|.
*--* *--*
- This argument can mean two things, depending on whether Ex - This argument can mean two things, depending on whether Ex
@ -463,6 +464,11 @@ accordingly. Vim proceeds in this order:
commands from the command line have not been executed yet. You can commands from the command line have not been executed yet. You can
use "--cmd 'set noloadplugins'" |--cmd|. use "--cmd 'set noloadplugins'" |--cmd|.
Packages are loaded. These are plugins, as above, but found in the
"start" directory of each entry in 'packpath'. Every plugin directory
found is added in 'runtimepath' and then the plugins are sourced. See
|packages|.
7. Set 'shellpipe' and 'shellredir' 7. Set 'shellpipe' and 'shellredir'
The 'shellpipe' and 'shellredir' options are set according to the The 'shellpipe' and 'shellredir' options are set according to the
value of the 'shell' option, unless they have been set before. value of the 'shell' option, unless they have been set before.
@ -498,8 +504,9 @@ accordingly. Vim proceeds in this order:
14. Execute startup commands 14. Execute startup commands
If a "-t" flag was given to Vim, the tag is jumped to. If a "-t" flag was given to Vim, the tag is jumped to.
The commands given with the |-c| and |+cmd| arguments are executed. The commands given with the |-c| and |+cmd| arguments are executed.
The starting flag is reset, has("vim_starting") will now return zero.
If the 'insertmode' option is set, Insert mode is entered. If the 'insertmode' option is set, Insert mode is entered.
The starting flag is reset, has("vim_starting") will now return zero.
The |v:vim_did_enter| variable is set to 1.
The |VimEnter| autocommands are executed. The |VimEnter| autocommands are executed.
Some hints on using initializations: Some hints on using initializations:
@ -710,7 +717,7 @@ There are several ways to exit Vim:
- Use `:cquit`. Also when there are changes. - Use `:cquit`. Also when there are changes.
When using `:cquit` or when there was an error message Vim exits with exit When using `:cquit` or when there was an error message Vim exits with exit
code 1. Errors can be avoide by using `:silent!`. code 1. Errors can be avoided by using `:silent!`.
============================================================================== ==============================================================================
6. Saving settings *save-settings* 6. Saving settings *save-settings*

View File

@ -1,4 +1,4 @@
*syntax.txt* For Vim version 7.4. Last change: 2016 Jan 28 *syntax.txt* For Vim version 7.4. Last change: 2016 Apr 10
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -936,26 +936,27 @@ To disable them use ":unlet". Example: >
:unlet c_comment_strings :unlet c_comment_strings
Variable Highlight ~ Variable Highlight ~
c_gnu GNU gcc specific items *c_gnu* GNU gcc specific items
c_comment_strings strings and numbers inside a comment *c_comment_strings* strings and numbers inside a comment
c_space_errors trailing white space and spaces before a <Tab> *c_space_errors* trailing white space and spaces before a <Tab>
c_no_trail_space_error ... but no trailing spaces *c_no_trail_space_error* ... but no trailing spaces
c_no_tab_space_error ... but no spaces before a <Tab> *c_no_tab_space_error* ... but no spaces before a <Tab>
c_no_bracket_error don't highlight {}; inside [] as errors *c_no_bracket_error* don't highlight {}; inside [] as errors
c_no_curly_error don't highlight {}; inside [] and () as errors; *c_no_curly_error* don't highlight {}; inside [] and () as errors;
except { and } in first column except { and } in first column
c_curly_error highlight a missing }; this forces syncing from the *c_curly_error* highlight a missing }; this forces syncing from the
start of the file, can be slow start of the file, can be slow
c_no_ansi don't do standard ANSI types and constants *c_no_ansi* don't do standard ANSI types and constants
c_ansi_typedefs ... but do standard ANSI types *c_ansi_typedefs* ... but do standard ANSI types
c_ansi_constants ... but do standard ANSI constants *c_ansi_constants* ... but do standard ANSI constants
c_no_utf don't highlight \u and \U in strings *c_no_utf* don't highlight \u and \U in strings
c_syntax_for_h for *.h files use C syntax instead of C++ and use objc *c_syntax_for_h* for *.h files use C syntax instead of C++ and use objc
syntax instead of objcpp syntax instead of objcpp
c_no_if0 don't highlight "#if 0" blocks as comments *c_no_if0* don't highlight "#if 0" blocks as comments
c_no_cformat don't highlight %-formats in strings *c_no_cformat* don't highlight %-formats in strings
c_no_c99 don't highlight C99 standard items *c_no_c99* don't highlight C99 standard items
c_no_c11 don't highlight C11 standard items *c_no_c11* don't highlight C11 standard items
*c_no_bsd* don't highlight BSD specific types
When 'foldmethod' is set to "syntax" then /* */ comments and { } blocks will When 'foldmethod' is set to "syntax" then /* */ comments and { } blocks will
become a fold. If you don't want comments to become a fold use: > become a fold. If you don't want comments to become a fold use: >
@ -2886,7 +2887,7 @@ You may wish to embed languages into sh. I'll give an example courtesy of
Lorance Stinson on how to do this with awk as an example. Put the following Lorance Stinson on how to do this with awk as an example. Put the following
file into $HOME/.config/nvim/after/syntax/sh/awkembed.vim: > file into $HOME/.config/nvim/after/syntax/sh/awkembed.vim: >
" AWK Embedding: {{{1 " AWK Embedding:
" ============== " ==============
" Shamelessly ripped from aspperl.vim by Aaron Hope. " Shamelessly ripped from aspperl.vim by Aaron Hope.
if exists("b:current_syntax") if exists("b:current_syntax")
@ -3345,6 +3346,13 @@ Note that schemas are not actually limited to plain scalars, but this is the
only difference between schemas defined in YAML specification and the only only difference between schemas defined in YAML specification and the only
difference defined in the syntax file. difference defined in the syntax file.
ZSH *zsh.vim* *ft-zsh-syntax*
The syntax script for zsh allows for syntax-based folding: >
:let g:zsh_fold_enable = 1
============================================================================== ==============================================================================
5. Defining a syntax *:syn-define* *E410* 5. Defining a syntax *:syn-define* *E410*
@ -4511,9 +4519,9 @@ in their own color.
:colo[rscheme] {name} Load color scheme {name}. This searches 'runtimepath' :colo[rscheme] {name} Load color scheme {name}. This searches 'runtimepath'
for the file "colors/{name}.vim". The first one that for the file "colors/{name}.vim". The first one that
is found is loaded. is found is loaded.
To see the name of the currently active color scheme: > Also searches all plugins in 'packpath', first below
:colo "start" and then under "opt".
< The name is also stored in the g:colors_name variable.
Doesn't work recursively, thus you can't use Doesn't work recursively, thus you can't use
":colorscheme" in a color scheme script. ":colorscheme" in a color scheme script.
After the color scheme has been loaded the After the color scheme has been loaded the
@ -5019,6 +5027,9 @@ defaults back: >
:syntax reset :syntax reset
It is a bit of a wrong name, since it does not reset any syntax items, it only
affects the highlighting.
This doesn't change the colors for the 'highlight' option. This doesn't change the colors for the 'highlight' option.
Note that the syntax colors that you set in your vimrc file will also be reset Note that the syntax colors that you set in your vimrc file will also be reset

View File

@ -1,4 +1,4 @@
*usr_05.txt* For Vim version 7.4. Last change: 2012 Nov 20 *usr_05.txt* For Vim version 7.4. Last change: 2016 Mar 28
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@ -12,10 +12,11 @@ Vim's capabilities. Or define your own macros.
|05.1| The vimrc file |05.1| The vimrc file
|05.2| The example vimrc file explained |05.2| The example vimrc file explained
|05.3| Simple mappings |05.3| Simple mappings
|05.4| Adding a plugin |05.4| Adding a package
|05.5| Adding a help file |05.5| Adding a plugin
|05.6| The option window |05.6| Adding a help file
|05.7| Often used options |05.7| The option window
|05.8| Often used options
Next chapter: |usr_06.txt| Using syntax highlighting Next chapter: |usr_06.txt| Using syntax highlighting
Previous chapter: |usr_04.txt| Making small changes Previous chapter: |usr_04.txt| Making small changes
@ -245,7 +246,47 @@ The ":map" command (with no arguments) lists your current mappings. At
least the ones for Normal mode. More about mappings in section |40.1|. least the ones for Normal mode. More about mappings in section |40.1|.
============================================================================== ==============================================================================
*05.4* Adding a plugin *add-plugin* *plugin* *05.4* Adding a package *add-package* *vimball-install*
A package is a set of files that you can add to Vim. There are two kinds of
packages: optional and automatically loaded on startup.
The Vim distribution comes with a few packages that you can optionally use.
For example, the vimball plugin. This plugin supports creating and using
vimballs (self-installing Vim plugin archives).
To start using the vimball plugin, add one line to your vimrc file: >
packadd vimball
That's all! You can also type the command to try it out. Now you can find
help about this plugin: >
:help vimball
This works, because when `:packadd` loaded the plugin it also added the
package directory in 'runtimepath', so that the help file can be found. The
tags for vimball's help are already created. If you need to generate the help
tags for a package, see the `:helptags` command.
You can find packages on the Internet in various places. It usually comes as
an archive or as a repository. For an archive you can follow these steps:
1. create the package directory: >
mkdir -p ~/.local/share/nvim/site/pack/fancy
< "fancy" can be any name of your liking. Use one that describes the
package.
2. unpack the archive in that directory. This assumes the top
directory in the archive is "start": >
cd ~/.local/share/nvim/site/pack/fancy
unzip /tmp/fancy.zip
< If the archive layout is different make sure that you end up with a
path like this:
~/.local/share/nvim/site/pack/fancy/start/fancytext/plugin/fancy.vim ~
Here "fancytext" is the name of the package, it can be anything
else.
More information about packages can be found here: |packages|.
==============================================================================
*05.5* Adding a plugin *add-plugin* *plugin*
Vim's functionality can be extended by adding plugins. A plugin is nothing Vim's functionality can be extended by adding plugins. A plugin is nothing
more than a Vim script file that is loaded automatically when Vim starts. You more than a Vim script file that is loaded automatically when Vim starts. You
@ -299,10 +340,9 @@ Then copy the file to your plugin directory:
Example for Unix (assuming you didn't have a plugin directory yet): > Example for Unix (assuming you didn't have a plugin directory yet): >
mkdir -p ~/.local/share/nvim/site/plugin mkdir -p ~/.local/share/nvim/site/plugin
cp /usr/local/share/vim/vim60/macros/justify.vim ~/.local/share/nvim/site/plugin cp /tmp/yourplugin.vim ~/.local/share/nvim/site/plugin
That's all! Now you can use the commands defined in this plugin to justify That's all! Now you can use the commands defined in this plugin.
text.
Instead of putting plugins directly into the plugin/ directory, you may Instead of putting plugins directly into the plugin/ directory, you may
better organize them by putting them into subdirectories under plugin/. better organize them by putting them into subdirectories under plugin/.
@ -384,7 +424,7 @@ Further reading:
|new-filetype| How to detect a new file type. |new-filetype| How to detect a new file type.
============================================================================== ==============================================================================
*05.5* Adding a help file *add-local-help* *05.6* Adding a help file *add-local-help*
If you are lucky, the plugin you installed also comes with a help file. We If you are lucky, the plugin you installed also comes with a help file. We
will explain how to install the help file, so that you can easily find help will explain how to install the help file, so that you can easily find help
@ -417,7 +457,7 @@ them through the tag.
For writing a local help file, see |write-local-help|. For writing a local help file, see |write-local-help|.
============================================================================== ==============================================================================
*05.6* The option window *05.7* The option window
If you are looking for an option that does what you want, you can search in If you are looking for an option that does what you want, you can search in
the help files here: |options|. Another way is by using this command: > the help files here: |options|. Another way is by using this command: >
@ -456,7 +496,7 @@ border. This is what the 'scrolloff' option does, it specifies an offset
from the window border where scrolling starts. from the window border where scrolling starts.
============================================================================== ==============================================================================
*05.7* Often used options *05.8* Often used options
There are an awful lot of options. Most of them you will hardly ever use. There are an awful lot of options. Most of them you will hardly ever use.
Some of the more useful ones will be mentioned here. Don't forget you can Some of the more useful ones will be mentioned here. Don't forget you can

View File

@ -1,4 +1,4 @@
*usr_25.txt* For Vim version 7.4. Last change: 2014 Oct 29 *usr_25.txt* For Vim version 7.4. Last change: 2016 Mar 28
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@ -196,12 +196,16 @@ Vim has no built-in way of justifying text. However, there is a neat macro
package that does the job. To use this package, execute the following package that does the job. To use this package, execute the following
command: > command: >
:runtime macros/justify.vim :packadd justify
Or put this line in your |vimrc|: >
packadd! justify
This Vim script file defines a new visual command "_j". To justify a block of This Vim script file defines a new visual command "_j". To justify a block of
text, highlight the text in Visual mode and then execute "_j". text, highlight the text in Visual mode and then execute "_j".
Look in the file for more explanations. To go there, do "gf" on this name: Look in the file for more explanations. To go there, do "gf" on this name:
$VIMRUNTIME/macros/justify.vim. $VIMRUNTIME/pack/dist/opt/justify/plugin/justify.vim.
An alternative is to filter the text through an external program. Example: > An alternative is to filter the text through an external program. Example: >

View File

@ -1,4 +1,4 @@
*usr_29.txt* For Vim version 7.4. Last change: 2008 Jun 28 *usr_29.txt* For Vim version 7.4. Last change: 2016 Feb 27
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar

View File

@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 7.4. Last change: 2016 Feb 14 *usr_41.txt* For Vim version 7.4. Last change: 2016 Apr 12
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@ -768,6 +768,7 @@ Date and Time: *date-functions* *time-functions*
strftime() convert time to a string strftime() convert time to a string
reltime() get the current or elapsed time accurately reltime() get the current or elapsed time accurately
reltimestr() convert reltime() result to a string reltimestr() convert reltime() result to a string
reltimefloat() convert reltime() result to a Float
*buffer-functions* *window-functions* *arg-functions* *buffer-functions* *window-functions* *arg-functions*
Buffers, windows and the argument list: Buffers, windows and the argument list:
@ -890,8 +891,13 @@ Mappings: *mapping-functions*
Testing: *test-functions* Testing: *test-functions*
assert_equal() assert that two expressions values are equal assert_equal() assert that two expressions values are equal
assert_notequal() assert that two expressions values are not equal
assert_match() assert that a pattern matches the value
assert_notmatch() assert that a pattern does not match the value
assert_false() assert that an expression is false assert_false() assert that an expression is false
assert_true() assert that an expression is true assert_true() assert that an expression is true
assert_exception() assert that a command throws an exception
assert_fails() assert that a function call fails
Various: *various-functions* Various: *various-functions*
mode() get current editing mode mode() get current editing mode

View File

@ -1,4 +1,4 @@
*usr_toc.txt* For Vim version 7.4. Last change: 2010 Jul 20 *usr_toc.txt* For Vim version 7.4. Last change: 2016 Mar 25
VIM USER MANUAL - by Bram Moolenaar VIM USER MANUAL - by Bram Moolenaar
@ -101,10 +101,11 @@ Read this from start to end to learn the essential commands.
|05.1| The vimrc file |05.1| The vimrc file
|05.2| The example vimrc file explained |05.2| The example vimrc file explained
|05.3| Simple mappings |05.3| Simple mappings
|05.4| Adding a plugin |05.4| Adding a package
|05.5| Adding a help file |05.5| Adding a plugin
|05.6| The option window |05.6| Adding a help file
|05.7| Often used options |05.7| The option window
|05.8| Often used options
|usr_06.txt| Using syntax highlighting |usr_06.txt| Using syntax highlighting
|06.1| Switching it on |06.1| Switching it on

View File

@ -1,4 +1,4 @@
*various.txt* For Vim version 7.4. Last change: 2016 Feb 18 *various.txt* For Vim version 7.4. Last change: 2016 Mar 20
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -375,6 +375,7 @@ B *+termguicolors* 24-bit color in xterm-compatible terminals support
N *+termresponse* support for |t_RV| and |v:termresponse| N *+termresponse* support for |t_RV| and |v:termresponse|
N *+textobjects* |text-objects| selection N *+textobjects* |text-objects| selection
*+tgetent* non-Unix only: able to use external termcap *+tgetent* non-Unix only: able to use external termcap
N *+timers* the |timer_start()| function
N *+title* Setting the window 'title' and 'icon' N *+title* Setting the window 'title' and 'icon'
N *+toolbar* |gui-toolbar| N *+toolbar* |gui-toolbar|
N *+user_commands* User-defined commands. |user-commands| N *+user_commands* User-defined commands. |user-commands|

View File

@ -0,0 +1,96 @@
" Vim filetype plugin
" Language: Eiffel
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: 2010 Aug 29
if (exists("b:did_ftplugin"))
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal comments=:--
setlocal commentstring=--\ %s
setlocal formatoptions-=t formatoptions+=croql
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Eiffel Source Files (*.e)\t*.e\n" .
\ "Eiffel Control Files (*.ecf, *.ace, *.xace)\t*.ecf;*.ace;*.xace\n" .
\ "All Files (*.*)\t*.*\n"
endif
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_ignorecase = 0
" Silly \%^ trick to match note at head of pair and in middle prevents
" 'g%' wrapping from 'note' to 'end'
let b:match_words = '\%^:' .
\ '\<\%(^note\|indexing\|class\|^obsolete\|inherit\|insert\|^create\|convert\|feature\|^invariant\)\>:' .
\ '^end\>,' .
\ '\<\%(do\|deferred\|external\|once\%(\s\+"\)\@!\|check\|debug\|if\|inspect\|from\|across\)\>:' .
\ '\%(\%(^\s\+\)\@<=\%(then\|until\|loop\)\|\%(then\|until\|loop\)\s\+[^ -]\|' .
\ '\<\%(ensure\%(\s\+then\)\=\|rescue\|_then\|elseif\|else\|when\|\s\@<=invariant\|_until\|_loop\|variant\|_as\|alias\)\>\):' .
\ '\s\@<=end\>'
let b:match_skip = 's:\<eiffel\%(Comment\|String\|Operator\)\>'
noremap [% <Nop>
noremap ]% <Nop>
vnoremap a% <Nop>
endif
let b:undo_ftplugin = "setl fo< com< cms<" .
\ "| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
if !exists("g:no_plugin_maps") && !exists("g:no_eiffel_maps")
function! s:DoMotion(pattern, count, flags) abort
normal! m'
for i in range(a:count)
call search(a:pattern, a:flags)
endfor
endfunction
let sections = '^\%(note\|indexing\|' .
\ '\%(\%(deferred\|expanded\|external\|frozen\)\s\+\)*class\|' .
\ 'obsolete\|inherit\|insert\|create\|convert\|feature\|' .
\ 'invariant\|end\)\>'
nnoremap <silent> <buffer> ]] :<C-U>call <SID>DoMotion(sections, v:count1, 'W')<CR>
xnoremap <silent> <buffer> ]] :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(sections, v:count1, 'W')<CR>
nnoremap <silent> <buffer> [[ :<C-U>call <SID>DoMotion(sections, v:count1, 'Wb')<CR>
xnoremap <silent> <buffer> [[ :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(sections, v:count1, 'Wb')<CR>
function! s:DoFeatureMotion(count, flags)
let view = winsaveview()
call cursor(1, 1)
let [features_start, _] = searchpos('^feature\>')
call search('^\s\+\a') " find the first feature
let spaces = indent(line('.'))
let [features_end, _] = searchpos('^\%(invariant\|note\|end\)\>')
call winrestview(view)
call s:DoMotion('\%>' . features_start . 'l\%<' . features_end . 'l^\s*\%' . (spaces + 1) . 'v\zs\a', a:count, a:flags)
endfunction
nnoremap <silent> <buffer> ]m :<C-U>call <SID>DoFeatureMotion(v:count1, 'W')<CR>
xnoremap <silent> <buffer> ]m :<C-U>exe "normal! gv"<Bar>call <SID>DoFeatureMotion(v:count1, 'W')<CR>
nnoremap <silent> <buffer> [m :<C-U>call <SID>DoFeatureMotion(v:count1, 'Wb')<CR>
xnoremap <silent> <buffer> [m :<C-U>exe "normal! gv"<Bar>call <SID>DoFeatureMotion(v:count1, 'Wb')<CR>
let comment_block_start = '^\%(\s\+--.*\n\)\@<!\s\+--'
let comment_block_end = '^\s\+--.*\n\%(\s\+--\)\@!'
nnoremap <silent> <buffer> ]- :<C-U>call <SID>DoMotion(comment_block_start, 1, 'W')<CR>
xnoremap <silent> <buffer> ]- :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(comment_block_start, 1, 'W')<CR>
nnoremap <silent> <buffer> [- :<C-U>call <SID>DoMotion(comment_block_end, 1, 'Wb')<CR>
xnoremap <silent> <buffer> [- :<C-U>exe "normal! gv"<Bar>call <SID>DoMotion(comment_block_end, 1, 'Wb')<CR>
let b:undo_ftplugin = b:undo_ftplugin .
\ "| silent! execute 'unmap <buffer> [[' | silent! execute 'unmap <buffer> ]]'" .
\ "| silent! execute 'unmap <buffer> [m' | silent! execute 'unmap <buffer> ]m'" .
\ "| silent! execute 'unmap <buffer> [-' | silent! execute 'unmap <buffer> ]-'"
endif
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8

View File

@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: R " Language: R
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Sun Feb 23, 2014 04:07PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Only do this when not yet done for this buffer " Only do this when not yet done for this buffer
if exists("b:did_ftplugin") if exists("b:did_ftplugin")

View File

@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: R help file " Language: R help file
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Wed Jul 09, 2014 06:23PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:37PM
" Only do this when not yet done for this buffer " Only do this when not yet done for this buffer
if exists("b:did_ftplugin") if exists("b:did_ftplugin")

View File

@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: R help file " Language: R help file
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Wed Jul 09, 2014 06:23PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:37PM
" Original work by Alex Zvoleff (adjusted for rmd by Michel Kuhlmann) " Original work by Alex Zvoleff (adjusted for rmd by Michel Kuhlmann)
" Only do this when not yet done for this buffer " Only do this when not yet done for this buffer

View File

@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: Rnoweb " Language: Rnoweb
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Wed Jul 09, 2014 06:23PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:37PM
" Only do this when not yet done for this buffer " Only do this when not yet done for this buffer
if exists("b:did_ftplugin") if exists("b:did_ftplugin")

View File

@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: reStructuredText documentation format with R code " Language: reStructuredText documentation format with R code
" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Wed Jul 09, 2014 06:23PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Original work by Alex Zvoleff " Original work by Alex Zvoleff
" Only do this when not yet done for this buffer " Only do this when not yet done for this buffer

View File

@ -1,7 +1,8 @@
" Vim indent file " Vim indent file
" Language: R " Language: R
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com> " Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Thu Mar 26, 2015 05:36PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Thu Feb 18, 2016 06:32AM
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
@ -32,7 +33,7 @@ if ! exists("g:r_indent_ess_compatible")
let g:r_indent_ess_compatible = 0 let g:r_indent_ess_compatible = 0
endif endif
if ! exists("g:r_indent_op_pattern") if ! exists("g:r_indent_op_pattern")
let g:r_indent_op_pattern = '\(+\|-\|\*\|/\|=\|\~\|%\)$' let g:r_indent_op_pattern = '\(&\||\|+\|-\|\*\|/\|=\|\~\|%\|->\)\s*$'
endif endif
function s:RDelete_quotes(line) function s:RDelete_quotes(line)
@ -265,7 +266,7 @@ function GetRIndent()
return 0 return 0
endif endif
if cline =~ '^\s*{' if cline =~ '^\s*{' && s:Get_paren_balance(cline, '{', '}') > 0
if g:r_indent_ess_compatible && line =~ ')$' if g:r_indent_ess_compatible && line =~ ')$'
let nlnum = lnum let nlnum = lnum
let nline = line let nline = line
@ -283,7 +284,7 @@ function GetRIndent()
endif endif
" line is an incomplete command: " line is an incomplete command:
if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$' if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$' || line =~ '->$'
return indent(lnum) + &sw return indent(lnum) + &sw
endif endif
@ -344,7 +345,7 @@ function GetRIndent()
endif endif
let post_block = 0 let post_block = 0
if line =~ '}$' if line =~ '}$' && s:Get_paren_balance(line, '{', '}') < 0
let lnum = s:Get_matching_brace(lnum, '{', '}', 0) let lnum = s:Get_matching_brace(lnum, '{', '}', 0)
let line = SanitizeRLine(getline(lnum)) let line = SanitizeRLine(getline(lnum))
if lnum > 0 && line =~ '^\s*{' if lnum > 0 && line =~ '^\s*{'
@ -359,14 +360,14 @@ function GetRIndent()
let olnum = s:Get_prev_line(lnum) let olnum = s:Get_prev_line(lnum)
let oline = getline(olnum) let oline = getline(olnum)
if olnum > 0 if olnum > 0
if line =~ g:r_indent_op_pattern if line =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
if oline =~ g:r_indent_op_pattern if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
return indent(lnum) return indent(lnum)
else else
return indent(lnum) + &sw return indent(lnum) + &sw
endif endif
else else
if oline =~ g:r_indent_op_pattern if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0
return indent(lnum) - &sw return indent(lnum) - &sw
endif endif
endif endif
@ -471,7 +472,6 @@ function GetRIndent()
endif endif
let ind = indent(lnum) let ind = indent(lnum)
let pind = indent(plnum)
if g:r_indent_align_args == 0 && pb != 0 if g:r_indent_align_args == 0 && pb != 0
let ind += pb * &sw let ind += pb * &sw
@ -483,6 +483,12 @@ function GetRIndent()
return ind return ind
endif endif
if plnum > 0
let pind = indent(plnum)
else
let pind = 0
endif
if ind == pind || (ind == (pind + &sw) && pline =~ '{$' && ppost_else == 0) if ind == pind || (ind == (pind + &sw) && pline =~ '{$' && ppost_else == 0)
return ind return ind
endif endif

View File

@ -1,7 +1,8 @@
" Vim indent file " Vim indent file
" Language: R Documentation (Help), *.Rd " Language: R Documentation (Help), *.Rd
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com> " Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Thu Oct 16, 2014 07:07AM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.

View File

@ -1,7 +1,8 @@
" Vim indent file " Vim indent file
" Language: Rmd " Language: Rmd
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com> " Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Thu Jul 10, 2014 07:11PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.

View File

@ -1,7 +1,8 @@
" Vim indent file " Vim indent file
" Language: Rnoweb " Language: Rnoweb
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com> " Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Sun Mar 22, 2015 09:28AM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.

View File

@ -1,7 +1,8 @@
" Vim indent file " Vim indent file
" Language: Rrst " Language: Rrst
" Author: Jakson Alves de Aquino <jalvesaq@gmail.com> " Author: Jakson Alves de Aquino <jalvesaq@gmail.com>
" Last Change: Wed Jul 09, 2014 07:33PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Tue Apr 07, 2015 04:38PM
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.

View File

@ -3,7 +3,7 @@
" Maintainer: Christian Brabandt <cb@256bit.org> " Maintainer: Christian Brabandt <cb@256bit.org>
" Previous Maintainer: Peter Aronoff <telemachus@arpinum.org> " Previous Maintainer: Peter Aronoff <telemachus@arpinum.org>
" Original Author: Nikolai Weibull <now@bitwi.se> " Original Author: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2016-01-15 " Latest Revision: 2016-02-15
" License: Vim (see :h license) " License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-sh-indent " Repository: https://github.com/chrisbra/vim-sh-indent
@ -12,14 +12,14 @@ if exists("b:did_indent")
endif endif
let b:did_indent = 1 let b:did_indent = 1
let b:undo_indent = 'setlocal indentexpr< indentkeys< smartindent<'
setlocal indentexpr=GetShIndent() setlocal indentexpr=GetShIndent()
setlocal indentkeys+=0=then,0=do,0=else,0=elif,0=fi,0=esac,0=done,0=end,),0=;;,0=;& setlocal indentkeys+=0=then,0=do,0=else,0=elif,0=fi,0=esac,0=done,0=end,),0=;;,0=;&
setlocal indentkeys+=0=fin,0=fil,0=fip,0=fir,0=fix setlocal indentkeys+=0=fin,0=fil,0=fip,0=fir,0=fix
setlocal indentkeys-=:,0# setlocal indentkeys-=:,0#
setlocal nosmartindent setlocal nosmartindent
let b:undo_indent = 'setlocal indentexpr< indentkeys< smartindent<'
if exists("*GetShIndent") if exists("*GetShIndent")
finish finish
endif endif
@ -67,7 +67,7 @@ function! GetShIndent()
if !s:is_case_ended(line) if !s:is_case_ended(line)
let ind += s:indent_value('case-statements') let ind += s:indent_value('case-statements')
endif endif
elseif line =~ '^\s*\<\k\+\>\s*()\s*{' || line =~ '^\s*{' elseif line =~ '^\s*\<\k\+\>\s*()\s*{' || line =~ '^\s*{' || line =~ '^\s*function\s*\w\S\+\s*\%(()\)\?\s*{'
if line !~ '}\s*\%(#.*\)\=$' if line !~ '}\s*\%(#.*\)\=$'
let ind += s:indent_value('default') let ind += s:indent_value('default')
endif endif

View File

@ -2,10 +2,9 @@
" Language: LaTeX " Language: LaTeX
" Maintainer: YiChao Zhou <broken.zhou AT gmail.com> " Maintainer: YiChao Zhou <broken.zhou AT gmail.com>
" Created: Sat, 16 Feb 2002 16:50:19 +0100 " Created: Sat, 16 Feb 2002 16:50:19 +0100
" Last Change: 2012 Mar 18 19:19:50 " Version: 0.9.2
" Version: 0.7 " Please email me if you found something I can do. Comments, bug report and
" Please email me if you found something we can do. Bug report and " feature request are welcome.
" feature request is welcome.
" Last Update: {{{ " Last Update: {{{
" 25th Sep 2002, by LH : " 25th Sep 2002, by LH :
@ -49,6 +48,17 @@
" 2013/05/02 by Zhou Yichao <broken.zhou AT gmail.com> " 2013/05/02 by Zhou Yichao <broken.zhou AT gmail.com>
" (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk " (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk
" for reporting this. " for reporting this.
" 2014/06/23 by Zhou Yichao <broken.zhou AT gmail.com>
" (*) Remove the feature g:tex_indent_and because it is buggy.
" (*) If there is not any obvious indentation hints, we do not
" alert our user's current indentation.
" (*) g:tex_indent_brace now only works if the open brace is the
" last character of that line.
" 2014/08/03 by Zhou Yichao <broken.zhou AT gmail.com>
" (*) Indent current line if last line has larger indentation
" 2014/08/09 by Zhou Yichao <broken.zhou AT gmail.com>
" (*) Add missing return value for s:GetEndIndentation(...)
"
" }}} " }}}
" Document: {{{ " Document: {{{
@ -60,7 +70,17 @@
" * g:tex_indent_brace " * g:tex_indent_brace
" "
" If this variable is unset or non-zero, it will use smartindent-like style " If this variable is unset or non-zero, it will use smartindent-like style
" for "{}" and "[]" " for "{}" and "[]". Now this only works if the open brace is the last
" character of that line.
"
" % Example 1
" \usetikzlibrary{
" external
" }
"
" % Example 2
" \tikzexternalize[
" prefix=tikz]
" "
" * g:tex_indent_items " * g:tex_indent_items
" "
@ -98,14 +118,6 @@
" "
" A list of environment names. separated with '\|', where no indentation is " A list of environment names. separated with '\|', where no indentation is
" required. The default is 'document\|verbatim'. " required. The default is 'document\|verbatim'.
"
" * g:tex_indent_and
"
" If this variable is unset or zero, vim will try to align the line with first
" "&". This is pretty useful when you use environment like table or align.
" Note that this feature need to search back some line, so vim may become
" a little slow.
"
" }}} " }}}
" Only define the function once " Only define the function once
@ -126,8 +138,8 @@ endif
if !exists("g:tex_indent_brace") if !exists("g:tex_indent_brace")
let g:tex_indent_brace = 1 let g:tex_indent_brace = 1
endif endif
if !exists("g:tex_indent_and") if !exists("g:tex_max_scan_line")
let g:tex_indent_and = 1 let g:tex_max_scan_line = 60
endif endif
if g:tex_indent_items if g:tex_indent_items
if !exists("g:tex_itemize_env") if !exists("g:tex_itemize_env")
@ -140,10 +152,6 @@ else
let g:tex_items = '' let g:tex_items = ''
endif endif
if !exists("g:tex_indent_paretheses")
let g:tex_indent_paretheses = 1
endif
if !exists("g:tex_noindent_env") if !exists("g:tex_noindent_env")
let g:tex_noindent_env = 'document\|verbatim\|lstlisting' let g:tex_noindent_env = 'document\|verbatim\|lstlisting'
endif "}}} endif "}}}
@ -160,6 +168,7 @@ let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '')
function! GetTeXIndent() " {{{ function! GetTeXIndent() " {{{
" Find a non-blank line above the current line. " Find a non-blank line above the current line.
let lnum = prevnonblank(v:lnum - 1) let lnum = prevnonblank(v:lnum - 1)
let cnum = v:lnum
" Comment line is not what we need. " Comment line is not what we need.
while lnum != 0 && getline(lnum) =~ '^\s*%' while lnum != 0 && getline(lnum) =~ '^\s*%'
@ -171,8 +180,8 @@ function! GetTeXIndent() " {{{
return 0 return 0
endif endif
let line = substitute(getline(lnum), '%.*', ' ','g') " last line let line = substitute(getline(lnum), '\s*%.*', '','g') " last line
let cline = substitute(getline(v:lnum), '%.*', ' ', 'g') " current line let cline = substitute(getline(v:lnum), '\s*%.*', '', 'g') " current line
" We are in verbatim, so do what our user what. " We are in verbatim, so do what our user what.
if synIDattr(synID(v:lnum, indent(v:lnum), 1), "name") == "texZone" if synIDattr(synID(v:lnum, indent(v:lnum), 1), "name") == "texZone"
@ -183,26 +192,12 @@ function! GetTeXIndent() " {{{
end end
endif endif
" You want to align with "&"
if g:tex_indent_and
" Align only when current line start with "&"
if line =~ '&.*\\\\' && cline =~ '^\s*&'
return indent(v:lnum) + stridx(line, "&") - stridx(cline, "&")
endif
" set line & lnum to the line which doesn't contain "&"
while lnum != 0 && (stridx(line, "&") != -1 || line =~ '^\s*%')
let lnum = prevnonblank(lnum - 1)
let line = getline(lnum)
endwhile
endif
if lnum == 0 if lnum == 0
return 0 return 0
endif endif
let ind = indent(lnum) let ind = indent(lnum)
let stay = 1
" New code for comment: retain the indent of current line " New code for comment: retain the indent of current line
if cline =~ '^\s*%' if cline =~ '^\s*%'
@ -216,77 +211,197 @@ function! GetTeXIndent() " {{{
" ZYC modification : \end after \begin won't cause wrong indent anymore " ZYC modification : \end after \begin won't cause wrong indent anymore
if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env
let ind = ind + &sw let ind = ind + &sw
let stay = 0
if g:tex_indent_items if g:tex_indent_items
" Add another sw for item-environments " Add another sw for item-environments
if line =~ g:tex_itemize_env if line =~ g:tex_itemize_env
let ind = ind + &sw let ind = ind + &sw
let stay = 0
endif endif
endif endif
endif endif
if cline =~ '\\end{.*}'
let retn = s:GetEndIndentation(v:lnum)
if retn != -1
return retn
endif
end
" Subtract a 'shiftwidth' when an environment ends " Subtract a 'shiftwidth' when an environment ends
if cline =~ '\\end{.*}' && cline !~ g:tex_noindent_env if cline =~ '\\end{.*}'
\ && cline !~ g:tex_noindent_env
\ && cline !~ '\\begin{.*}.*\\end{.*}'
if g:tex_indent_items if g:tex_indent_items
" Remove another sw for item-environments " Remove another sw for item-environments
if cline =~ g:tex_itemize_env if cline =~ g:tex_itemize_env
let ind = ind - &sw let ind = ind - &sw
let stay = 0
endif endif
endif endif
let ind = ind - &sw let ind = ind - &sw
let stay = 0
endif endif
if g:tex_indent_brace if g:tex_indent_brace
let sum1 = 0 let char = line[strlen(line)-1]
for i in range(0, strlen(line)-1) if char == '[' || char == '{'
if line[i] == "}" || line[i] == "]" || let ind += &sw
\ strpart(line, i, 7) == '\right)' let stay = 0
let sum1 = max([0, sum1-1]) endif
let cind = indent(v:lnum)
let char = cline[cind]
if (char == ']' || char == '}') &&
\ s:CheckPairedIsLastCharacter(v:lnum, cind)
let ind -= &sw
let stay = 0
endif
for i in range(indent(lnum)+1, strlen(line)-1)
let char = line[i]
if char == ']' || char == '}'
if s:CheckPairedIsLastCharacter(lnum, i)
let ind -= &sw
let stay = 0
endif endif
if line[i] == "{" || line[i] == "[" ||
\ strpart(line, i, 6) == '\left('
let sum1 += 1
endif endif
endfor endfor
let sum2 = 0
for i in reverse(range(0, strlen(cline)-1))
if cline[i] == "{" || cline[i] == "[" ||
\ strpart(cline, i, 6) == '\left('
let sum2 = max([0, sum2-1])
endif
if cline[i] == "}" || cline[i] == "]" ||
\ strpart(cline, i, 7) == '\right)'
let sum2 += 1
endif
endfor
let ind += (sum1 - sum2) * &sw
endif
if g:tex_indent_paretheses
endif endif
" Special treatment for 'item' " Special treatment for 'item'
" ---------------------------- " ----------------------------
if g:tex_indent_items if g:tex_indent_items
" '\item' or '\bibitem' itself: " '\item' or '\bibitem' itself:
if cline =~ g:tex_items if cline =~ g:tex_items
let ind = ind - &sw let ind = ind - &sw
let stay = 0
endif endif
" lines following to '\item' are intented once again: " lines following to '\item' are intented once again:
if line =~ g:tex_items if line =~ g:tex_items
let ind = ind + &sw let ind = ind + &sw
let stay = 0
endif
endif endif
endif if stay
" If there is no obvious indentation hint, we trust our user.
if empty(cline)
return ind return ind
else
return max([indent(v:lnum), s:GetLastBeginIndentation(v:lnum)])
endif
else
return ind
endif
endfunction "}}}
function! s:GetLastBeginIndentation(lnum) " {{{
let matchend = 1
for lnum in range(a:lnum-1, max([a:lnum - g:tex_max_scan_line, 1]), -1)
let line = getline(lnum)
if line =~ '\\end{.*}'
let matchend += 1
endif
if line =~ '\\begin{.*}'
let matchend -= 1
endif
if matchend == 0
if line =~ g:tex_itemize_env
return indent(lnum) + 2 * &sw
endif
if line =~ g:tex_noindent_env
return indent(lnum)
endif
return indent(lnum) + &sw
endif
endfor
return -1
endfunction
function! s:GetEndIndentation(lnum) " {{{
if getline(a:lnum) =~ '\\begin{.*}.*\\end{.*}'
return -1
endif
let min_indent = 100
let matchend = 1
for lnum in range(a:lnum-1, max([a:lnum-g:tex_max_scan_line, 1]), -1)
let line = getline(lnum)
if line =~ '\\end{.*}'
let matchend += 1
endif
if line =~ '\\begin{.*}'
let matchend -= 1
endif
if matchend == 0
return indent(lnum)
endif
if !empty(line)
let min_indent = min([min_indent, indent(lnum)])
endif
endfor
return min_indent - &sw
endfunction
" Most of the code is from matchparen.vim
function! s:CheckPairedIsLastCharacter(lnum, col) "{{{
" Get the character under the cursor and check if it's in 'matchpairs'.
let c_lnum = a:lnum
let c_col = a:col+1
let c = getline(c_lnum)[c_col-1]
let plist = split(&matchpairs, '.\zs[:,]')
let i = index(plist, c)
if i < 0
return 0
endif
" Figure out the arguments for searchpairpos().
if i % 2 == 0
let s_flags = 'nW'
let c2 = plist[i + 1]
else
let s_flags = 'nbW'
let c2 = c
let c = plist[i - 1]
endif
if c == '['
let c = '\['
let c2 = '\]'
endif
" Find the match. When it was just before the cursor move it there for a
" moment.
let save_cursor = winsaveview()
call cursor(c_lnum, c_col)
" When not in a string or comment ignore matches inside them.
" We match "escape" for special items, such as lispEscapeSpecial.
let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
\ '=~? "string\\|character\\|singlequote\\|escape\\|comment"'
execute 'if' s_skip '| let s_skip = 0 | endif'
let stopline = max([0, c_lnum - g:tex_max_scan_line])
" Limit the search time to 300 msec to avoid a hang on very long lines.
" This fails when a timeout is not supported.
try
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 100)
catch /E118/
endtry
call winrestview(save_cursor)
if m_lnum > 0
let line = getline(m_lnum)
return strlen(line) == m_col
endif
return 0
endfunction "}}} endfunction "}}}
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@ -1,7 +1,7 @@
" These commands create the option window. " These commands create the option window.
" "
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2015 Jul 22 " Last Change: 2016 Mar 19
" If there already is an option window, jump to that one. " If there already is an option window, jump to that one.
if bufwinnr("option-window") > 0 if bufwinnr("option-window") > 0
@ -228,6 +228,8 @@ else
endif endif
call append("$", "runtimepath\tlist of directories used for runtime files and plugins") call append("$", "runtimepath\tlist of directories used for runtime files and plugins")
call <SID>OptionG("rtp", &rtp) call <SID>OptionG("rtp", &rtp)
call append("$", "packpath\tlist of directories used for plugin packages")
call <SID>OptionG("pp", &pp)
call append("$", "helpfile\tname of the main help file") call append("$", "helpfile\tname of the main help file")
call <SID>OptionG("hf", &hf) call <SID>OptionG("hf", &hf)

View File

@ -1,9 +1,9 @@
" vimball.vim : construct a file containing both paths and files " vimball.vim : construct a file containing both paths and files
" Author: Charles E. Campbell, Jr. " Author: Charles E. Campbell
" Date: Jan 17, 2012 " Date: Apr 11, 2016
" Version: 35 " Version: 37
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
" Copyright: (c) 2004-2011 by Charles E. Campbell, Jr. " Copyright: (c) 2004-2011 by Charles E. Campbell
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt " The VIM LICENSE applies to Vimball.vim, and Vimball.txt
" (see |copyright|) except use "Vimball" instead of "Vim". " (see |copyright|) except use "Vimball" instead of "Vim".
" No warranty, express or implied. " No warranty, express or implied.
@ -14,7 +14,7 @@
if &cp || exists("g:loaded_vimball") if &cp || exists("g:loaded_vimball")
finish finish
endif endif
let g:loaded_vimball = "v35" let g:loaded_vimball = "v37"
if v:version < 702 if v:version < 702
echohl WarningMsg echohl WarningMsg
echo "***warning*** this version of vimball needs vim 7.2" echo "***warning*** this version of vimball needs vim 7.2"
@ -142,7 +142,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
let lastline= line("$") + 1 let lastline= line("$") + 1
if lastline == 2 && getline("$") == "" if lastline == 2 && getline("$") == ""
call setline(1,'" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.') call setline(1,'" Vimball Archiver by Charles E. Campbell')
call setline(2,'UseVimball') call setline(2,'UseVimball')
call setline(3,'finish') call setline(3,'finish')
let lastline= line("$") + 1 let lastline= line("$") + 1
@ -179,7 +179,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
" remove the evidence " remove the evidence
setlocal nomod bh=wipe setlocal nomod bh=wipe
exe "tabn ".curtabnr exe "tabn ".curtabnr
exe "tabc ".vbtabnr exe "tabc! ".vbtabnr
" restore options " restore options
call vimball#RestoreSettings() call vimball#RestoreSettings()
@ -280,7 +280,7 @@ fun! vimball#Vimball(really,...)
" when AsNeeded/filename is filereadable or was present in VimballRecord " when AsNeeded/filename is filereadable or was present in VimballRecord
if fname =~ '\<plugin/' if fname =~ '\<plugin/'
let anfname= substitute(fname,'\<plugin/','AsNeeded/','') let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~ anfname) if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~# anfname)
" call Decho("using anfname<".anfname."> instead of <".fname.">") " call Decho("using anfname<".anfname."> instead of <".fname.">")
let fname= anfname let fname= anfname
endif endif
@ -379,10 +379,10 @@ fun! vimball#Vimball(really,...)
call s:RecordInFile(home) call s:RecordInFile(home)
" restore events, delete tab and buffer " restore events, delete tab and buffer
exe "tabn ".vbtabnr exe "sil! tabn ".vbtabnr
setlocal nomod bh=wipe setlocal nomod bh=wipe
exe "tabn ".curtabnr exe "sil! tabn ".curtabnr
exe "tabc ".vbtabnr exe "sil! tabc! ".vbtabnr
call vimball#RestoreSettings() call vimball#RestoreSettings()
call s:ChgDir(curdir) call s:ChgDir(curdir)
@ -555,7 +555,7 @@ fun! vimball#ShowMesg(level,msg)
set noruler noshowcmd set noruler noshowcmd
redraw! redraw!
if &fo =~ '[ta]' if &fo =~# '[ta]'
echomsg "***vimball*** ".a:msg echomsg "***vimball*** ".a:msg
else else
if a:level == s:WARNING || a:level == s:USAGE if a:level == s:WARNING || a:level == s:USAGE
@ -715,7 +715,7 @@ fun! vimball#SaveSettings()
" call Dfunc("SaveSettings()") " call Dfunc("SaveSettings()")
let s:makeep = getpos("'a") let s:makeep = getpos("'a")
let s:regakeep= @a let s:regakeep= @a
if exists("&acd") if exists("+acd")
let s:acdkeep = &acd let s:acdkeep = &acd
endif endif
let s:eikeep = &ei let s:eikeep = &ei
@ -728,7 +728,7 @@ fun! vimball#SaveSettings()
let s:vekeep = &ve let s:vekeep = &ve
let s:ffkeep = &l:ff let s:ffkeep = &l:ff
let s:swfkeep = &l:swf let s:swfkeep = &l:swf
if exists("&acd") if exists("+acd")
setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
else else
setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
@ -743,7 +743,7 @@ endfun
fun! vimball#RestoreSettings() fun! vimball#RestoreSettings()
" call Dfunc("RestoreSettings()") " call Dfunc("RestoreSettings()")
let @a = s:regakeep let @a = s:regakeep
if exists("&acd") if exists("+acd")
let &acd = s:acdkeep let &acd = s:acdkeep
endif endif
let &l:fen = s:fenkeep let &l:fen = s:fenkeep
@ -760,7 +760,7 @@ fun! vimball#RestoreSettings()
" call Decho("restore mark-a: makeep=".string(makeep)) " call Decho("restore mark-a: makeep=".string(makeep))
call setpos("'a",s:makeep) call setpos("'a",s:makeep)
endif endif
if exists("&acd") if exists("+acd")
unlet s:acdkeep unlet s:acdkeep
endif endif
unlet s:regakeep s:eikeep s:fenkeep s:hidkeep s:ickeep s:repkeep s:vekeep s:makeep s:lzkeep s:pmkeep s:ffkeep unlet s:regakeep s:eikeep s:fenkeep s:hidkeep s:ickeep s:repkeep s:vekeep s:makeep s:lzkeep s:pmkeep s:ffkeep

View File

@ -1,4 +1,4 @@
*pi_vimball.txt* For Vim version 7.4. Last change: 2012 Jan 17 *vimball.txt* For Vim version 7.4. Last change: 2012 Jan 17
---------------- ----------------
Vimball Archiver Vimball Archiver

View File

@ -0,0 +1,43 @@
" vimballPlugin : construct a file containing both paths and files
" Author: Charles E. Campbell
" Copyright: (c) 2004-2014 by Charles E. Campbell
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
" (see |copyright|) except use "Vimball" instead of "Vim".
" No warranty, express or implied.
" *** *** Use At-Your-Own-Risk! *** ***
"
" (Rom 2:1 WEB) Therefore you are without excuse, O man, whoever you are who
" judge. For in that which you judge another, you condemn yourself. For
" you who judge practice the same things.
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
" ---------------------------------------------------------------------
" Load Once: {{{1
if &cp || exists("g:loaded_vimballPlugin")
finish
endif
let g:loaded_vimballPlugin = "v37"
let s:keepcpo = &cpo
set cpo&vim
" ------------------------------------------------------------------------------
" Public Interface: {{{1
com! -range -complete=file -nargs=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
com! -nargs=? -complete=dir UseVimball call vimball#Vimball(1,<f-args>)
com! -nargs=0 VimballList call vimball#Vimball(0)
com! -nargs=* -complete=dir RmVimball call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
augroup Vimball
au!
au BufEnter *.vba,*.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|if line('$') > 1|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")|endif
au SourceCmd *.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz let s:origfile=expand("%")|if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if s:origfile!=expand("<afile>")|close|endif
au SourceCmd *.vba if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
au BufEnter *.vmb,*.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|if line('$') > 1|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")|endif
au SourceCmd *.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz let s:origfile=expand("%")|if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if s:origfile!=expand("<afile>")|close|endif
au SourceCmd *.vmb if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
augroup END
" =====================================================================
" Restoration And Modelines: {{{1
" vim: fdm=marker
let &cpo= s:keepcpo
unlet s:keepcpo

View File

@ -1,40 +0,0 @@
" vimballPlugin : construct a file containing both paths and files
" Author: Charles E. Campbell, Jr.
" Copyright: (c) 2004-2010 by Charles E. Campbell, Jr.
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
" (see |copyright|) except use "Vimball" instead of "Vim".
" No warranty, express or implied.
" *** *** Use At-Your-Own-Risk! *** ***
"
" (Rom 2:1 WEB) Therefore you are without excuse, O man, whoever you are who
" judge. For in that which you judge another, you condemn yourself. For
" you who judge practice the same things.
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
" ---------------------------------------------------------------------
" Load Once: {{{1
if &cp || exists("g:loaded_vimballPlugin")
finish
endif
let g:loaded_vimballPlugin = "v35"
let s:keepcpo = &cpo
set cpo&vim
" ------------------------------------------------------------------------------
" Public Interface: {{{1
com! -ra -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
com! -na=? -complete=dir UseVimball call vimball#Vimball(1,<f-args>)
com! -na=0 VimballList call vimball#Vimball(0)
com! -na=* -complete=dir RmVimball call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
au BufEnter *.vba,*.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
au SourceCmd *.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
au SourceCmd *.vba if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
au BufEnter *.vmb,*.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
au SourceCmd *.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
au SourceCmd *.vmb if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
" =====================================================================
" Restoration And Modelines: {{{1
" vim: fdm=marker
let &cpo= s:keepcpo
unlet s:keepcpo

View File

@ -1,7 +1,7 @@
" Vim syntax file " Vim syntax file
" Language: C " Language: C
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2016 Feb 08 " Last Change: 2016 Apr 10
" Quit when a (custom) syntax file was already loaded " Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax") if exists("b:current_syntax")
@ -248,6 +248,10 @@ if !exists("c_no_c99") " ISO C99
syn keyword cType _Bool bool _Complex complex _Imaginary imaginary syn keyword cType _Bool bool _Complex complex _Imaginary imaginary
syn keyword cType int8_t int16_t int32_t int64_t syn keyword cType int8_t int16_t int32_t int64_t
syn keyword cType uint8_t uint16_t uint32_t uint64_t syn keyword cType uint8_t uint16_t uint32_t uint64_t
if !exists("c_no_bsd")
" These are BSD specific.
syn keyword cType u_int8_t u_int16_t u_int32_t u_int64_t
endif
syn keyword cType int_least8_t int_least16_t int_least32_t int_least64_t syn keyword cType int_least8_t int_least16_t int_least32_t int_least64_t
syn keyword cType uint_least8_t uint_least16_t uint_least32_t uint_least64_t syn keyword cType uint_least8_t uint_least16_t uint_least32_t uint_least64_t
syn keyword cType int_fast8_t int_fast16_t int_fast32_t int_fast64_t syn keyword cType int_fast8_t int_fast16_t int_fast32_t int_fast64_t

View File

@ -1,15 +1,16 @@
" Vim syntax file " Vim syntax file
" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77) " Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77)
" Version: 0.96 " Version: 0.97
" Last Change: 2015 Nov. 30 " Last Change: 2016 Feb. 26
" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/> " Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/>
" Usage: For instructions, do :help fortran-syntax from Vim " Usage: For instructions, do :help fortran-syntax from Vim
" Credits: " Credits:
" Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and " Version 0.1 (April 2000) was based on the fortran 77 syntax file by Mario Eusebio and
" Preben Guldberg. Useful suggestions and contributions were made by: Andrej Panjkov, " Preben Guldberg. Since then, useful suggestions and contributions have been made,
" Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile, " in chronological order, by:
" Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
" Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman, " Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
" Andrew Griffiths, Joe Krahn, Hendrik Merx, and Matt Thompson. " Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, and Jan Hermann.
if exists("b:current_syntax") if exists("b:current_syntax")
finish finish
@ -407,7 +408,7 @@ if exists("fortran_fold")
else else
syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\s*[!#].*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\s*[!#].*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(\(.\|&\s*\n\)\+)\(\s\|&\s*\n\)*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
endif endif
endif endif

View File

@ -1,7 +1,7 @@
" Vim syntax file " Vim syntax file
" Language: mysql " Language: mysql
" Maintainer: Kenneth J. Pronovici <pronovic@ieee.org> " Maintainer: Kenneth J. Pronovici <pronovic@ieee.org>
" Last Change: $LastChangedDate: 2010-04-22 09:48:02 -0500 (Thu, 22 Apr 2010) $ " Last Change: $LastChangedDate: 2016-04-11 10:31:04 -0500 (Mon, 11 Apr 2016) $
" Filenames: *.mysql " Filenames: *.mysql
" URL: ftp://cedar-solutions.com/software/mysql.vim " URL: ftp://cedar-solutions.com/software/mysql.vim
" Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23 " Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
@ -18,7 +18,7 @@ endif
syn case ignore syn case ignore
" General keywords which don't fall into other categories " General keywords which don't fall into other categories
syn keyword mysqlKeyword action add after aggregate all alter as asc auto_increment avg avg_row_length syn keyword mysqlKeyword action add after aggregate all alter as asc auto_increment avg_row_length
syn keyword mysqlKeyword both by syn keyword mysqlKeyword both by
syn keyword mysqlKeyword cascade change character check checksum column columns comment constraint create cross syn keyword mysqlKeyword cascade change character check checksum column columns comment constraint create cross
syn keyword mysqlKeyword current_date current_time current_timestamp syn keyword mysqlKeyword current_date current_time current_timestamp
@ -64,6 +64,9 @@ syn match mysqlNumber "\<0x[abcdefABCDEF0-9]*\>"
" User variables " User variables
syn match mysqlVariable "@\a*[A-Za-z0-9]*\([._]*[A-Za-z0-9]\)*" syn match mysqlVariable "@\a*[A-Za-z0-9]*\([._]*[A-Za-z0-9]\)*"
" Escaped column names
syn match mysqlEscaped "`[^`]*`"
" Comments (c-style, mysql-style and modified sql-style) " Comments (c-style, mysql-style and modified sql-style)
syn region mysqlComment start="/\*" end="\*/" syn region mysqlComment start="/\*" end="\*/"
syn match mysqlComment "#.*" syn match mysqlComment "#.*"
@ -154,6 +157,7 @@ syn region mysqlFunction start="ascii(" end=")" contains=ALL
syn region mysqlFunction start="asin(" end=")" contains=ALL syn region mysqlFunction start="asin(" end=")" contains=ALL
syn region mysqlFunction start="atan(" end=")" contains=ALL syn region mysqlFunction start="atan(" end=")" contains=ALL
syn region mysqlFunction start="atan2(" end=")" contains=ALL syn region mysqlFunction start="atan2(" end=")" contains=ALL
syn region mysqlFunction start="avg(" end=")" contains=ALL
syn region mysqlFunction start="benchmark(" end=")" contains=ALL syn region mysqlFunction start="benchmark(" end=")" contains=ALL
syn region mysqlFunction start="bin(" end=")" contains=ALL syn region mysqlFunction start="bin(" end=")" contains=ALL
syn region mysqlFunction start="bit_and(" end=")" contains=ALL syn region mysqlFunction start="bit_and(" end=")" contains=ALL

View File

@ -1,7 +1,7 @@
" Vim syntax file " Vim syntax file
" Language: Python " Language: Python
" Maintainer: Zvezdan Petkovic <zpetkovic@acm.org> " Maintainer: Zvezdan Petkovic <zpetkovic@acm.org>
" Last Change: 2015 Sep 15 " Last Change: 2016 Feb 20
" Credits: Neil Schemenauer <nas@python.ca> " Credits: Neil Schemenauer <nas@python.ca>
" Dmitry Vasiliev " Dmitry Vasiliev
" "
@ -199,6 +199,8 @@ if !exists("python_no_builtin_highlight")
syn keyword pythonBuiltin ascii bytes exec syn keyword pythonBuiltin ascii bytes exec
" non-essential built-in functions; Python 2 only " non-essential built-in functions; Python 2 only
syn keyword pythonBuiltin apply buffer coerce intern syn keyword pythonBuiltin apply buffer coerce intern
" avoid highlighting attributes as builtins
syn match pythonAttribute /\.\h\w*/hs=s+1 contains=ALLBUT,pythonBuiltin transparent
endif endif
" From the 'Python Library Reference' class hierarchy at the bottom. " From the 'Python Library Reference' class hierarchy at the bottom.

View File

@ -5,17 +5,21 @@
" Tom Payne <tom@tompayne.org> " Tom Payne <tom@tompayne.org>
" Contributor: Johannes Ranke <jranke@uni-bremen.de> " Contributor: Johannes Ranke <jranke@uni-bremen.de>
" Homepage: https://github.com/jalvesaq/R-Vim-runtime " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Wed Oct 21, 2015 06:33AM " Last Change: Thu Mar 10, 2016 12:26PM
" Filenames: *.R *.r *.Rhistory *.Rt " Filenames: *.R *.r *.Rhistory *.Rt
" "
" NOTE: The highlighting of R functions is defined in " NOTE: The highlighting of R functions is defined in
" runtime files created by a filetype plugin, if installed. " runtime files created by a filetype plugin, if installed.
" "
" CONFIGURATION: " CONFIGURATION:
" syntax folding can be turned on by " Syntax folding can be turned on by
" "
" let r_syntax_folding = 1 " let r_syntax_folding = 1
" "
" ROxygen highlighting can be turned off by
"
" let r_hl_roxygen = 0
"
" Some lines of code were borrowed from Zhuojun Chen. " Some lines of code were borrowed from Zhuojun Chen.
if exists("b:current_syntax") if exists("b:current_syntax")
@ -24,9 +28,12 @@ endif
setlocal iskeyword=@,48-57,_,. setlocal iskeyword=@,48-57,_,.
if exists("g:r_syntax_folding") if exists("g:r_syntax_folding") && g:r_syntax_folding
setlocal foldmethod=syntax setlocal foldmethod=syntax
endif endif
if !exists("g:r_hl_roxygen")
let g:r_hl_roxygen = 1
endif
syn case match syn case match
@ -35,18 +42,20 @@ syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"
syn match rComment contains=@Spell,rCommentTodo,rOBlock "#.*" syn match rComment contains=@Spell,rCommentTodo,rOBlock "#.*"
" Roxygen " Roxygen
syn region rOBlock start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\)\@!" contains=rOTitle,rOKeyword,rOExamples,@Spell keepend if g:r_hl_roxygen
syn region rOTitle start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\s*$\)\@=" contained contains=rOCommentKey syn region rOBlock start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\)\@!" contains=rOTitle,rOKeyword,rOExamples,@Spell keepend
syn match rOCommentKey "#\{1,2}'" containedin=rOTitle contained syn region rOTitle start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\s*$\)\@=" contained contains=rOCommentKey
syn match rOCommentKey "#\{1,2}'" containedin=rOTitle contained
syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOKeyword syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOKeyword
syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|example\|include\|docType\)" syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|example\|include\|docType\)"
syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)" syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)"
syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)" syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)"
syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\|useDynLib\)" syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\|useDynLib\)"
syn match rOKeyword contained "@\(method\|noRd\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)" syn match rOKeyword contained "@\(method\|noRd\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
syn match rOKeyword contained "@\(family\|template\|templateVar\|description\|details\|inheritParams\|field\)" syn match rOKeyword contained "@\(family\|template\|templateVar\|description\|details\|inheritParams\|field\)"
endif
if &filetype == "rhelp" if &filetype == "rhelp"
@ -159,12 +168,13 @@ syn match rBraceError "[)}]" contained
syn match rCurlyError "[)\]]" contained syn match rCurlyError "[)\]]" contained
syn match rParenError "[\]}]" contained syn match rParenError "[\]}]" contained
" Source list of R functions produced by a filetype plugin (if installed) if !exists("g:R_hi_fun")
if has("nvim") let g:R_hi_fun = 1
" Nvim-R endif
if g:R_hi_fun
" Nvim-R:
runtime R/functions.vim runtime R/functions.vim
else " Vim-R-plugin:
" Vim-R-plugin
runtime r-plugin/functions.vim runtime r-plugin/functions.vim
endif endif
@ -235,11 +245,13 @@ hi def link rStatement Statement
hi def link rString String hi def link rString String
hi def link rStrError Error hi def link rStrError Error
hi def link rType Type hi def link rType Type
hi def link rOKeyword Title if g:r_hl_roxygen
hi def link rOBlock Comment hi def link rOKeyword Title
hi def link rOTitle Title hi def link rOBlock Comment
hi def link rOCommentKey Comment hi def link rOTitle Title
hi def link rOExamples SpecialComment hi def link rOCommentKey Comment
hi def link rOExamples SpecialComment
endif
let b:current_syntax="r" let b:current_syntax="r"

View File

@ -2,25 +2,21 @@
" Language: R Help File " Language: R Help File
" Maintainer: Jakson Aquino <jalvesaq@gmail.com> " Maintainer: Jakson Aquino <jalvesaq@gmail.com>
" Former Maintainer: Johannes Ranke <jranke@uni-bremen.de> " Former Maintainer: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: Wed Jul 09, 2014 10:28PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Feb 06, 2016 11:34AM
" Remarks: - Includes R syntax highlighting in the appropriate " Remarks: - Includes R syntax highlighting in the appropriate
" sections if an r.vim file is in the same directory or in the " sections if an r.vim file is in the same directory or in the
" default debian location. " default debian location.
" - There is no Latex markup in equations " - There is no Latex markup in equations
" - Thanks to Will Gray for finding and fixing a bug " - Thanks to Will Gray for finding and fixing a bug
" - No support for \if, \ifelse and \out as I don't understand " - No support for \var tag within quoted string
" them and have no examples at hand (help welcome).
" - No support for \var tag within quoted string (dito)
" Version Clears: {{{1 " Version Clears: {{{1
" For version 5.x: Clear all syntax items if exists("b:current_syntax")
" For version 6.x and 7.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish finish
endif endif
scriptencoding utf-8
setlocal iskeyword=@,48-57,_,. setlocal iskeyword=@,48-57,_,.
syn case match syn case match
@ -29,9 +25,11 @@ syn case match
syn region rhelpIdentifier matchgroup=rhelpSection start="\\name{" end="}" syn region rhelpIdentifier matchgroup=rhelpSection start="\\name{" end="}"
syn region rhelpIdentifier matchgroup=rhelpSection start="\\alias{" end="}" syn region rhelpIdentifier matchgroup=rhelpSection start="\\alias{" end="}"
syn region rhelpIdentifier matchgroup=rhelpSection start="\\pkg{" end="}" contains=rhelpLink syn region rhelpIdentifier matchgroup=rhelpSection start="\\pkg{" end="}" contains=rhelpLink
syn region rhelpIdentifier matchgroup=rhelpSection start="\\CRANpkg{" end="}" contains=rhelpLink
syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end="}" contained syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end="}" contained
syn region rhelpIdentifier matchgroup=rhelpSection start="\\Rdversion{" end="}" syn region rhelpIdentifier matchgroup=rhelpSection start="\\Rdversion{" end="}"
" Highlighting of R code using an existing r.vim syntax file if available {{{1 " Highlighting of R code using an existing r.vim syntax file if available {{{1
syn include @R syntax/r.vim syn include @R syntax/r.vim
@ -69,76 +67,115 @@ syn match rhelpDelimiter "\\cr"
syn match rhelpDelimiter "\\tab " syn match rhelpDelimiter "\\tab "
" Keywords {{{1 " Keywords {{{1
syn match rhelpKeyword "\\R" syn match rhelpKeyword "\\R\>"
syn match rhelpKeyword "\\ldots" syn match rhelpKeyword "\\ldots\>"
syn match rhelpKeyword "\\sspace\>"
syn match rhelpKeyword "--" syn match rhelpKeyword "--"
syn match rhelpKeyword "---" syn match rhelpKeyword "---"
syn match rhelpKeyword "<"
syn match rhelpKeyword ">" " Condition Keywords {{{2
syn match rhelpKeyword "\\ge" syn match rhelpKeyword "\\if\>"
syn match rhelpKeyword "\\le" syn match rhelpKeyword "\\ifelse\>"
syn match rhelpKeyword "\\alpha" syn match rhelpKeyword "\\out\>"
syn match rhelpKeyword "\\beta" " Examples of usage:
syn match rhelpKeyword "\\gamma" " \ifelse{latex}{\eqn{p = 5 + 6 - 7 \times 8}}{\eqn{p = 5 + 6 - 7 * 8}}
syn match rhelpKeyword "\\delta" " \ifelse{latex}{\out{$\alpha$}}{\ifelse{html}{\out{&alpha;}}{alpha}}
syn match rhelpKeyword "\\epsilon"
syn match rhelpKeyword "\\zeta" " Keywords and operators valid only if in math mode {{{2
syn match rhelpKeyword "\\eta" syn match rhelpMathOp "<" contained
syn match rhelpKeyword "\\theta" syn match rhelpMathOp ">" contained
syn match rhelpKeyword "\\iota" syn match rhelpMathOp "+" contained
syn match rhelpKeyword "\\kappa" syn match rhelpMathOp "-" contained
syn match rhelpKeyword "\\lambda" syn match rhelpMathOp "=" contained
syn match rhelpKeyword "\\mu"
syn match rhelpKeyword "\\nu" " Conceal function based on syntax/tex.vim {{{2
syn match rhelpKeyword "\\xi" if exists("g:tex_conceal")
syn match rhelpKeyword "\\omicron" let s:tex_conceal = g:tex_conceal
syn match rhelpKeyword "\\pi" else
syn match rhelpKeyword "\\rho" let s:tex_conceal = 'gm'
syn match rhelpKeyword "\\sigma" endif
syn match rhelpKeyword "\\tau" function s:HideSymbol(pat, cchar, hide)
syn match rhelpKeyword "\\upsilon" if a:hide
syn match rhelpKeyword "\\phi" exe "syn match rhelpMathSymb '" . a:pat . "' contained conceal cchar=" . a:cchar
syn match rhelpKeyword "\\chi" else
syn match rhelpKeyword "\\psi" exe "syn match rhelpMathSymb '" . a:pat . "' contained"
syn match rhelpKeyword "\\omega" endif
syn match rhelpKeyword "\\Alpha" endfunction
syn match rhelpKeyword "\\Beta"
syn match rhelpKeyword "\\Gamma" " Math symbols {{{2
syn match rhelpKeyword "\\Delta" if s:tex_conceal =~ 'm'
syn match rhelpKeyword "\\Epsilon" let s:hd = 1
syn match rhelpKeyword "\\Zeta" else
syn match rhelpKeyword "\\Eta" let s:hd = 0
syn match rhelpKeyword "\\Theta" endif
syn match rhelpKeyword "\\Iota" call s:HideSymbol('\\infty\>', '∞', s:hd)
syn match rhelpKeyword "\\Kappa" call s:HideSymbol('\\ge\>', '≥', s:hd)
syn match rhelpKeyword "\\Lambda" call s:HideSymbol('\\le\>', '≤', s:hd)
syn match rhelpKeyword "\\Mu" call s:HideSymbol('\\prod\>', '∏', s:hd)
syn match rhelpKeyword "\\Nu" call s:HideSymbol('\\sum\>', '∑', s:hd)
syn match rhelpKeyword "\\Xi" syn match rhelpMathSymb "\\sqrt\>" contained
syn match rhelpKeyword "\\Omicron"
syn match rhelpKeyword "\\Pi" " Greek letters {{{2
syn match rhelpKeyword "\\Rho" if s:tex_conceal =~ 'g'
syn match rhelpKeyword "\\Sigma" let s:hd = 1
syn match rhelpKeyword "\\Tau" else
syn match rhelpKeyword "\\Upsilon" let s:hd = 0
syn match rhelpKeyword "\\Phi" endif
syn match rhelpKeyword "\\Chi" call s:HideSymbol('\\alpha\>', 'α', s:hd)
syn match rhelpKeyword "\\Psi" call s:HideSymbol('\\beta\>', 'β', s:hd)
syn match rhelpKeyword "\\Omega" call s:HideSymbol('\\gamma\>', 'γ', s:hd)
call s:HideSymbol('\\delta\>', 'δ', s:hd)
call s:HideSymbol('\\epsilon\>', 'ϵ', s:hd)
call s:HideSymbol('\\zeta\>', 'ζ', s:hd)
call s:HideSymbol('\\eta\>', 'η', s:hd)
call s:HideSymbol('\\theta\>', 'θ', s:hd)
call s:HideSymbol('\\iota\>', 'ι', s:hd)
call s:HideSymbol('\\kappa\>', 'κ', s:hd)
call s:HideSymbol('\\lambda\>', 'λ', s:hd)
call s:HideSymbol('\\mu\>', 'μ', s:hd)
call s:HideSymbol('\\nu\>', 'ν', s:hd)
call s:HideSymbol('\\xi\>', 'ξ', s:hd)
call s:HideSymbol('\\pi\>', 'π', s:hd)
call s:HideSymbol('\\rho\>', 'ρ', s:hd)
call s:HideSymbol('\\sigma\>', 'σ', s:hd)
call s:HideSymbol('\\tau\>', 'τ', s:hd)
call s:HideSymbol('\\upsilon\>', 'υ', s:hd)
call s:HideSymbol('\\phi\>', 'ϕ', s:hd)
call s:HideSymbol('\\chi\>', 'χ', s:hd)
call s:HideSymbol('\\psi\>', 'ψ', s:hd)
call s:HideSymbol('\\omega\>', 'ω', s:hd)
call s:HideSymbol('\\Gamma\>', 'Γ', s:hd)
call s:HideSymbol('\\Delta\>', 'Δ', s:hd)
call s:HideSymbol('\\Theta\>', 'Θ', s:hd)
call s:HideSymbol('\\Lambda\>', 'Λ', s:hd)
call s:HideSymbol('\\Xi\>', 'Ξ', s:hd)
call s:HideSymbol('\\Pi\>', 'Π', s:hd)
call s:HideSymbol('\\Sigma\>', 'Σ', s:hd)
call s:HideSymbol('\\Upsilon\>', 'Υ', s:hd)
call s:HideSymbol('\\Phi\>', 'Φ', s:hd)
call s:HideSymbol('\\Psi\>', 'Ψ', s:hd)
call s:HideSymbol('\\Omega\>', 'Ω', s:hd)
delfunction s:HideSymbol
" Note: The letters 'omicron', 'Alpha', 'Beta', 'Epsilon', 'Zeta', 'Eta',
" 'Iota', 'Kappa', 'Mu', 'Nu', 'Omicron', 'Rho', 'Tau' and 'Chi' are listed
" at src/library/tools/R/Rd2txt.R because they are valid in HTML, although
" they do not make valid LaTeX code (e.g. &Alpha; versus \Alpha).
" Links {{{1 " Links {{{1
syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend extend syn region rhelpLink matchgroup=rhelpType start="\\link{" end="}" contained keepend extend
syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend extend syn region rhelpLink matchgroup=rhelpType start="\\link\[.\{-}\]{" end="}" contained keepend extend
syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend extend syn region rhelpLink matchgroup=rhelpType start="\\linkS4class{" end="}" contained keepend extend
syn region rhelpLink matchgroup=rhelpType start="\\url{" end="}" contained keepend extend
syn region rhelpLink matchgroup=rhelpType start="\\href{" end="}" contained keepend extend
syn region rhelpLink matchgroup=rhelpType start="\\figure{" end="}" contained keepend extend
" Verbatim like {{{1 " Verbatim like {{{1
if v:version > 703 syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpSpecialChar,rhelpComment
syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpSpecialChar,rhelpComment syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpSpecialChar,rhelpComment
syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpSpecialChar,rhelpComment
else " Equation {{{1
syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment syn region rhelpEquation matchgroup=rhelpType start="\\eqn{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpMathSymb,rhelpMathOp,rhelpRegion contained keepend extend
syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment syn region rhelpEquation matchgroup=rhelpType start="\\deqn{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpMathSymb,rhelpMathOp,rhelpRegion contained keepend extend
endif
" Type Styles {{{1 " Type Styles {{{1
syn match rhelpType "\\emph\>" syn match rhelpType "\\emph\>"
@ -148,12 +185,9 @@ syn match rhelpType "\\sQuote\>"
syn match rhelpType "\\dQuote\>" syn match rhelpType "\\dQuote\>"
syn match rhelpType "\\preformatted\>" syn match rhelpType "\\preformatted\>"
syn match rhelpType "\\kbd\>" syn match rhelpType "\\kbd\>"
syn match rhelpType "\\eqn\>"
syn match rhelpType "\\deqn\>"
syn match rhelpType "\\file\>" syn match rhelpType "\\file\>"
syn match rhelpType "\\email\>" syn match rhelpType "\\email\>"
syn match rhelpType "\\url\>" syn match rhelpType "\\enc\>"
syn match rhelpType "\\href\>"
syn match rhelpType "\\var\>" syn match rhelpType "\\var\>"
syn match rhelpType "\\env\>" syn match rhelpType "\\env\>"
syn match rhelpType "\\option\>" syn match rhelpType "\\option\>"
@ -163,6 +197,7 @@ syn match rhelpType "\\renewcommand\>"
syn match rhelpType "\\dfn\>" syn match rhelpType "\\dfn\>"
syn match rhelpType "\\cite\>" syn match rhelpType "\\cite\>"
syn match rhelpType "\\acronym\>" syn match rhelpType "\\acronym\>"
syn match rhelpType "\\doi\>"
" rhelp sections {{{1 " rhelp sections {{{1
syn match rhelpSection "\\encoding\>" syn match rhelpSection "\\encoding\>"
@ -202,9 +237,9 @@ syn match rhelpDelimiter "{\|\[\|(\|)\|\]\|}"
syn match rhelpComment /%.*$/ syn match rhelpComment /%.*$/
" Error {{{1 " Error {{{1
syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim,rhelpEquation
syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim,rhelpEquation
syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim,rhelpEquation
syn match rhelpError /[)\]}]/ syn match rhelpError /[)\]}]/
syn match rhelpBraceError /[)}]/ contained syn match rhelpBraceError /[)}]/ contained
syn match rhelpCurlyError /[)\]]/ contained syn match rhelpCurlyError /[)\]]/ contained
@ -213,36 +248,27 @@ syn match rhelpParenError /[\]}]/ contained
syntax sync match rhelpSyncRcode grouphere rhelpRcode "\\examples{" syntax sync match rhelpSyncRcode grouphere rhelpRcode "\\examples{"
" Define the default highlighting {{{1 " Define the default highlighting {{{1
" For version 5.7 and earlier: only when not done already hi def link rhelpVerbatim String
" For version 5.8 and later: only when an item doesn't have highlighting yet hi def link rhelpDelimiter Delimiter
if version >= 508 || !exists("did_rhelp_syntax_inits") hi def link rhelpIdentifier Identifier
if version < 508 hi def link rhelpString String
let did_rhelp_syntax_inits = 1 hi def link rhelpCodeSpecial Special
command -nargs=+ HiLink hi link <args> hi def link rhelpKeyword Keyword
else hi def link rhelpDots Keyword
command -nargs=+ HiLink hi def link <args> hi def link rhelpLink Underlined
endif hi def link rhelpType Type
HiLink rhelpVerbatim String hi def link rhelpSection PreCondit
HiLink rhelpDelimiter Delimiter hi def link rhelpError Error
HiLink rhelpIdentifier Identifier hi def link rhelpBraceError Error
HiLink rhelpString String hi def link rhelpCurlyError Error
HiLink rhelpCodeSpecial Special hi def link rhelpParenError Error
HiLink rhelpKeyword Keyword hi def link rhelpPreProc PreProc
HiLink rhelpDots Keyword hi def link rhelpDelimiter Delimiter
HiLink rhelpLink Underlined hi def link rhelpComment Comment
HiLink rhelpType Type hi def link rhelpRComment Comment
HiLink rhelpSection PreCondit hi def link rhelpSpecialChar SpecialChar
HiLink rhelpError Error hi def link rhelpMathSymb Special
HiLink rhelpBraceError Error hi def link rhelpMathOp Operator
HiLink rhelpCurlyError Error
HiLink rhelpParenError Error
HiLink rhelpPreProc PreProc
HiLink rhelpDelimiter Delimiter
HiLink rhelpComment Comment
HiLink rhelpRComment Comment
HiLink rhelpSpecialChar SpecialChar
delcommand HiLink
endif
let b:current_syntax = "rhelp" let b:current_syntax = "rhelp"

View File

@ -1,15 +1,13 @@
" markdown Text with R statements " markdown Text with R statements
" Language: markdown with R code chunks " Language: markdown with R code chunks
" Last Change: Wed Jul 09, 2014 10:29PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Feb 06, 2016 06:45AM
" "
" CONFIGURATION: " CONFIGURATION:
" To highlight chunk headers as R code, put in your vimrc: " To highlight chunk headers as R code, put in your vimrc:
" let rmd_syn_hl_chunk = 1 " let rmd_syn_hl_chunk = 1
" for portability if exists("b:current_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish finish
endif endif
@ -58,6 +56,8 @@ if rmdIsPandoc == 0
if exists("b:current_syntax") if exists("b:current_syntax")
unlet b:current_syntax unlet b:current_syntax
endif endif
" Extend cluster
syn cluster texMathZoneGroup add=rmdrInline
" Inline " Inline
syntax match rmdLaTeXInlDelim "\$" syntax match rmdLaTeXInlDelim "\$"
syntax match rmdLaTeXInlDelim "\\\$" syntax match rmdLaTeXInlDelim "\\\$"

View File

@ -1,20 +1,14 @@
" Vim syntax file " Vim syntax file
" Language: R noweb Files " Language: R noweb Files
" Maintainer: Johannes Ranke <jranke@uni-bremen.de> " Maintainer: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: 2009 May 05 " Last Change: Sat Feb 06, 2016 06:47AM
" Version: 0.9 " Version: 0.9.1
" SVN: $Id: rnoweb.vim 84 2009-05-03 19:52:47Z ranke $
" Remarks: - This file is inspired by the proposal of " Remarks: - This file is inspired by the proposal of
" Fernando Henrique Ferraz Pereira da Rosa <feferraz@ime.usp.br> " Fernando Henrique Ferraz Pereira da Rosa <feferraz@ime.usp.br>
" http://www.ime.usp.br/~feferraz/en/sweavevim.html " http://www.ime.usp.br/~feferraz/en/sweavevim.html
" "
" Version Clears: {{{1 if exists("b:current_syntax")
" For version 5.x: Clear all syntax items
" For version 6.x and 7.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish finish
endif endif
@ -26,6 +20,7 @@ unlet b:current_syntax
syn cluster texMatchGroup add=@rnoweb syn cluster texMatchGroup add=@rnoweb
syn cluster texMathMatchGroup add=rnowebSexpr syn cluster texMathMatchGroup add=rnowebSexpr
syn cluster texMathZoneGroup add=rnowebSexpr
syn cluster texEnvGroup add=@rnoweb syn cluster texEnvGroup add=@rnoweb
syn cluster texFoldGroup add=@rnoweb syn cluster texFoldGroup add=@rnoweb
syn cluster texDocGroup add=@rnoweb syn cluster texDocGroup add=@rnoweb
@ -40,7 +35,7 @@ syn cluster texParaGroup add=@rnoweb
syn include @rnowebR syntax/r.vim syn include @rnowebR syntax/r.vim
syn region rnowebChunk matchgroup=rnowebDelimiter start="^<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend syn region rnowebChunk matchgroup=rnowebDelimiter start="^<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend
syn match rnowebChunkReference "^<<.*>>$" contained syn match rnowebChunkReference "^<<.*>>$" contained
syn region rnowebSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter end="}" contains=@rnowebR syn region rnowebSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter end="}" contains=@rnowebR contained
" Sweave options command {{{1 " Sweave options command {{{1
syn region rnowebSweaveopts matchgroup=Delimiter start="\\SweaveOpts{" matchgroup=Delimiter end="}" syn region rnowebSweaveopts matchgroup=Delimiter start="\\SweaveOpts{" matchgroup=Delimiter end="}"

View File

@ -1,16 +1,14 @@
" reStructured Text with R statements " reStructured Text with R statements
" Language: reST with R code chunks " Language: reST with R code chunks
" Maintainer: Alex Zvoleff, azvoleff@mail.sdsu.edu " Maintainer: Alex Zvoleff, azvoleff@mail.sdsu.edu
" Last Change: Wed Jul 09, 2014 10:29PM " Homepage: https://github.com/jalvesaq/R-Vim-runtime
" Last Change: Sat Feb 06, 2016 06:45AM
" "
" CONFIGURATION: " CONFIGURATION:
" To highlight chunk headers as R code, put in your vimrc: " To highlight chunk headers as R code, put in your vimrc:
" let rrst_syn_hl_chunk = 1 " let rrst_syn_hl_chunk = 1
" for portability if exists("b:current_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish finish
endif endif

View File

@ -2,8 +2,8 @@
" Language: shell (sh) Korn shell (ksh) bash (sh) " Language: shell (sh) Korn shell (ksh) bash (sh)
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> " Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
" Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int> " Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
" Last Change: Feb 16, 2016 " Last Change: Apr 11, 2016
" Version: 144 " Version: 147
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
" For options and settings, please use: :help ft-sh-syntax " For options and settings, please use: :help ft-sh-syntax
" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) " This file includes many ideas from Eric Brunet (eric.brunet@ens.fr)
@ -185,7 +185,7 @@ endif
" Options: {{{1 " Options: {{{1
" ==================== " ====================
syn match shOption "\s\zs[-+][-_a-zA-Z0-9#]\+" syn match shOption "\s\zs[-+][-_a-zA-Z#@]\+"
syn match shOption "\s\zs--[^ \t$`'"|);]\+" syn match shOption "\s\zs--[^ \t$`'"|);]\+"
" File Redirection Highlighted As Operators: {{{1 " File Redirection Highlighted As Operators: {{{1
@ -317,7 +317,8 @@ syn match shColon '^\s*\zs:'
" String And Character Constants: {{{1 " String And Character Constants: {{{1
"================================ "================================
syn match shNumber "-\=\<\d\+\>#\=" syn match shNumber "\<\d\+\>#\="
syn match shNumber "-\=\.\=\d\+\>#\="
syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained
if exists("b:is_bash") if exists("b:is_bash")
syn match shSpecial "\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained syn match shSpecial "\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained
@ -538,13 +539,20 @@ endif
" Synchronization: {{{1 " Synchronization: {{{1
" ================ " ================
if !exists("sh_minlines") if !exists("g:sh_minlines")
let sh_minlines = 200 let s:sh_minlines = 200
else
let s:sh_minlines= g:sh_minlines
endif endif
if !exists("sh_maxlines") if !exists("g:sh_maxlines")
let sh_maxlines = 2 * sh_minlines let s:sh_maxlines = 2*s:sh_minlines
if s:sh_maxlines < 25
let s:sh_maxlines= 25
endif
else
let s:sh_maxlines= g:sh_maxlines
endif endif
exec "syn sync minlines=" . sh_minlines . " maxlines=" . sh_maxlines exec "syn sync minlines=" . s:sh_minlines . " maxlines=" . s:sh_maxlines
syn sync match shCaseEsacSync grouphere shCaseEsac "\<case\>" syn sync match shCaseEsacSync grouphere shCaseEsac "\<case\>"
syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>" syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>"
syn sync match shDoSync grouphere shDo "\<do\>" syn sync match shDoSync grouphere shDo "\<do\>"

View File

@ -4,8 +4,8 @@
" Maintainer: Dominik Fischer <d dot f dot fischer at web dot de> " Maintainer: Dominik Fischer <d dot f dot fischer at web dot de>
" Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de> " Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de>
" Contributor: Karsten Hopp <karsten@redhat.com> " Contributor: Karsten Hopp <karsten@redhat.com>
" Last Change: 2016 Jan 15 " Last Change: 2016 Mar 1
" SSH Version: 7.1 " SSH Version: 7.2
" "
" Setup " Setup
@ -41,25 +41,56 @@ syn keyword sshconfigYesNo any auto
syn keyword sshconfigYesNo force autoask none syn keyword sshconfigYesNo force autoask none
syn keyword sshconfigCipher 3des blowfish syn keyword sshconfigCipher 3des blowfish
syn keyword sshconfigCiphers aes128-cbc 3des-cbc blowfish blowfish-cbc cast128-cbc
syn keyword sshconfigCiphers aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
syn keyword sshconfigCiphers arcfour arcfour128 arcfour256 cast128-cbc
syn keyword sshconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96 syn keyword sshconfigCiphers 3des-cbc
syn keyword sshconfigMAC hmac-md5-96 syn keyword sshconfigCiphers blowfish-cbc
syn keyword sshconfigMAC hmac-sha2-256 hmac-sha2-256-96 hmac-sha2-512 syn keyword sshconfigCiphers cast128-cbc
syn keyword sshconfigMAC hmac-sha2-512-96 syn keyword sshconfigCiphers arcfour
syn keyword sshconfigCiphers arcfour128
syn keyword sshconfigCiphers arcfour256
syn keyword sshconfigCiphers aes128-cbc
syn keyword sshconfigCiphers aes192-cbc
syn keyword sshconfigCiphers aes256-cbc
syn match sshconfigCiphers "\<rijndael-cbc@lysator\.liu.se\>"
syn keyword sshconfigCiphers aes128-ctr
syn keyword sshconfigCiphers aes192-ctr
syn keyword sshconfigCiphers aes256-ctr
syn match sshconfigCiphers "\<aes128-gcm@openssh\.com\>"
syn match sshconfigCiphers "\<aes256-gcm@openssh\.com\>"
syn match sshconfigCiphers "\<chacha20-poly1305@openssh\.com\>"
syn keyword sshconfigMAC hmac-sha1
syn keyword sshconfigMAC mac-sha1-96
syn keyword sshconfigMAC mac-sha2-256
syn keyword sshconfigMAC mac-sha2-512
syn keyword sshconfigMAC mac-md5
syn keyword sshconfigMAC mac-md5-96
syn keyword sshconfigMAC mac-ripemd160
syn match sshconfigMAC "\<hmac-ripemd160@openssh\.com\>"
syn match sshconfigMAC "\<umac-64@openssh\.com\>" syn match sshconfigMAC "\<umac-64@openssh\.com\>"
syn match sshconfigMAC "\<umac-128@openssh\.com\>"
syn match sshconfigMAC "\<hmac-sha1-etm@openssh\.com\>"
syn match sshconfigMAC "\<hmac-sha1-96-etm@openssh\.com\>"
syn match sshconfigMAC "\<hmac-sha2-256-etm@openssh\.com\>"
syn match sshconfigMAC "\<hmac-sha2-512-etm@openssh\.com\>"
syn match sshconfigMAC "\<hmac-md5-etm@openssh\.com\>"
syn match sshconfigMAC "\<hmac-md5-96-etm@openssh\.com\>"
syn match sshconfigMAC "\<hmac-ripemd160-etm@openssh\.com\>"
syn match sshconfigMAC "\<umac-64-etm@openssh\.com\>"
syn match sshconfigMAC "\<umac-128-etm@openssh\.com\>"
syn keyword sshconfigHostKeyAlg ssh-rsa ssh-dss syn keyword sshconfigHostKeyAlgo ssh-ed25519
syn match sshconfigHostKeyAlg "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>" syn match sshconfigHostKeyAlgo "\<ssh-ed25519-cert-v01@openssh\.com\>"
syn match sshconfigHostKeyAlg "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>" syn keyword sshconfigHostKeyAlgo ssh-rsa
syn match sshconfigHostKeyAlg "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>" syn keyword sshconfigHostKeyAlgo ssh-dss
syn match sshconfigHostKeyAlg "\<ssh-rsa-cert-v01@openssh\.com\>" syn keyword sshconfigHostKeyAlgo ecdsa-sha2-nistp256
syn match sshconfigHostKeyAlg "\<ssh-dss-cert-v01@openssh\.com\>" syn keyword sshconfigHostKeyAlgo ecdsa-sha2-nistp384
syn match sshconfigHostKeyAlg "\<ssh-rsa-cert-v00@openssh\.com\>" syn keyword sshconfigHostKeyAlgo ecdsa-sha2-nistp521
syn match sshconfigHostKeyAlg "\<ssh-dss-cert-v00@openssh\.com\>" syn match sshconfigHostKeyAlgo "\<ssh-rsa-cert-v01@openssh\.com\>"
syn keyword sshconfigHostKeyAlg ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 syn match sshconfigHostKeyAlgo "\<ssh-dss-cert-v01@openssh\.com\>"
syn match sshconfigHostKeyAlgo "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>"
syn match sshconfigHostKeyAlgo "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>"
syn match sshconfigHostKeyAlgo "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>"
syn keyword sshconfigPreferredAuth hostbased publickey password gssapi-with-mic syn keyword sshconfigPreferredAuth hostbased publickey password gssapi-with-mic
syn keyword sshconfigPreferredAuth keyboard-interactive syn keyword sshconfigPreferredAuth keyboard-interactive
@ -78,11 +109,14 @@ syn match sshconfigIPQoS "cs[0-7]"
syn keyword sshconfigIPQoS ef lowdelay throughput reliability syn keyword sshconfigIPQoS ef lowdelay throughput reliability
syn keyword sshconfigKbdInteractive bsdauth pam skey syn keyword sshconfigKbdInteractive bsdauth pam skey
syn keyword sshconfigKexAlgo ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
syn keyword sshconfigKexAlgo diffie-hellman-group-exchange-sha256
syn keyword sshconfigKexAlgo diffie-hellman-group-exchange-sha1
syn keyword sshconfigKexAlgo diffie-hellman-group14-sha1
syn keyword sshconfigKexAlgo diffie-hellman-group1-sha1 syn keyword sshconfigKexAlgo diffie-hellman-group1-sha1
syn keyword sshconfigKexAlgo diffie-hellman-group14-sha1
syn keyword sshconfigKexAlgo diffie-hellman-group-exchange-sha1
syn keyword sshconfigKexAlgo diffie-hellman-group-exchange-sha256
syn keyword sshconfigKexAlgo ecdh-sha2-nistp256
syn keyword sshconfigKexAlgo ecdh-sha2-nistp384
syn keyword sshconfigKexAlgo ecdh-sha2-nistp521
syn match sshconfigKexAlgo "\<curve25519-sha256@libssh\.org\>"
syn keyword sshconfigTunnel point-to-point ethernet syn keyword sshconfigTunnel point-to-point ethernet
@ -111,6 +145,7 @@ syn keyword sshconfigKeyword CanonicalDomains
syn keyword sshconfigKeyword CanonicalizeFallbackLocal syn keyword sshconfigKeyword CanonicalizeFallbackLocal
syn keyword sshconfigKeyword CanonicalizeHostname syn keyword sshconfigKeyword CanonicalizeHostname
syn keyword sshconfigKeyword CanonicalizeMaxDots syn keyword sshconfigKeyword CanonicalizeMaxDots
syn keyword sshconfigKeyword CertificateFile
syn keyword sshconfigKeyword ChallengeResponseAuthentication syn keyword sshconfigKeyword ChallengeResponseAuthentication
syn keyword sshconfigKeyword CheckHostIP syn keyword sshconfigKeyword CheckHostIP
syn keyword sshconfigKeyword Cipher syn keyword sshconfigKeyword Cipher
@ -212,7 +247,7 @@ if version >= 508 || !exists("did_sshconfig_syntax_inits")
HiLink sshconfigCipher sshconfigEnum HiLink sshconfigCipher sshconfigEnum
HiLink sshconfigCiphers sshconfigEnum HiLink sshconfigCiphers sshconfigEnum
HiLink sshconfigMAC sshconfigEnum HiLink sshconfigMAC sshconfigEnum
HiLink sshconfigHostKeyAlg sshconfigEnum HiLink sshconfigHostKeyAlgo sshconfigEnum
HiLink sshconfigLogLevel sshconfigEnum HiLink sshconfigLogLevel sshconfigEnum
HiLink sshconfigSysLogFacility sshconfigEnum HiLink sshconfigSysLogFacility sshconfigEnum
HiLink sshconfigAddressFamily sshconfigEnum HiLink sshconfigAddressFamily sshconfigEnum

View File

@ -6,8 +6,8 @@
" Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de> " Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de>
" Contributor: Karsten Hopp <karsten@redhat.com> " Contributor: Karsten Hopp <karsten@redhat.com>
" Originally: 2009-07-09 " Originally: 2009-07-09
" Last Change: 2016 Jan 12 " Last Change: 2016 Mar 1
" SSH Version: 7.1 " SSH Version: 7.2
" "
" Setup " Setup
@ -47,15 +47,55 @@ syn keyword sshdconfigTcpForwarding local remote
syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only
syn keyword sshdconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc syn keyword sshdconfigCiphers 3des-cbc
syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr syn keyword sshdconfigCiphers blowfish-cbc
syn keyword sshdconfigCipher arcfour arcfour128 arcfour256 cast128-cbc syn keyword sshdconfigCiphers cast128-cbc
syn keyword sshdconfigCiphers arcfour
syn keyword sshdconfigCiphers arcfour128
syn keyword sshdconfigCiphers arcfour256
syn keyword sshdconfigCiphers aes128-cbc
syn keyword sshdconfigCiphers aes192-cbc
syn keyword sshdconfigCiphers aes256-cbc
syn match sshdconfigCiphers "\<rijndael-cbc@lysator\.liu.se\>"
syn keyword sshdconfigCiphers aes128-ctr
syn keyword sshdconfigCiphers aes192-ctr
syn keyword sshdconfigCiphers aes256-ctr
syn match sshdconfigCiphers "\<aes128-gcm@openssh\.com\>"
syn match sshdconfigCiphers "\<aes256-gcm@openssh\.com\>"
syn match sshdconfigCiphers "\<chacha20-poly1305@openssh\.com\>"
syn keyword sshdconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96 syn keyword sshdconfigMAC hmac-sha1
syn keyword sshdconfigMAC hmac-md5-96 syn keyword sshdconfigMAC mac-sha1-96
syn keyword sshdconfigMAC hmac-sha2-256 hmac-sha256-96 hmac-sha2-512 syn keyword sshdconfigMAC mac-sha2-256
syn keyword sshdconfigMAC hmac-sha2-512-96 syn keyword sshdconfigMAC mac-sha2-512
syn keyword sshdconfigMAC mac-md5
syn keyword sshdconfigMAC mac-md5-96
syn keyword sshdconfigMAC mac-ripemd160
syn match sshdconfigMAC "\<hmac-ripemd160@openssh\.com\>"
syn match sshdconfigMAC "\<umac-64@openssh\.com\>" syn match sshdconfigMAC "\<umac-64@openssh\.com\>"
syn match sshdconfigMAC "\<umac-128@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-sha1-etm@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-sha1-96-etm@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-sha2-256-etm@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-sha2-512-etm@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-md5-etm@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-md5-96-etm@openssh\.com\>"
syn match sshdconfigMAC "\<hmac-ripemd160-etm@openssh\.com\>"
syn match sshdconfigMAC "\<umac-64-etm@openssh\.com\>"
syn match sshdconfigMAC "\<umac-128-etm@openssh\.com\>"
syn keyword sshdconfigHostKeyAlgo ssh-ed25519
syn match sshdconfigHostKeyAlgo "\<ssh-ed25519-cert-v01@openssh\.com\>"
syn keyword sshdconfigHostKeyAlgo ssh-rsa
syn keyword sshdconfigHostKeyAlgo ssh-dss
syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp256
syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp384
syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp521
syn match sshdconfigHostKeyAlgo "\<ssh-rsa-cert-v01@openssh\.com\>"
syn match sshdconfigHostKeyAlgo "\<ssh-dss-cert-v01@openssh\.com\>"
syn match sshdconfigHostKeyAlgo "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>"
syn match sshdconfigHostKeyAlgo "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>"
syn match sshdconfigHostKeyAlgo "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>"
syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only
@ -73,11 +113,14 @@ syn match sshdconfigIPQoS "af4[123]"
syn match sshdconfigIPQoS "cs[0-7]" syn match sshdconfigIPQoS "cs[0-7]"
syn keyword sshdconfigIPQoS ef lowdelay throughput reliability syn keyword sshdconfigIPQoS ef lowdelay throughput reliability
syn keyword sshdconfigKexAlgo ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha256
syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha1
syn keyword sshdconfigKexAlgo diffie-hellman-group14-sha1
syn keyword sshdconfigKexAlgo diffie-hellman-group1-sha1 syn keyword sshdconfigKexAlgo diffie-hellman-group1-sha1
syn keyword sshdconfigKexAlgo diffie-hellman-group14-sha1
syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha1
syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha256
syn keyword sshdconfigKexAlgo ecdh-sha2-nistp256
syn keyword sshdconfigKexAlgo ecdh-sha2-nistp384
syn keyword sshdconfigKexAlgo ecdh-sha2-nistp521
syn match sshdconfigKexAlgo "\<curve25519-sha256@libssh\.org\>"
syn keyword sshdconfigTunnel point-to-point ethernet syn keyword sshdconfigTunnel point-to-point ethernet
@ -215,8 +258,9 @@ if version >= 508 || !exists("did_sshdconfig_syntax_inits")
HiLink sshdconfigPrivilegeSeparation sshdconfigEnum HiLink sshdconfigPrivilegeSeparation sshdconfigEnum
HiLink sshdconfigTcpForwarding sshdconfigEnum HiLink sshdconfigTcpForwarding sshdconfigEnum
HiLink sshdconfigRootLogin sshdconfigEnum HiLink sshdconfigRootLogin sshdconfigEnum
HiLink sshdconfigCipher sshdconfigEnum HiLink sshdconfigCiphers sshdconfigEnum
HiLink sshdconfigMAC sshdconfigEnum HiLink sshdconfigMAC sshdconfigEnum
HiLink sshdconfigHostKeyAlgo sshdconfigEnum
HiLink sshdconfigRootLogin sshdconfigEnum HiLink sshdconfigRootLogin sshdconfigEnum
HiLink sshdconfigLogLevel sshdconfigEnum HiLink sshdconfigLogLevel sshdconfigEnum
HiLink sshdconfigSysLogFacility sshdconfigEnum HiLink sshdconfigSysLogFacility sshdconfigEnum

View File

@ -1,8 +1,8 @@
" Vim syntax file " Vim syntax file
" Language: TeX " Language: TeX
" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM> " Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
" Last Change: Jan 20, 2016 " Last Change: Apr 11, 2016
" Version: 91 " Version: 94
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
" "
" Notes: {{{1 " Notes: {{{1
@ -83,10 +83,14 @@ else
let s:tex_conceal= g:tex_conceal let s:tex_conceal= g:tex_conceal
endif endif
if !exists("g:tex_superscripts") if !exists("g:tex_superscripts")
let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]" let s:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
else
let s:tex_superscripts= g:tex_superscripts
endif endif
if !exists("g:tex_subscripts") if !exists("g:tex_subscripts")
let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]" let s:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
else
let s:tex_subscripts= g:tex_subscripts
endif endif
" Determine whether or not to use "*.sty" mode {{{1 " Determine whether or not to use "*.sty" mode {{{1
@ -200,7 +204,7 @@ if !exists("g:tex_no_math")
endif endif
" Try to flag {} and () mismatches: {{{1 " Try to flag {} and () mismatches: {{{1
if s:tex_fast =~ 'm' if s:tex_fast =~# 'm'
if !s:tex_no_error if !s:tex_no_error
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
@ -217,7 +221,7 @@ endif
if !s:tex_no_error if !s:tex_no_error
syn match texError "[}\])]" syn match texError "[}\])]"
endif endif
if s:tex_fast =~ 'M' if s:tex_fast =~# 'M'
if !exists("g:tex_no_math") if !exists("g:tex_no_math")
if !s:tex_no_error if !s:tex_no_error
syn match texMathError "}" contained syn match texMathError "}" contained
@ -260,14 +264,14 @@ syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
" \begin{}/\end{} section markers: {{{1 " \begin{}/\end{} section markers: {{{1
syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
if s:tex_fast =~ 'm' if s:tex_fast =~# 'm'
syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
endif endif
" \documentclass, \documentstyle, \usepackage: {{{1 " \documentclass, \documentstyle, \usepackage: {{{1
syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
if s:tex_fast =~ 'm' if s:tex_fast =~# 'm'
syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
endif endif
@ -281,7 +285,7 @@ syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatemen
syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
syn match texInputCurlies "[{}]" contained syn match texInputCurlies "[{}]" contained
if s:tex_fast =~ 'm' if s:tex_fast =~# 'm'
syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
endif endif
@ -296,7 +300,7 @@ syn match texTypeStyle "\\sc\>"
syn match texTypeStyle "\\tt\>" syn match texTypeStyle "\\tt\>"
" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1 " Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
if s:tex_conceal !~ 'b' if s:tex_conceal !~# 'b'
syn match texTypeStyle "\\textbf\>" syn match texTypeStyle "\\textbf\>"
syn match texTypeStyle "\\textit\>" syn match texTypeStyle "\\textit\>"
endif endif
@ -349,7 +353,7 @@ syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=
syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
" Sections, subsections, etc: {{{1 " Sections, subsections, etc: {{{1
if s:tex_fast =~ 'p' if s:tex_fast =~# 'p'
if !s:tex_nospell if !s:tex_nospell
TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
@ -376,8 +380,8 @@ if s:tex_fast =~ 'p'
endif endif
" particular support for bold and italic {{{1 " particular support for bold and italic {{{1
if s:tex_fast =~ 'b' if s:tex_fast =~# 'b'
if s:tex_conceal =~ 'b' if s:tex_conceal =~# 'b'
if !exists("g:tex_nospell") || !g:tex_nospell if !exists("g:tex_nospell") || !g:tex_nospell
syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
@ -414,7 +418,7 @@ if !exists("g:tex_no_math")
let foldcmd= "" let foldcmd= ""
endif endif
exe "syn cluster texMathZones add=".grpname exe "syn cluster texMathZones add=".grpname
if s:tex_fast =~ 'M' if s:tex_fast =~# 'M'
exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
@ -424,7 +428,7 @@ if !exists("g:tex_no_math")
let grpname = "texMathZone".a:sfx.'S' let grpname = "texMathZone".a:sfx.'S'
let syncname = "texSyncMathZone".a:sfx.'S' let syncname = "texSyncMathZone".a:sfx.'S'
exe "syn cluster texMathZones add=".grpname exe "syn cluster texMathZones add=".grpname
if s:tex_fast =~ 'M' if s:tex_fast =~# 'M'
exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
@ -448,8 +452,8 @@ if !exists("g:tex_no_math")
call TexNewMathZone("L","xxalignat",0) call TexNewMathZone("L","xxalignat",0)
" Inline Math Zones: {{{2 " Inline Math Zones: {{{2
if s:tex_fast =~ 'M' if s:tex_fast =~# 'M'
if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd' if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
@ -466,7 +470,7 @@ if !exists("g:tex_no_math")
syn match texMathOper "[_^=]" contained syn match texMathOper "[_^=]" contained
" Text Inside Math Zones: {{{2 " Text Inside Math Zones: {{{2
if s:tex_fast =~ 'M' if s:tex_fast =~# 'M'
if !exists("g:tex_nospell") || !g:tex_nospell if !exists("g:tex_nospell") || !g:tex_nospell
syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
else else
@ -476,7 +480,7 @@ if !exists("g:tex_no_math")
" \left..something.. and \right..something.. support: {{{2 " \left..something.. and \right..something.. support: {{{2
syn match texMathDelimBad contained "\S" syn match texMathDelimBad contained "\S"
if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm' if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={ syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=} syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
let s:texMathDelimList=[ let s:texMathDelimList=[
@ -541,7 +545,7 @@ if !exists("g:tex_no_math")
syn match texOnlyMath "[_^]" syn match texOnlyMath "[_^]"
endif endif
syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S" syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
if s:tex_conceal !~ 'S' if s:tex_conceal !~# 'S'
syn match texSpecialChar '\\glq\>' contained conceal cchar= syn match texSpecialChar '\\glq\>' contained conceal cchar=
syn match texSpecialChar '\\grq\>' contained conceal cchar= syn match texSpecialChar '\\grq\>' contained conceal cchar=
syn match texSpecialChar '\\glqq\>' contained conceal cchar= syn match texSpecialChar '\\glqq\>' contained conceal cchar=
@ -568,13 +572,13 @@ else
" allows syntax-folding of 2 or more contiguous comment lines " allows syntax-folding of 2 or more contiguous comment lines
" single-line comments are not folded " single-line comments are not folded
syn match texComment "%.*$" contains=@texCommentGroup syn match texComment "%.*$" contains=@texCommentGroup
if s:tex_fast =~ 'c' if s:tex_fast =~# 'c'
TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
endif endif
else else
syn match texComment "%.*$" contains=@texCommentGroup syn match texComment "%.*$" contains=@texCommentGroup
if s:tex_fast =~ 'c' if s:tex_fast =~# 'c'
syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
endif endif
endif endif
@ -583,7 +587,7 @@ endif
" Separate lines used for verb` and verb# so that the end conditions {{{1 " Separate lines used for verb` and verb# so that the end conditions {{{1
" will appropriately terminate. " will appropriately terminate.
" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there. " If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
if s:tex_fast =~ 'v' if s:tex_fast =~# 'v'
if exists("g:tex_verbspell") && g:tex_verbspell if exists("g:tex_verbspell") && g:tex_verbspell
syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
" listings package: " listings package:
@ -614,7 +618,7 @@ if s:tex_fast =~ 'v'
endif endif
" Tex Reference Zones: {{{1 " Tex Reference Zones: {{{1
if s:tex_fast =~ 'r' if s:tex_fast =~# 'r'
syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
@ -628,13 +632,13 @@ syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
" Handle newcommand, newenvironment : {{{1 " Handle newcommand, newenvironment : {{{1
syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
if s:tex_fast =~ 'V' if s:tex_fast =~# 'V'
syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
endif endif
syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
if s:tex_fast =~ 'V' if s:tex_fast =~# 'V'
syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
@ -660,11 +664,11 @@ syn match texString "\(``\|''\|,,\)"
" makeatletter -- makeatother sections " makeatletter -- makeatother sections
if !s:tex_no_error if !s:tex_no_error
if s:tex_fast =~ 'S' if s:tex_fast =~# 'S'
syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
endif endif
syn match texStyleStatement "\\[a-zA-Z@]\+" contained syn match texStyleStatement "\\[a-zA-Z@]\+" contained
if s:tex_fast =~ 'S' if s:tex_fast =~# 'S'
syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
endif endif
@ -675,7 +679,7 @@ if has("conceal") && &enc == 'utf-8'
" Math Symbols {{{2 " Math Symbols {{{2
" (many of these symbols were contributed by Björn Winckler) " (many of these symbols were contributed by Björn Winckler)
if s:tex_conceal =~ 'm' if s:tex_conceal =~# 'm'
let s:texMathList=[ let s:texMathList=[
\ ['|' , '‖'], \ ['|' , '‖'],
\ ['aleph' , 'ℵ'], \ ['aleph' , 'ℵ'],
@ -956,7 +960,7 @@ if has("conceal") && &enc == 'utf-8'
" \ ['uminus' , 'X'] " \ ['uminus' , 'X']
" \ ['uplus' , 'X'] " \ ['uplus' , 'X']
for texmath in s:texMathList for texmath in s:texMathList
if texmath[0] =~ '\w$' if texmath[0] =~# '\w$'
exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1] exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
else else
exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1] exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
@ -995,7 +999,7 @@ if has("conceal") && &enc == 'utf-8'
endif endif
" Greek {{{2 " Greek {{{2
if s:tex_conceal =~ 'g' if s:tex_conceal =~# 'g'
fun! s:Greek(group,pat,cchar) fun! s:Greek(group,pat,cchar)
exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
endfun endfun
@ -1042,14 +1046,14 @@ if has("conceal") && &enc == 'utf-8'
endif endif
" Superscripts/Subscripts {{{2 " Superscripts/Subscripts {{{2
if s:tex_conceal =~ 's' if s:tex_conceal =~# 's'
if s:tex_fast =~ 's' if s:tex_fast =~# 's'
syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
endif endif
" s:SuperSub: " s:SuperSub:
fun! s:SuperSub(group,leader,pat,cchar) fun! s:SuperSub(group,leader,pat,cchar)
if a:pat =~ '^\\' || (a:leader == '\^' && a:pat =~ g:tex_superscripts) || (a:leader == '_' && a:pat =~ g:tex_subscripts) if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">") " call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s' exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
@ -1154,7 +1158,7 @@ if has("conceal") && &enc == 'utf-8'
endif endif
" Accented characters: {{{2 " Accented characters: {{{2
if s:tex_conceal =~ 'a' if s:tex_conceal =~# 'a'
if b:tex_stylish if b:tex_stylish
syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
@ -1169,7 +1173,7 @@ if has("conceal") && &enc == 'utf-8'
let i= i + 1 let i= i + 1
continue continue
endif endif
if accent =~ '\a' if accent =~# '\a'
exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i} exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
else else
exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i} exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}

View File

@ -1,14 +1,10 @@
" Vim syntax file " Vim syntax file
" Language: VHDL " Language: VHDL [VHSIC (Very High Speed Integrated Circuit) Hardware Description Language]
" Maintainer: Daniel Kho <daniel.kho@tauhop.com> " Maintainer: Daniel Kho <daniel.kho@tauhop.com>
" Previous Maintainer: Czo <Olivier.Sirol@lip6.fr> " Previous Maintainer: Czo <Olivier.Sirol@lip6.fr>
" Credits: Stephan Hegel <stephan.hegel@snc.siemens.com.cn> " Credits: Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
" Last Changed: 2015 Dec 4 by Daniel Kho " Last Changed: 2016 Mar 05 by Daniel Kho
" VHSIC (Very High Speed Integrated Circuit) Hardware Description Language
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600 if version < 600
syntax clear syntax clear
elseif exists("b:current_syntax") elseif exists("b:current_syntax")
@ -56,17 +52,40 @@ syn keyword vhdlStatement note warning error failure
syn match vhdlStatement "\<\(if\|else\)\>" syn match vhdlStatement "\<\(if\|else\)\>"
syn match vhdlError "\<else\s\+if\>" syn match vhdlError "\<else\s\+if\>"
" Predefined VHDL types " Types and type qualifiers
syn keyword vhdlType bit bit_vector " Predefined standard VHDL types
syn keyword vhdlType character boolean integer real time syn match vhdlType "\<bit\>\'\="
syn keyword vhdlType boolean_vector integer_vector real_vector time_vector syn match vhdlType "\<boolean\>\'\="
syn keyword vhdlType string severity_level syn match vhdlType "\<natural\>\'\="
" Predefined standard ieee VHDL types syn match vhdlType "\<positive\>\'\="
syn keyword vhdlType positive natural signed unsigned syn match vhdlType "\<integer\>\'\="
syn keyword vhdlType unresolved_signed unresolved_unsigned u_signed u_unsigned syn match vhdlType "\<real\>\'\="
syn keyword vhdlType line text syn match vhdlType "\<time\>\'\="
syn keyword vhdlType std_logic std_logic_vector
syn keyword vhdlType std_ulogic std_ulogic_vector syn match vhdlType "\<bit_vector\>\'\="
syn match vhdlType "\<boolean_vector\>\'\="
syn match vhdlType "\<integer_vector\>\'\="
syn match vhdlType "\<real_vector\>\'\="
syn match vhdlType "\<time_vector\>\'\="
syn match vhdlType "\<character\>\'\="
syn match vhdlType "\<string\>\'\="
"syn keyword vhdlType severity_level
syn keyword vhdlType line
syn keyword vhdlType text
" Predefined standard IEEE VHDL types
syn match vhdlType "\<std_ulogic\>\'\="
syn match vhdlType "\<std_logic\>\'\="
syn match vhdlType "\<std_ulogic_vector\>\'\="
syn match vhdlType "\<std_logic_vector\>\'\="
syn match vhdlType "\<unresolved_signed\>\'\="
syn match vhdlType "\<unresolved_unsigned\>\'\="
syn match vhdlType "\<u_signed\>\'\="
syn match vhdlType "\<u_unsigned\>\'\="
syn match vhdlType "\<signed\>\'\="
syn match vhdlType "\<unsigned\>\'\="
" array attributes " array attributes
syn match vhdlAttribute "\'high" syn match vhdlAttribute "\'high"
@ -191,15 +210,23 @@ syn case ignore
syn region vhdlComment start="/\*" end="\*/" contains=vhdlTodo,vhdlFixme,@Spell syn region vhdlComment start="/\*" end="\*/" contains=vhdlTodo,vhdlFixme,@Spell
syn match vhdlComment "\(^\|\s\)--.*" contains=vhdlTodo,vhdlFixme,@Spell syn match vhdlComment "\(^\|\s\)--.*" contains=vhdlTodo,vhdlFixme,@Spell
" Standard IEEE P1076.6 preprocessor directives (metacomments).
syn match vhdlPreProc "/\*\s*rtl_synthesis\s\+\(on\|off\)\s*\*/"
syn match vhdlPreProc "\(^\|\s\)--\s*rtl_synthesis\s\+\(on\|off\)\s*"
syn match vhdlPreProc "/\*\s*rtl_syn\s\+\(on\|off\)\s*\*/"
syn match vhdlPreProc "\(^\|\s\)--\s*rtl_syn\s\+\(on\|off\)\s*"
" Industry-standard directives. These are not standard VHDL, but are commonly " Industry-standard directives. These are not standard VHDL, but are commonly
" used in the industry. " used in the industry.
syn match vhdlPreProc "/\*\s*synthesis\s\+translate_\(on\|off\)\s*\*/" syn match vhdlPreProc "/\*\s*synthesis\s\+translate_\(on\|off\)\s*\*/"
"syn match vhdlPreProc "/\*\s*simulation\s\+translate_\(on\|off\)\s*\*/" "syn match vhdlPreProc "/\*\s*simulation\s\+translate_\(on\|off\)\s*\*/"
syn match vhdlPreProc "/\*\s*pragma\s\+translate_\(on\|off\)\s*\*/"
syn match vhdlPreProc "/\*\s*pragma\s\+synthesis_\(on\|off\)\s*\*/" syn match vhdlPreProc "/\*\s*pragma\s\+synthesis_\(on\|off\)\s*\*/"
syn match vhdlPreProc "/\*\s*synopsys\s\+translate_\(on\|off\)\s*\*/" syn match vhdlPreProc "/\*\s*synopsys\s\+translate_\(on\|off\)\s*\*/"
syn match vhdlPreProc "\(^\|\s\)--\s*synthesis\s\+translate_\(on\|off\)\s*" syn match vhdlPreProc "\(^\|\s\)--\s*synthesis\s\+translate_\(on\|off\)\s*"
"syn match vhdlPreProc "\(^\|\s\)--\s*simulation\s\+translate_\(on\|off\)\s*" "syn match vhdlPreProc "\(^\|\s\)--\s*simulation\s\+translate_\(on\|off\)\s*"
syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+translate_\(on\|off\)\s*"
syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+synthesis_\(on\|off\)\s*" syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+synthesis_\(on\|off\)\s*"
syn match vhdlPreProc "\(^\|\s\)--\s*synopsys\s\+translate_\(on\|off\)\s*" syn match vhdlPreProc "\(^\|\s\)--\s*synopsys\s\+translate_\(on\|off\)\s*"

View File

@ -2,7 +2,7 @@
" Language: Zsh shell script " Language: Zsh shell script
" Maintainer: Christian Brabandt <cb@256bit.org> " Maintainer: Christian Brabandt <cb@256bit.org>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2016-01-25 " Latest Revision: 2016-02-15
" License: Vim (see :h license) " License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-zsh " Repository: https://github.com/chrisbra/vim-zsh
@ -13,20 +13,29 @@ endif
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim set cpo&vim
setlocal iskeyword+=- if v:version > 704 || (v:version == 704 && has("patch1142"))
setlocal foldmethod=syntax syn iskeyword @,48-57,_,192-255,#,-
else
setlocal iskeyword+=-
endif
if get(g:, 'zsh_fold_enable', 0)
setlocal foldmethod=syntax
endif
syn keyword zshTodo contained TODO FIXME XXX NOTE syn keyword zshTodo contained TODO FIXME XXX NOTE
syn region zshComment oneline start='\%(^\|\s*\)#' end='$' syn region zshComment oneline start='\%(^\|\s*\)#' end='$'
\ contains=zshTodo,@Spell \ contains=zshTodo,@Spell fold
syn region zshComment start='^\s*#' end='^\%(\s*#\)\@!'
\ contains=zshTodo,@Spell fold
syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$' syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$'
syn match zshQuoted '\\.' syn match zshQuoted '\\.'
syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+ syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+
\ contains=zshQuoted,@zshDerefs,@zshSubst \ contains=zshQuoted,@zshDerefs,@zshSubst fold
syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+ syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+ fold
" XXX: This should probably be more precise, but Zsh seems a bit confused about it itself " XXX: This should probably be more precise, but Zsh seems a bit confused about it itself
syn region zshPOSIXString matchgroup=zshStringDelimiter start=+\$'+ syn region zshPOSIXString matchgroup=zshStringDelimiter start=+\$'+
\ end=+'+ contains=zshQuoted \ end=+'+ contains=zshQuoted
@ -46,7 +55,7 @@ syn keyword zshException always
syn keyword zshKeyword function nextgroup=zshKSHFunction skipwhite syn keyword zshKeyword function nextgroup=zshKSHFunction skipwhite
syn match zshKSHFunction contained '\k\+' syn match zshKSHFunction contained '\w\S\+'
syn match zshFunction '^\s*\k\+\ze\s*()' syn match zshFunction '^\s*\k\+\ze\s*()'
syn match zshOperator '||\|&&\|;\|&!\=' syn match zshOperator '||\|&&\|;\|&!\='
@ -317,6 +326,8 @@ syn region zshMathSubst matchgroup=zshSubstDelim transparent
\ @zshDerefs,zshString keepend fold \ @zshDerefs,zshString keepend fold
syn region zshBrackets contained transparent start='{' skip='\\}' syn region zshBrackets contained transparent start='{' skip='\\}'
\ end='}' fold \ end='}' fold
syn region zshBrackets transparent start='{' skip='\\}'
\ end='}' contains=TOP fold
syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}' syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}'
\ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold
syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+ syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+

View File

@ -1757,12 +1757,12 @@ char_u* keymap_init(void)
vim_snprintf(buf, buflen, "keymap/%s_%s.vim", vim_snprintf(buf, buflen, "keymap/%s_%s.vim",
curbuf->b_p_keymap, p_enc); curbuf->b_p_keymap, p_enc);
if (source_runtime((char_u *)buf, FALSE) == FAIL) { if (source_runtime((char_u *)buf, 0) == FAIL) {
// try finding "keymap/'keymap'.vim" in 'runtimepath' // try finding "keymap/'keymap'.vim" in 'runtimepath'
vim_snprintf(buf, buflen, "keymap/%s.vim", vim_snprintf(buf, buflen, "keymap/%s.vim",
curbuf->b_p_keymap); curbuf->b_p_keymap);
if (source_runtime((char_u *)buf, FALSE) == FAIL) { if (source_runtime((char_u *)buf, 0) == FAIL) {
xfree(buf); xfree(buf);
return (char_u *)N_("E544: Keymap file not found"); return (char_u *)N_("E544: Keymap file not found");
} }

View File

@ -10782,6 +10782,7 @@ static void f_has(typval_T *argvars, typval_T *rettv)
"mouse", "mouse",
"multi_byte", "multi_byte",
"multi_lang", "multi_lang",
"packages",
"path_extra", "path_extra",
"persistent_undo", "persistent_undo",
"postscript", "postscript",
@ -20497,9 +20498,10 @@ script_autoload (
tofree = NULL; tofree = NULL;
} }
/* Try loading the package from $VIMRUNTIME/autoload/<name>.vim */ // Try loading the package from $VIMRUNTIME/autoload/<name>.vim
if (source_runtime(scriptname, FALSE) == OK) if (source_runtime(scriptname, 0) == OK) {
ret = TRUE; ret = true;
}
} }
xfree(tofree); xfree(tofree);

View File

@ -4796,122 +4796,15 @@ void ex_viusage(exarg_T *eap)
} }
/* /// Generate tags in one help directory
* ":helptags" ///
*/ /// @param dir Path to the doc directory
void ex_helptags(exarg_T *eap) /// @param ext Suffix of the help files (".txt", ".itx", ".frx", etc.)
{ /// @param tagname Name of the tags file ("tags" for English, "tags-fr" for
garray_T ga; /// French)
int len; /// @param add_help_tags Whether to add the "help-tags" tag
char_u lang[2]; static void helptags_one(char_u *dir, char_u *ext, char_u *tagfname,
expand_T xpc; bool add_help_tags)
char_u *dirname;
char_u ext[5];
char_u fname[8];
int filecount;
char_u **files;
int add_help_tags = FALSE;
/* Check for ":helptags ++t {dir}". */
if (STRNCMP(eap->arg, "++t", 3) == 0 && ascii_iswhite(eap->arg[3])) {
add_help_tags = TRUE;
eap->arg = skipwhite(eap->arg + 3);
}
ExpandInit(&xpc);
xpc.xp_context = EXPAND_DIRECTORIES;
dirname = ExpandOne(&xpc, eap->arg, NULL,
WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
if (dirname == NULL || !os_isdir(dirname)) {
EMSG2(_("E150: Not a directory: %s"), eap->arg);
xfree(dirname);
return;
}
/* Get a list of all files in the help directory and in subdirectories. */
STRCPY(NameBuff, dirname);
add_pathsep((char *)NameBuff);
STRCAT(NameBuff, "**");
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
char_u *buff_list[1] = {NameBuff};
if (gen_expand_wildcards(1, buff_list, &filecount, &files,
EW_FILE|EW_SILENT) == FAIL
|| filecount == 0) {
EMSG2("E151: No match: %s", NameBuff);
xfree(dirname);
return;
}
/* Go over all files in the directory to find out what languages are
* present. */
ga_init(&ga, 1, 10);
for (int i = 0; i < filecount; ++i) {
len = (int)STRLEN(files[i]);
if (len <= 4) {
continue;
}
if (STRICMP(files[i] + len - 4, ".txt") == 0) {
/* ".txt" -> language "en" */
lang[0] = 'e';
lang[1] = 'n';
} else if (files[i][len - 4] == '.'
&& ASCII_ISALPHA(files[i][len - 3])
&& ASCII_ISALPHA(files[i][len - 2])
&& TOLOWER_ASC(files[i][len - 1]) == 'x') {
/* ".abx" -> language "ab" */
lang[0] = TOLOWER_ASC(files[i][len - 3]);
lang[1] = TOLOWER_ASC(files[i][len - 2]);
} else
continue;
int j;
/* Did we find this language already? */
for (j = 0; j < ga.ga_len; j += 2)
if (STRNCMP(lang, ((char_u *)ga.ga_data) + j, 2) == 0)
break;
if (j == ga.ga_len) {
/* New language, add it. */
ga_grow(&ga, 2);
((char_u *)ga.ga_data)[ga.ga_len++] = lang[0];
((char_u *)ga.ga_data)[ga.ga_len++] = lang[1];
}
}
/*
* Loop over the found languages to generate a tags file for each one.
*/
for (int j = 0; j < ga.ga_len; j += 2) {
STRCPY(fname, "tags-xx");
fname[5] = ((char_u *)ga.ga_data)[j];
fname[6] = ((char_u *)ga.ga_data)[j + 1];
if (fname[5] == 'e' && fname[6] == 'n') {
/* English is an exception: use ".txt" and "tags". */
fname[4] = NUL;
STRCPY(ext, ".txt");
} else {
/* Language "ab" uses ".abx" and "tags-ab". */
STRCPY(ext, ".xxx");
ext[1] = fname[5];
ext[2] = fname[6];
}
helptags_one(dirname, ext, fname, add_help_tags);
}
ga_clear(&ga);
FreeWild(filecount, files);
xfree(dirname);
}
static void
helptags_one (
char_u *dir, /* doc directory */
char_u *ext, /* suffix, ".txt", ".itx", ".frx", etc. */
char_u *tagfname, /* "tags" for English, "tags-fr" for French. */
int add_help_tags /* add "help-tags" tag */
)
{ {
FILE *fd_tags; FILE *fd_tags;
FILE *fd; FILE *fd;
@ -5111,6 +5004,132 @@ helptags_one (
fclose(fd_tags); /* there is no check for an error... */ fclose(fd_tags); /* there is no check for an error... */
} }
/// Generate tags in one help directory, taking care of translations.
static void do_helptags(char_u *dirname, bool add_help_tags)
{
int len;
garray_T ga;
char_u lang[2];
char_u ext[5];
char_u fname[8];
int filecount;
char_u **files;
// Get a list of all files in the help directory and in subdirectories.
STRCPY(NameBuff, dirname);
add_pathsep((char *)NameBuff);
STRCAT(NameBuff, "**");
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
char_u *buff_list[1] = {NameBuff};
if (gen_expand_wildcards(1, buff_list, &filecount, &files,
EW_FILE|EW_SILENT) == FAIL
|| filecount == 0) {
EMSG2("E151: No match: %s", NameBuff);
xfree(dirname);
return;
}
/* Go over all files in the directory to find out what languages are
* present. */
int j;
ga_init(&ga, 1, 10);
for (int i = 0; i < filecount; i++) {
len = (int)STRLEN(files[i]);
if (len <= 4) {
continue;
}
if (STRICMP(files[i] + len - 4, ".txt") == 0) {
/* ".txt" -> language "en" */
lang[0] = 'e';
lang[1] = 'n';
} else if (files[i][len - 4] == '.'
&& ASCII_ISALPHA(files[i][len - 3])
&& ASCII_ISALPHA(files[i][len - 2])
&& TOLOWER_ASC(files[i][len - 1]) == 'x') {
/* ".abx" -> language "ab" */
lang[0] = TOLOWER_ASC(files[i][len - 3]);
lang[1] = TOLOWER_ASC(files[i][len - 2]);
} else
continue;
// Did we find this language already?
for (j = 0; j < ga.ga_len; j += 2) {
if (STRNCMP(lang, ((char_u *)ga.ga_data) + j, 2) == 0) {
break;
}
}
if (j == ga.ga_len) {
// New language, add it.
ga_grow(&ga, 2);
((char_u *)ga.ga_data)[ga.ga_len++] = lang[0];
((char_u *)ga.ga_data)[ga.ga_len++] = lang[1];
}
}
/*
* Loop over the found languages to generate a tags file for each one.
*/
for (j = 0; j < ga.ga_len; j += 2) {
STRCPY(fname, "tags-xx");
fname[5] = ((char_u *)ga.ga_data)[j];
fname[6] = ((char_u *)ga.ga_data)[j + 1];
if (fname[5] == 'e' && fname[6] == 'n') {
/* English is an exception: use ".txt" and "tags". */
fname[4] = NUL;
STRCPY(ext, ".txt");
} else {
/* Language "ab" uses ".abx" and "tags-ab". */
STRCPY(ext, ".xxx");
ext[1] = fname[5];
ext[2] = fname[6];
}
helptags_one(dirname, ext, fname, add_help_tags);
}
ga_clear(&ga);
FreeWild(filecount, files);
}
static void
helptags_cb(char_u *fname, void *cookie)
{
do_helptags(fname, *(bool *)cookie);
}
/*
* ":helptags"
*/
void ex_helptags(exarg_T *eap)
{
expand_T xpc;
char_u *dirname;
bool add_help_tags = false;
/* Check for ":helptags ++t {dir}". */
if (STRNCMP(eap->arg, "++t", 3) == 0 && ascii_iswhite(eap->arg[3])) {
add_help_tags = true;
eap->arg = skipwhite(eap->arg + 3);
}
if (STRCMP(eap->arg, "ALL") == 0) {
do_in_path(p_rtp, (char_u *)"doc", DIP_ALL + DIP_DIR,
helptags_cb, &add_help_tags);
} else {
ExpandInit(&xpc);
xpc.xp_context = EXPAND_DIRECTORIES;
dirname = ExpandOne(&xpc, eap->arg, NULL,
WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
if (dirname == NULL || !os_isdir(dirname)) {
EMSG2(_("E150: Not a directory: %s"), eap->arg);
} else {
do_helptags(dirname, add_help_tags);
}
xfree(dirname);
}
}
struct sign struct sign
{ {
sign_T *sn_next; /* next sign in list */ sign_T *sn_next; /* next sign in list */

View File

@ -1848,6 +1848,18 @@ return {
addr_type=ADDR_LINES, addr_type=ADDR_LINES,
func='ex_print', func='ex_print',
}, },
{
command='packadd',
flags=bit.bor(BANG, FILE1, NEEDARG, TRLBAR, SBOXOK, CMDWIN),
addr_type=ADDR_LINES,
func='ex_packadd',
},
{
command='packloadall',
flags=bit.bor(BANG, TRLBAR, SBOXOK, CMDWIN),
addr_type=ADDR_LINES,
func='ex_packloadall',
},
{ {
command='pclose', command='pclose',
flags=bit.bor(BANG, TRLBAR), flags=bit.bor(BANG, TRLBAR),

View File

@ -2237,7 +2237,7 @@ void ex_compiler(exarg_T *eap)
do_unlet((char_u *)"b:current_compiler", true); do_unlet((char_u *)"b:current_compiler", true);
snprintf((char *)buf, bufsize, "compiler/%s.vim", eap->arg); snprintf((char *)buf, bufsize, "compiler/%s.vim", eap->arg);
if (source_runtime(buf, true) == FAIL) { if (source_runtime(buf, DIP_ALL) == FAIL) {
EMSG2(_("E666: compiler not supported: %s"), eap->arg); EMSG2(_("E666: compiler not supported: %s"), eap->arg);
} }
xfree(buf); xfree(buf);
@ -2263,10 +2263,29 @@ void ex_compiler(exarg_T *eap)
} }
} }
/// ":runtime {name}" /// ":runtime [what] {name}"
void ex_runtime(exarg_T *eap) void ex_runtime(exarg_T *eap)
{ {
source_runtime(eap->arg, eap->forceit); char_u *arg = eap->arg;
char_u *p = skiptowhite(arg);
ptrdiff_t len = p - arg;
int flags = eap->forceit ? DIP_ALL : 0;
if (STRNCMP(arg, "START", len) == 0) {
flags += DIP_START + DIP_NORTP;
arg = skipwhite(arg + len);
} else if (STRNCMP(arg, "OPT", len) == 0) {
flags += DIP_OPT + DIP_NORTP;
arg = skipwhite(arg + len);
} else if (STRNCMP(arg, "PACK", len) == 0) {
flags += DIP_START + DIP_OPT + DIP_NORTP;
arg = skipwhite(arg + len);
} else if (STRNCMP(arg, "ALL", len) == 0) {
flags += DIP_START + DIP_OPT;
arg = skipwhite(arg + len);
}
source_runtime(arg, flags);
} }
@ -2277,28 +2296,25 @@ static void source_callback(char_u *fname, void *cookie)
/// Source the file "name" from all directories in 'runtimepath'. /// Source the file "name" from all directories in 'runtimepath'.
/// "name" can contain wildcards. /// "name" can contain wildcards.
/// When "all" is true, source all files, otherwise only the first one. /// When "flags" has DIP_ALL: source all files, otherwise only the first one.
///
/// return FAIL when no file could be sourced, OK otherwise. /// return FAIL when no file could be sourced, OK otherwise.
int source_runtime(char_u *name, int all) int source_runtime(char_u *name, int flags)
{ {
return do_in_runtimepath(name, all, source_callback, NULL); return do_in_runtimepath(name, flags, source_callback, NULL);
} }
/// Find "name" in 'runtimepath'. When found, invoke the callback function for /// Find the file "name" in all directories in "path" and invoke
/// it: callback(fname, "cookie") /// "callback(fname, cookie)".
/// When "all" is true repeat for all matches, otherwise only the first one is /// "name" can contain wildcards.
/// used. /// When "flags" has DIP_ALL: source all files, otherwise only the first one.
/// Returns OK when at least one match found, FAIL otherwise. /// When "flags" has DIP_DIR: find directories instead of files.
/// If "name" is NULL calls callback for each entry in runtimepath. Cookie is /// When "flags" has DIP_ERR: give an error message if there is no match.
/// passed by reference in this case, setting it to NULL indicates that callback ///
/// has done its job. /// return FAIL when no file could be sourced, OK otherwise.
int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback, int do_in_path(char_u *path, char_u *name, int flags,
void *cookie) DoInRuntimepathCB callback, void *cookie)
{ {
char_u *rtp;
char_u *np;
char_u *buf;
char_u *rtp_copy;
char_u *tail; char_u *tail;
int num_files; int num_files;
char_u **files; char_u **files;
@ -2307,19 +2323,19 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
// Make a copy of 'runtimepath'. Invoking the callback may change the // Make a copy of 'runtimepath'. Invoking the callback may change the
// value. // value.
rtp_copy = vim_strsave(p_rtp); char_u *rtp_copy = vim_strsave(path);
buf = xmallocz(MAXPATHL); char_u *buf = xmallocz(MAXPATHL);
{ {
if (p_verbose > 1 && name != NULL) { if (p_verbose > 1 && name != NULL) {
verbose_enter(); verbose_enter();
smsg(_("Searching for \"%s\" in \"%s\""), smsg(_("Searching for \"%s\" in \"%s\""),
(char *)name, (char *)p_rtp); (char *)name, (char *)path);
verbose_leave(); verbose_leave();
} }
// Loop over all entries in 'runtimepath'. // Loop over all entries in 'runtimepath'.
rtp = rtp_copy; char_u *rtp = rtp_copy;
while (*rtp != NUL && (all || !did_one)) { while (*rtp != NUL && ((flags & DIP_ALL) || !did_one)) {
// Copy the path from 'runtimepath' to buf[]. // Copy the path from 'runtimepath' to buf[].
copy_option_part(&rtp, buf, MAXPATHL, ","); copy_option_part(&rtp, buf, MAXPATHL, ",");
if (name == NULL) { if (name == NULL) {
@ -2332,8 +2348,8 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
tail = buf + STRLEN(buf); tail = buf + STRLEN(buf);
// Loop over all patterns in "name" // Loop over all patterns in "name"
np = name; char_u *np = name;
while (*np != NUL && (all || !did_one)) { while (*np != NUL && ((flags & DIP_ALL) || !did_one)) {
// Append the pattern from "name" to buf[]. // Append the pattern from "name" to buf[].
assert(MAXPATHL >= (tail - buf)); assert(MAXPATHL >= (tail - buf));
copy_option_part(&np, tail, (size_t)(MAXPATHL - (tail - buf)), copy_option_part(&np, tail, (size_t)(MAXPATHL - (tail - buf)),
@ -2347,11 +2363,12 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
// Expand wildcards, invoke the callback for each match. // Expand wildcards, invoke the callback for each match.
if (gen_expand_wildcards(1, &buf, &num_files, &files, if (gen_expand_wildcards(1, &buf, &num_files, &files,
EW_FILE) == OK) { (flags & DIP_DIR) ? EW_DIR
: EW_FILE) == OK) {
for (i = 0; i < num_files; i++) { for (i = 0; i < num_files; i++) {
(*callback)(files[i], cookie); (*callback)(files[i], cookie);
did_one = true; did_one = true;
if (!all) { if (!(flags & DIP_ALL)) {
break; break;
} }
} }
@ -2363,16 +2380,228 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
} }
xfree(buf); xfree(buf);
xfree(rtp_copy); xfree(rtp_copy);
if (p_verbose > 0 && !did_one && name != NULL) { if (!did_one && name != NULL) {
char *basepath = path == p_rtp ? "runtimepath" : "packpath";
if (flags & DIP_ERR) {
EMSG3(_(e_dirnotf), basepath, name);
} else if (p_verbose > 0) {
verbose_enter(); verbose_enter();
smsg(_("not found in 'runtimepath': \"%s\""), name); smsg(_("not found in '%s': \"%s\""), basepath, name);
verbose_leave(); verbose_leave();
} }
}
return did_one ? OK : FAIL; return did_one ? OK : FAIL;
} }
/// Find "name" in 'runtimepath'. When found, invoke the callback function for
/// it: callback(fname, "cookie")
/// When "flags" has DIP_ALL repeat for all matches, otherwise only the first
/// one is used.
/// Returns OK when at least one match found, FAIL otherwise.
/// If "name" is NULL calls callback for each entry in runtimepath. Cookie is
/// passed by reference in this case, setting it to NULL indicates that callback
/// has done its job.
int do_in_runtimepath(char_u *name, int flags, DoInRuntimepathCB callback,
void *cookie)
{
int done = FAIL;
if ((flags & DIP_NORTP) == 0) {
done = do_in_path(p_rtp, name, flags, callback, cookie);
}
if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) {
char *start_dir = "pack/*/start/*/%s"; // NOLINT
size_t len = STRLEN(start_dir) + STRLEN(name);
char_u *s = xmallocz(len);
vim_snprintf((char *)s, len, start_dir, name);
done = do_in_path(p_pp, s, flags, callback, cookie);
xfree(s);
}
if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) {
char *opt_dir = "pack/*/opt/*/%s"; // NOLINT
size_t len = STRLEN(opt_dir) + STRLEN(name);
char_u *s = xmallocz(len);
vim_snprintf((char *)s, len, opt_dir, name);
done = do_in_path(p_pp, s, flags, callback, cookie);
xfree(s);
}
return done;
}
// Expand wildcards in "pat" and invoke do_source() for each match.
static void source_all_matches(char_u *pat)
{
int num_files;
char_u **files;
if (gen_expand_wildcards(1, &pat, &num_files, &files, EW_FILE) == OK) {
for (int i = 0; i < num_files; i++) {
(void)do_source(files[i], false, DOSO_NONE);
}
FreeWild(num_files, files);
}
}
// used for "cookie" of add_pack_plugin()
static int APP_ADD_DIR;
static int APP_LOAD;
static int APP_BOTH;
static void add_pack_plugin(char_u *fname, void *cookie)
{
char_u *p4, *p3, *p2, *p1, *p;
char_u *new_rtp;
char_u *ffname = (char_u *)fix_fname((char *)fname);
if (ffname == NULL) {
return;
}
if (cookie != &APP_LOAD && strstr((char *)p_rtp, (char *)ffname) == NULL) {
// directory is not yet in 'runtimepath', add it
p4 = p3 = p2 = p1 = get_past_head(ffname);
for (p = p1; *p; mb_ptr_adv(p)) {
if (vim_ispathsep_nocolon(*p)) {
p4 = p3; p3 = p2; p2 = p1; p1 = p;
}
}
// now we have:
// rtp/pack/name/start/name
// p4 p3 p2 p1
//
// find the part up to "pack" in 'runtimepath'
char_u c = *p4;
*p4 = NUL;
// Find "ffname" in "p_rtp", ignoring '/' vs '\' differences
size_t fname_len = STRLEN(ffname);
char_u *insp = p_rtp;
for (;;) {
if (vim_fnamencmp(insp, ffname, fname_len) == 0) {
break;
}
insp = vim_strchr(insp, ',');
if (insp == NULL) {
break;
}
insp++;
}
if (insp == NULL) {
// not found, append at the end
insp = p_rtp + STRLEN(p_rtp);
} else {
// append after the matching directory.
insp += STRLEN(ffname);
while (*insp != NUL && *insp != ',') {
insp++;
}
}
*p4 = c;
// check if rtp/pack/name/start/name/after exists
char *afterdir = concat_fnames((char *)ffname, "after", true);
size_t afterlen = 0;
if (os_isdir((char_u *)afterdir)) {
afterlen = STRLEN(afterdir) + 1; // add one for comma
}
size_t oldlen = STRLEN(p_rtp);
size_t addlen = STRLEN(ffname) + 1; // add one for comma
new_rtp = try_malloc(oldlen + addlen + afterlen + 1); // add one for NUL
if (new_rtp == NULL) {
goto theend;
}
uintptr_t keep = (uintptr_t)(insp - p_rtp);
memmove(new_rtp, p_rtp, keep);
new_rtp[keep] = ',';
memmove(new_rtp + keep + 1, ffname, addlen);
if (p_rtp[keep] != NUL) {
memmove(new_rtp + keep + addlen, p_rtp + keep,
oldlen - keep + 1);
}
if (afterlen > 0) {
STRCAT(new_rtp, ",");
STRCAT(new_rtp, afterdir);
}
set_option_value((char_u *)"rtp", 0L, new_rtp, 0);
xfree(new_rtp);
xfree(afterdir);
}
if (cookie != &APP_ADD_DIR) {
static const char *plugpat = "%s/plugin/*.vim"; // NOLINT
static const char *ftpat = "%s/ftdetect/*.vim"; // NOLINT
size_t len = STRLEN(ffname) + STRLEN(ftpat);
char_u *pat = try_malloc(len + 1);
if (pat == NULL) {
goto theend;
}
vim_snprintf((char *)pat, len, plugpat, ffname);
source_all_matches(pat);
char_u *cmd = vim_strsave((char_u *)"g:did_load_filetypes");
// If runtime/filetype.vim wasn't loaded yet, the scripts will be
// found when it loads.
if (eval_to_number(cmd) > 0) {
do_cmdline_cmd("augroup filetypedetect");
vim_snprintf((char *)pat, len, ftpat, ffname);
source_all_matches(pat);
do_cmdline_cmd("augroup END");
}
xfree(cmd);
xfree(pat);
}
theend:
xfree(ffname);
}
static bool did_source_packages = false;
// ":packloadall"
// Find plugins in the package directories and source them.
void ex_packloadall(exarg_T *eap)
{
if (!did_source_packages || (eap != NULL && eap->forceit)) {
did_source_packages = true;
// First do a round to add all directories to 'runtimepath', then load
// the plugins. This allows for plugins to use an autoload directory
// of another plugin.
do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, // NOLINT
add_pack_plugin, &APP_ADD_DIR);
do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, // NOLINT
add_pack_plugin, &APP_LOAD);
}
}
/// ":packadd[!] {name}"
void ex_packadd(exarg_T *eap)
{
static const char *plugpat = "pack/*/opt/%s"; // NOLINT
size_t len = STRLEN(plugpat) + STRLEN(eap->arg);
char *pat = (char *)xmallocz(len);
vim_snprintf(pat, len, plugpat, eap->arg);
do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR + DIP_ERR, add_pack_plugin,
eap->forceit ? &APP_ADD_DIR : &APP_BOTH);
xfree(pat);
}
/// ":options" /// ":options"
void ex_options(exarg_T *eap) void ex_options(exarg_T *eap)
{ {

View File

@ -3316,6 +3316,11 @@ set_one_cmd_context (
xp->xp_pattern = arg; xp->xp_pattern = arg;
break; break;
case CMD_packadd:
xp->xp_context = EXPAND_PACKADD;
xp->xp_pattern = arg;
break;
#ifdef HAVE_WORKING_LIBINTL #ifdef HAVE_WORKING_LIBINTL
case CMD_language: case CMD_language:
p = skiptowhite(arg); p = skiptowhite(arg);
@ -4660,41 +4665,42 @@ static struct {
char *name; char *name;
} command_complete[] = } command_complete[] =
{ {
{EXPAND_AUGROUP, "augroup"}, { EXPAND_AUGROUP, "augroup" },
{EXPAND_BEHAVE, "behave"}, { EXPAND_BEHAVE, "behave" },
{EXPAND_BUFFERS, "buffer"}, { EXPAND_BUFFERS, "buffer" },
{EXPAND_COLORS, "color"}, { EXPAND_COLORS, "color" },
{EXPAND_COMMANDS, "command"}, { EXPAND_COMMANDS, "command" },
{EXPAND_COMPILER, "compiler"}, { EXPAND_COMPILER, "compiler" },
{EXPAND_CSCOPE, "cscope"}, { EXPAND_CSCOPE, "cscope" },
{EXPAND_USER_DEFINED, "custom"}, { EXPAND_USER_DEFINED, "custom" },
{EXPAND_USER_LIST, "customlist"}, { EXPAND_USER_LIST, "customlist" },
{EXPAND_DIRECTORIES, "dir"}, { EXPAND_DIRECTORIES, "dir" },
{EXPAND_ENV_VARS, "environment"}, { EXPAND_ENV_VARS, "environment" },
{EXPAND_EVENTS, "event"}, { EXPAND_EVENTS, "event" },
{EXPAND_EXPRESSION, "expression"}, { EXPAND_EXPRESSION, "expression" },
{EXPAND_FILES, "file"}, { EXPAND_FILES, "file" },
{EXPAND_FILES_IN_PATH, "file_in_path"}, { EXPAND_FILES_IN_PATH, "file_in_path" },
{EXPAND_FILETYPE, "filetype"}, { EXPAND_FILETYPE, "filetype" },
{EXPAND_FUNCTIONS, "function"}, { EXPAND_FUNCTIONS, "function" },
{EXPAND_HELP, "help"}, { EXPAND_HELP, "help" },
{EXPAND_HIGHLIGHT, "highlight"}, { EXPAND_HIGHLIGHT, "highlight" },
{EXPAND_HISTORY, "history"}, { EXPAND_HISTORY, "history" },
#ifdef HAVE_WORKING_LIBINTL #ifdef HAVE_WORKING_LIBINTL
{EXPAND_LOCALES, "locale"}, { EXPAND_LOCALES, "locale" },
#endif #endif
{EXPAND_MAPPINGS, "mapping"}, { EXPAND_MAPPINGS, "mapping" },
{EXPAND_MENUS, "menu"}, { EXPAND_MENUS, "menu" },
{EXPAND_OWNSYNTAX, "syntax"}, { EXPAND_OWNSYNTAX, "syntax" },
{EXPAND_SYNTIME, "syntime"}, { EXPAND_SYNTIME, "syntime" },
{EXPAND_SETTINGS, "option"}, { EXPAND_SETTINGS, "option" },
{EXPAND_SHELLCMD, "shellcmd"}, { EXPAND_PACKADD, "packadd" },
{EXPAND_SIGN, "sign"}, { EXPAND_SHELLCMD, "shellcmd" },
{EXPAND_TAGS, "tag"}, { EXPAND_SIGN, "sign" },
{EXPAND_TAGS_LISTFILES, "tag_listfiles"}, { EXPAND_TAGS, "tag" },
{EXPAND_USER, "user"}, { EXPAND_TAGS_LISTFILES, "tag_listfiles" },
{EXPAND_USER_VARS, "var"}, { EXPAND_USER, "user" },
{0, NULL} { EXPAND_USER_VARS, "var" },
{ 0, NULL }
}; };
static void uc_list(char_u *name, size_t name_len) static void uc_list(char_u *name, size_t name_len)
@ -9330,14 +9336,14 @@ static void ex_filetype(exarg_T *eap)
} }
if (STRCMP(arg, "on") == 0 || STRCMP(arg, "detect") == 0) { if (STRCMP(arg, "on") == 0 || STRCMP(arg, "detect") == 0) {
if (*arg == 'o' || !filetype_detect) { if (*arg == 'o' || !filetype_detect) {
source_runtime((char_u *)FILETYPE_FILE, true); source_runtime((char_u *)FILETYPE_FILE, DIP_ALL);
filetype_detect = kTrue; filetype_detect = kTrue;
if (plugin) { if (plugin) {
source_runtime((char_u *)FTPLUGIN_FILE, true); source_runtime((char_u *)FTPLUGIN_FILE, DIP_ALL);
filetype_plugin = kTrue; filetype_plugin = kTrue;
} }
if (indent) { if (indent) {
source_runtime((char_u *)INDENT_FILE, true); source_runtime((char_u *)INDENT_FILE, DIP_ALL);
filetype_indent = kTrue; filetype_indent = kTrue;
} }
} }
@ -9348,15 +9354,15 @@ static void ex_filetype(exarg_T *eap)
} else if (STRCMP(arg, "off") == 0) { } else if (STRCMP(arg, "off") == 0) {
if (plugin || indent) { if (plugin || indent) {
if (plugin) { if (plugin) {
source_runtime((char_u *)FTPLUGOF_FILE, true); source_runtime((char_u *)FTPLUGOF_FILE, DIP_ALL);
filetype_plugin = kFalse; filetype_plugin = kFalse;
} }
if (indent) { if (indent) {
source_runtime((char_u *)INDOFF_FILE, true); source_runtime((char_u *)INDOFF_FILE, DIP_ALL);
filetype_indent = kFalse; filetype_indent = kFalse;
} }
} else { } else {
source_runtime((char_u *)FTOFF_FILE, true); source_runtime((char_u *)FTOFF_FILE, DIP_ALL);
filetype_detect = kFalse; filetype_detect = kFalse;
} }
} else } else

View File

@ -3440,6 +3440,7 @@ addstar (
|| context == EXPAND_COMPILER || context == EXPAND_COMPILER
|| context == EXPAND_OWNSYNTAX || context == EXPAND_OWNSYNTAX
|| context == EXPAND_FILETYPE || context == EXPAND_FILETYPE
|| context == EXPAND_PACKADD
|| (context == EXPAND_TAGS && fname[0] == '/')) || (context == EXPAND_TAGS && fname[0] == '/'))
retval = vim_strnsave(fname, len); retval = vim_strnsave(fname, len);
else { else {
@ -3794,23 +3795,27 @@ ExpandFromContext (
|| xp->xp_context == EXPAND_TAGS_LISTFILES) || xp->xp_context == EXPAND_TAGS_LISTFILES)
return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file); return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
if (xp->xp_context == EXPAND_COLORS) { if (xp->xp_context == EXPAND_COLORS) {
char *directories[] = {"colors", NULL}; char *directories[] = { "colors", NULL };
return ExpandRTDir(pat, num_file, file, directories); return ExpandRTDir(pat, DIP_START + DIP_OPT, num_file, file, directories);
} }
if (xp->xp_context == EXPAND_COMPILER) { if (xp->xp_context == EXPAND_COMPILER) {
char *directories[] = {"compiler", NULL}; char *directories[] = { "compiler", NULL };
return ExpandRTDir(pat, num_file, file, directories); return ExpandRTDir(pat, 0, num_file, file, directories);
} }
if (xp->xp_context == EXPAND_OWNSYNTAX) { if (xp->xp_context == EXPAND_OWNSYNTAX) {
char *directories[] = {"syntax", NULL}; char *directories[] = { "syntax", NULL };
return ExpandRTDir(pat, num_file, file, directories); return ExpandRTDir(pat, 0, num_file, file, directories);
} }
if (xp->xp_context == EXPAND_FILETYPE) { if (xp->xp_context == EXPAND_FILETYPE) {
char *directories[] = {"syntax", "indent", "ftplugin", NULL}; char *directories[] = { "syntax", "indent", "ftplugin", NULL };
return ExpandRTDir(pat, num_file, file, directories); return ExpandRTDir(pat, 0, num_file, file, directories);
} }
if (xp->xp_context == EXPAND_USER_LIST) if (xp->xp_context == EXPAND_USER_LIST) {
return ExpandUserList(xp, num_file, file); return ExpandUserList(xp, num_file, file);
}
if (xp->xp_context == EXPAND_PACKADD) {
return ExpandPackAddDir(pat, num_file, file);
}
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0); regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
if (regmatch.regprog == NULL) if (regmatch.regprog == NULL)
@ -4190,12 +4195,16 @@ static int ExpandUserList(expand_T *xp, int *num_file, char_u ***file)
return OK; return OK;
} }
/* /// Expand color scheme, compiler or filetype names.
* Expand color scheme, compiler or filetype names: /// Search from 'runtimepath':
* 'runtimepath'/{dirnames}/{pat}.vim /// 'runtimepath'/{dirnames}/{pat}.vim
* "dirnames" is an array with one or more directory names. /// When "flags" has DIP_START: search also from 'start' of 'packpath':
*/ /// 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim
static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirnames[]) /// When "flags" has DIP_OPT: search also from 'opt' of 'packpath':
/// 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim
/// "dirnames" is an array with one or more directory names.
static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file,
char *dirnames[])
{ {
*num_file = 0; *num_file = 0;
*file = NULL; *file = NULL;
@ -4212,6 +4221,26 @@ static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirname
xfree(s); xfree(s);
} }
if (flags & DIP_START) {
for (int i = 0; dirnames[i] != NULL; i++) {
size_t size = STRLEN(dirnames[i]) + pat_len + 22;
char_u *s = xmalloc(size);
snprintf((char *)s, size, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
globpath(p_pp, s, &ga, 0);
xfree(s);
}
}
if (flags & DIP_OPT) {
for (int i = 0; dirnames[i] != NULL; i++) {
size_t size = STRLEN(dirnames[i]) + pat_len + 20;
char_u *s = xmalloc(size);
snprintf((char *)s, size, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
globpath(p_pp, s, &ga, 0);
xfree(s);
}
}
for (int i = 0; i < ga.ga_len; i++) { for (int i = 0; i < ga.ga_len; i++) {
char_u *match = ((char_u **)ga.ga_data)[i]; char_u *match = ((char_u **)ga.ga_data)[i];
char_u *s = match; char_u *s = match;
@ -4241,6 +4270,43 @@ static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirname
return OK; return OK;
} }
/// Expand loadplugin names:
/// 'packpath'/pack/ * /opt/{pat}
static int ExpandPackAddDir(char_u *pat, int *num_file, char_u ***file)
{
garray_T ga;
*num_file = 0;
*file = NULL;
size_t pat_len = STRLEN(pat);
ga_init(&ga, (int)sizeof(char *), 10);
size_t buflen = pat_len + 26;
char_u *s = xmalloc(buflen);
snprintf((char *)s, buflen, "pack/*/opt/%s*", pat); // NOLINT
globpath(p_pp, s, &ga, 0);
xfree(s);
for (int i = 0; i < ga.ga_len; i++) {
char_u *match = ((char_u **)ga.ga_data)[i];
s = path_tail(match);
char_u *e = s + STRLEN(s);
memmove(match, s, e - s + 1);
}
if (GA_EMPTY(&ga)) {
return FAIL;
}
// Sort and remove duplicates which can happen when specifying multiple
// directories in dirnames.
ga_remove_duplicate_strings(&ga);
*file = ga.ga_data;
*num_file = ga.ga_len;
return OK;
}
/// Expand `file` for all comma-separated directories in `path`. /// Expand `file` for all comma-separated directories in `path`.
/// Adds matches to `ga`. /// Adds matches to `ga`.

View File

@ -1223,6 +1223,8 @@ EXTERN char_u e_invalpat[] INIT(= N_(
EXTERN char_u e_bufloaded[] INIT(= N_("E139: File is loaded in another buffer")); EXTERN char_u e_bufloaded[] INIT(= N_("E139: File is loaded in another buffer"));
EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set")); EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name")); EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
EXTERN char_u e_dirnotf[] INIT(= N_(
"E919: Directory not found in '%s': \"%s\""));
EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported")); EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported"));

View File

@ -1526,8 +1526,7 @@ static int prt_find_resource(char *name, struct prt_ps_resource_S *resource)
vim_strcat(buffer, (char_u *)name, MAXPATHL); vim_strcat(buffer, (char_u *)name, MAXPATHL);
vim_strcat(buffer, (char_u *)".ps", MAXPATHL); vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
resource->filename[0] = NUL; resource->filename[0] = NUL;
retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name, retval = (do_in_runtimepath(buffer, 0, prt_resource_name, resource->filename)
resource->filename)
&& resource->filename[0] != NUL); && resource->filename[0] != NUL);
xfree(buffer); xfree(buffer);
return retval; return retval;

View File

@ -1241,8 +1241,11 @@ static void set_window_layout(mparm_T *paramp)
static void load_plugins(void) static void load_plugins(void)
{ {
if (p_lpl) { if (p_lpl) {
source_runtime((char_u *)"plugin/**/*.vim", TRUE); source_runtime((char_u *)"plugin/**/*.vim", DIP_ALL); // NOLINT
TIME_MSG("loading plugins"); TIME_MSG("loading plugins");
ex_packloadall(NULL);
TIME_MSG("loading packages");
} }
} }

View File

@ -3187,8 +3187,9 @@ did_set_string_option (
for (p = q; *p != NUL; ++p) for (p = q; *p != NUL; ++p)
if (vim_strchr((char_u *)"_.,", *p) != NULL) if (vim_strchr((char_u *)"_.,", *p) != NULL)
break; break;
vim_snprintf((char *)fname, 200, "spell/%.*s.vim", (int)(p - q), q); vim_snprintf((char *)fname, sizeof(fname), "spell/%.*s.vim",
source_runtime(fname, TRUE); (int)(p - q), q);
source_runtime(fname, DIP_ALL);
} }
} }
@ -5839,6 +5840,7 @@ set_context_in_set_cmd (
if (p == (char_u *)&p_bdir if (p == (char_u *)&p_bdir
|| p == (char_u *)&p_dir || p == (char_u *)&p_dir
|| p == (char_u *)&p_path || p == (char_u *)&p_path
|| p == (char_u *)&p_pp
|| p == (char_u *)&p_rtp || p == (char_u *)&p_rtp
|| p == (char_u *)&p_cdpath || p == (char_u *)&p_cdpath
|| p == (char_u *)&p_vdir || p == (char_u *)&p_vdir

View File

@ -456,80 +456,81 @@ EXTERN int p_hid; // 'hidden'
// Use P_HID to check if a buffer is to be hidden when it is no longer // Use P_HID to check if a buffer is to be hidden when it is no longer
// visible in a window. // visible in a window.
# define P_HID(buf) (buf_hide(buf)) # define P_HID(buf) (buf_hide(buf))
EXTERN char_u *p_hl; /* 'highlight' */ EXTERN char_u *p_hl; // 'highlight'
EXTERN int p_hls; /* 'hlsearch' */ EXTERN int p_hls; // 'hlsearch'
EXTERN long p_hi; /* 'history' */ EXTERN long p_hi; // 'history'
EXTERN int p_hkmap; /* 'hkmap' */ EXTERN int p_hkmap; // 'hkmap'
EXTERN int p_hkmapp; /* 'hkmapp' */ EXTERN int p_hkmapp; // 'hkmapp'
EXTERN int p_fkmap; /* 'fkmap' */ EXTERN int p_fkmap; // 'fkmap'
EXTERN int p_altkeymap; /* 'altkeymap' */ EXTERN int p_altkeymap; // 'altkeymap'
EXTERN int p_arshape; /* 'arabicshape' */ EXTERN int p_arshape; // 'arabicshape'
EXTERN int p_icon; /* 'icon' */ EXTERN int p_icon; // 'icon'
EXTERN char_u *p_iconstring; /* 'iconstring' */ EXTERN char_u *p_iconstring; // 'iconstring'
EXTERN int p_ic; /* 'ignorecase' */ EXTERN int p_ic; // 'ignorecase'
EXTERN int p_is; /* 'incsearch' */ EXTERN int p_is; // 'incsearch'
EXTERN int p_im; /* 'insertmode' */ EXTERN int p_im; // 'insertmode'
EXTERN char_u *p_isf; /* 'isfname' */ EXTERN char_u *p_isf; // 'isfname'
EXTERN char_u *p_isi; /* 'isident' */ EXTERN char_u *p_isi; // 'isident'
EXTERN char_u *p_isp; /* 'isprint' */ EXTERN char_u *p_isp; // 'isprint'
EXTERN int p_js; /* 'joinspaces' */ EXTERN int p_js; // 'joinspaces'
EXTERN char_u *p_kp; /* 'keywordprg' */ EXTERN char_u *p_kp; // 'keywordprg'
EXTERN char_u *p_km; /* 'keymodel' */ EXTERN char_u *p_km; // 'keymodel'
EXTERN char_u *p_langmap; /* 'langmap'*/ EXTERN char_u *p_langmap; // 'langmap'*/
EXTERN int p_lnr; /* 'langnoremap'*/ EXTERN int p_lnr; // 'langnoremap'*/
EXTERN char_u *p_lm; /* 'langmenu' */ EXTERN char_u *p_lm; // 'langmenu'
EXTERN char_u *p_lispwords; /* 'lispwords' */ EXTERN char_u *p_lispwords; // 'lispwords'
EXTERN long p_ls; /* 'laststatus' */ EXTERN long p_ls; // 'laststatus'
EXTERN long p_stal; /* 'showtabline' */ EXTERN long p_stal; // 'showtabline'
EXTERN char_u *p_lcs; /* 'listchars' */ EXTERN char_u *p_lcs; // 'listchars'
EXTERN int p_lz; /* 'lazyredraw' */ EXTERN int p_lz; // 'lazyredraw'
EXTERN int p_lpl; /* 'loadplugins' */ EXTERN int p_lpl; // 'loadplugins'
EXTERN int p_magic; /* 'magic' */ EXTERN int p_magic; // 'magic'
EXTERN char_u *p_mef; /* 'makeef' */ EXTERN char_u *p_mef; // 'makeef'
EXTERN char_u *p_mp; /* 'makeprg' */ EXTERN char_u *p_mp; // 'makeprg'
EXTERN char_u *p_cc; /* 'colorcolumn' */ EXTERN char_u *p_cc; // 'colorcolumn'
EXTERN int p_cc_cols[256]; /* array for 'colorcolumn' columns */ EXTERN int p_cc_cols[256]; // array for 'colorcolumn' columns
EXTERN long p_mat; /* 'matchtime' */ EXTERN long p_mat; // 'matchtime'
EXTERN long p_mco; /* 'maxcombine' */ EXTERN long p_mco; // 'maxcombine'
EXTERN long p_mfd; /* 'maxfuncdepth' */ EXTERN long p_mfd; // 'maxfuncdepth'
EXTERN long p_mmd; /* 'maxmapdepth' */ EXTERN long p_mmd; // 'maxmapdepth'
EXTERN long p_mm; /* 'maxmem' */ EXTERN long p_mm; // 'maxmem'
EXTERN long p_mmp; /* 'maxmempattern' */ EXTERN long p_mmp; // 'maxmempattern'
EXTERN long p_mmt; /* 'maxmemtot' */ EXTERN long p_mmt; // 'maxmemtot'
EXTERN long p_mis; /* 'menuitems' */ EXTERN long p_mis; // 'menuitems'
EXTERN char_u *p_msm; /* 'mkspellmem' */ EXTERN char_u *p_msm; // 'mkspellmem'
EXTERN long p_mls; /* 'modelines' */ EXTERN long p_mls; // 'modelines'
EXTERN char_u *p_mouse; /* 'mouse' */ EXTERN char_u *p_mouse; // 'mouse'
EXTERN char_u *p_mousem; /* 'mousemodel' */ EXTERN char_u *p_mousem; // 'mousemodel'
EXTERN long p_mouset; /* 'mousetime' */ EXTERN long p_mouset; // 'mousetime'
EXTERN int p_more; /* 'more' */ EXTERN int p_more; // 'more'
EXTERN char_u *p_opfunc; /* 'operatorfunc' */ EXTERN char_u *p_opfunc; // 'operatorfunc'
EXTERN char_u *p_para; /* 'paragraphs' */ EXTERN char_u *p_para; // 'paragraphs'
EXTERN int p_paste; /* 'paste' */ EXTERN int p_paste; // 'paste'
EXTERN char_u *p_pt; /* 'pastetoggle' */ EXTERN char_u *p_pt; // 'pastetoggle'
EXTERN char_u *p_pex; /* 'patchexpr' */ EXTERN char_u *p_pex; // 'patchexpr'
EXTERN char_u *p_pm; /* 'patchmode' */ EXTERN char_u *p_pm; // 'patchmode'
EXTERN char_u *p_path; /* 'path' */ EXTERN char_u *p_path; // 'path'
EXTERN char_u *p_cdpath; /* 'cdpath' */ EXTERN char_u *p_cdpath; // 'cdpath'
EXTERN long p_rdt; /* 'redrawtime' */ EXTERN long p_rdt; // 'redrawtime'
EXTERN int p_remap; /* 'remap' */ EXTERN int p_remap; // 'remap'
EXTERN long p_re; /* 'regexpengine' */ EXTERN long p_re; // 'regexpengine'
EXTERN long p_report; /* 'report' */ EXTERN long p_report; // 'report'
EXTERN long p_pvh; /* 'previewheight' */ EXTERN long p_pvh; // 'previewheight'
EXTERN int p_ari; /* 'allowrevins' */ EXTERN int p_ari; // 'allowrevins'
EXTERN int p_ri; /* 'revins' */ EXTERN int p_ri; // 'revins'
EXTERN int p_ru; /* 'ruler' */ EXTERN int p_ru; // 'ruler'
EXTERN char_u *p_ruf; /* 'rulerformat' */ EXTERN char_u *p_ruf; // 'rulerformat'
EXTERN char_u *p_rtp; /* 'runtimepath' */ EXTERN char_u *p_pp; // 'packpath'
EXTERN long p_sj; /* 'scrolljump' */ EXTERN char_u *p_rtp; // 'runtimepath'
EXTERN long p_so; /* 'scrolloff' */ EXTERN long p_sj; // 'scrolljump'
EXTERN char_u *p_sbo; /* 'scrollopt' */ EXTERN long p_so; // 'scrolloff'
EXTERN char_u *p_sections; /* 'sections' */ EXTERN char_u *p_sbo; // 'scrollopt'
EXTERN int p_secure; /* 'secure' */ EXTERN char_u *p_sections; // 'sections'
EXTERN char_u *p_sel; /* 'selection' */ EXTERN int p_secure; // 'secure'
EXTERN char_u *p_slm; /* 'selectmode' */ EXTERN char_u *p_sel; // 'selection'
EXTERN char_u *p_ssop; /* 'sessionoptions' */ EXTERN char_u *p_slm; // 'selectmode'
EXTERN char_u *p_ssop; // 'sessionoptions'
EXTERN unsigned ssop_flags; EXTERN unsigned ssop_flags;
# ifdef IN_OPTION_C # ifdef IN_OPTION_C
/* Also used for 'viewoptions'! */ /* Also used for 'viewoptions'! */

View File

@ -1639,6 +1639,16 @@ return {
varname='p_opfunc', varname='p_opfunc',
defaults={if_true={vi=""}} defaults={if_true={vi=""}}
}, },
{
full_name='packpath', abbreviation='pp',
type='string', list='onecomma', scope={'global'},
deny_duplicates=true,
secure=true,
vi_def=true,
expand=true,
varname='p_pp',
defaults={if_true={vi=''}}
},
{ {
full_name='paragraphs', abbreviation='para', full_name='paragraphs', abbreviation='para',
type='string', scope={'global'}, type='string', scope={'global'},

View File

@ -2317,16 +2317,14 @@ static void spell_load_lang(char_u *lang)
for (round = 1; round <= 2; ++round) { for (round = 1; round <= 2; ++round) {
// Find the first spell file for "lang" in 'runtimepath' and load it. // Find the first spell file for "lang" in 'runtimepath' and load it.
vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5, vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
"spell/%s.%s.spl", "spell/%s.%s.spl", lang, spell_enc());
lang, spell_enc()); r = do_in_runtimepath(fname_enc, 0, spell_load_cb, &sl);
r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
if (r == FAIL && *sl.sl_lang != NUL) { if (r == FAIL && *sl.sl_lang != NUL) {
// Try loading the ASCII version. // Try loading the ASCII version.
vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5, vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
"spell/%s.ascii.spl", "spell/%s.ascii.spl", lang);
lang); r = do_in_runtimepath(fname_enc, 0, spell_load_cb, &sl);
r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
if (r == FAIL && *sl.sl_lang != NUL && round == 1 if (r == FAIL && *sl.sl_lang != NUL && round == 1
&& apply_autocmds(EVENT_SPELLFILEMISSING, lang, && apply_autocmds(EVENT_SPELLFILEMISSING, lang,
@ -2354,7 +2352,7 @@ static void spell_load_lang(char_u *lang)
} else if (sl.sl_slang != NULL) { } else if (sl.sl_slang != NULL) {
// At least one file was loaded, now load ALL the additions. // At least one file was loaded, now load ALL the additions.
STRCPY(fname_enc + STRLEN(fname_enc) - 3, "add.spl"); STRCPY(fname_enc + STRLEN(fname_enc) - 3, "add.spl");
do_in_runtimepath(fname_enc, TRUE, spell_load_cb, &sl); do_in_runtimepath(fname_enc, DIP_ALL, spell_load_cb, &sl);
} }
} }

View File

@ -4207,9 +4207,10 @@ static void syn_cmd_include(exarg_T *eap, int syncing)
current_syn_inc_tag = ++running_syn_inc_tag; current_syn_inc_tag = ++running_syn_inc_tag;
prev_toplvl_grp = curwin->w_s->b_syn_topgrp; prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
curwin->w_s->b_syn_topgrp = sgl_id; curwin->w_s->b_syn_topgrp = sgl_id;
if (source ? do_source(eap->arg, FALSE, DOSO_NONE) == FAIL if (source ? do_source(eap->arg, false, DOSO_NONE) == FAIL
: source_runtime(eap->arg, TRUE) == FAIL) : source_runtime(eap->arg, DIP_ALL) == FAIL) {
EMSG2(_(e_notopen), eap->arg); EMSG2(_(e_notopen), eap->arg);
}
curwin->w_s->b_syn_topgrp = prev_toplvl_grp; curwin->w_s->b_syn_topgrp = prev_toplvl_grp;
current_syn_inc_tag = prev_syn_inc_tag; current_syn_inc_tag = prev_syn_inc_tag;
} }
@ -6023,12 +6024,12 @@ init_highlight (
if (get_var_value((char_u *)"g:syntax_on") != NULL) { if (get_var_value((char_u *)"g:syntax_on") != NULL) {
static int recursive = 0; static int recursive = 0;
if (recursive >= 5) if (recursive >= 5) {
EMSG(_("E679: recursive loop loading syncolor.vim")); EMSG(_("E679: recursive loop loading syncolor.vim"));
else { } else {
++recursive; recursive++;
(void)source_runtime((char_u *)"syntax/syncolor.vim", TRUE); (void)source_runtime((char_u *)"syntax/syncolor.vim", DIP_ALL);
--recursive; recursive--;
} }
} }
} }
@ -6041,22 +6042,24 @@ int load_colors(char_u *name)
{ {
char_u *buf; char_u *buf;
int retval = FAIL; int retval = FAIL;
static int recursive = FALSE; static int recursive = false;
/* When being called recursively, this is probably because setting // When being called recursively, this is probably because setting
* 'background' caused the highlighting to be reloaded. This means it is // 'background' caused the highlighting to be reloaded. This means it is
* working, thus we should return OK. */ // working, thus we should return OK.
if (recursive) if (recursive) {
return OK; return OK;
}
recursive = TRUE; recursive = true;
buf = xmalloc(STRLEN(name) + 12); size_t buflen = STRLEN(name) + 12;
sprintf((char *)buf, "colors/%s.vim", name); buf = xmalloc(buflen);
retval = source_runtime(buf, FALSE); snprintf((char *)buf, buflen, "colors/%s.vim", name);
retval = source_runtime(buf, DIP_START + DIP_OPT);
xfree(buf); xfree(buf);
apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf); apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);
recursive = FALSE; recursive = false;
ui_refresh(); ui_refresh();
return retval; return retval;

View File

@ -2023,9 +2023,8 @@ get_tagfname (
if (first) { if (first) {
ga_clear_strings(&tag_fnames); ga_clear_strings(&tag_fnames);
ga_init(&tag_fnames, (int)sizeof(char_u *), 10); ga_init(&tag_fnames, (int)sizeof(char_u *), 10);
do_in_runtimepath((char_u *) do_in_runtimepath((char_u *)"doc/tags doc/tags-??", DIP_ALL,
"doc/tags doc/tags-??" found_tagfile_cb, NULL);
, TRUE, found_tagfile_cb, NULL);
} }
if (tnp->tn_hf_idx >= tag_fnames.ga_len) { if (tnp->tn_hf_idx >= tag_fnames.ga_len) {

View File

@ -75,7 +75,9 @@ static char *features[] = {
// clang-format off // clang-format off
static int included_patches[] = { static int included_patches[] = {
1973,
1960, 1960,
1840,
1832, 1832,
1831, 1831,
1809, 1809,
@ -87,9 +89,11 @@ static int included_patches[] = {
1753, 1753,
1728, 1728,
1716, 1716,
1712,
1695, 1695,
1654, 1654,
1652, 1652,
1649,
1643, 1643,
1641, 1641,
// 1624 NA // 1624 NA
@ -98,7 +102,7 @@ static int included_patches[] = {
// 1599 NA // 1599 NA
// 1598 NA // 1598 NA
// 1597 NA // 1597 NA
// 1596, 1596,
// 1595 NA // 1595 NA
// 1594 NA // 1594 NA
// 1593 NA // 1593 NA
@ -141,11 +145,11 @@ static int included_patches[] = {
// 1557, // 1557,
// 1556 NA // 1556 NA
// 1555 NA // 1555 NA
// 1554, 1554,
// 1553, 1553,
// 1552, 1552,
// 1551, 1551,
// 1550, 1550,
// 1549, // 1549,
// 1548, // 1548,
// 1547, // 1547,
@ -167,7 +171,7 @@ static int included_patches[] = {
// 1531 NA // 1531 NA
// 1530 NA // 1530 NA
// 1529 NA // 1529 NA
// 1528, 1528,
// 1527 NA // 1527 NA
// 1526 NA // 1526 NA
// 1525 NA // 1525 NA
@ -196,28 +200,28 @@ static int included_patches[] = {
// 1502 NA // 1502 NA
// 1501 NA // 1501 NA
1500, 1500,
// 1499, 1499,
// 1498 NA // 1498 NA
// 1497 NA // 1497 NA
// 1496 NA // 1496 NA
// 1495 NA // 1495 NA
// 1494, // 1494,
// 1493 NA // 1493 NA
// 1492, 1492,
// 1491, // 1491,
// 1490 NA // 1490 NA
// 1489 NA // 1489 NA
// 1488 NA // 1488 NA
// 1487 NA // 1487 NA
// 1486, 1486,
// 1485 NA // 1485 NA
// 1484 NA // 1484 NA
// 1483 NA // 1483 NA
// 1482 NA // 1482 NA
// 1481 NA // 1481 NA
// 1480, 1480,
// 1479, 1479,
// 1478, 1478,
// 1477, // 1477,
// 1476 NA // 1476 NA
// 1475 NA // 1475 NA
@ -299,7 +303,7 @@ static int included_patches[] = {
// 1399 NA // 1399 NA
// 1398 NA // 1398 NA
1397, 1397,
// 1396, 1396,
// 1395 NA // 1395 NA
1394, 1394,
// 1393 NA // 1393 NA
@ -307,11 +311,11 @@ static int included_patches[] = {
// 1391 NA // 1391 NA
// 1390 NA // 1390 NA
// 1389 NA // 1389 NA
// 1388, 1388,
// 1387 NA // 1387 NA
// 1386 NA // 1386 NA
// 1385 NA // 1385 NA
// 1384, 1384,
// 1383 NA // 1383 NA
// 1382 NA // 1382 NA
// 1381 NA // 1381 NA

View File

@ -174,6 +174,7 @@ enum {
EXPAND_USER, EXPAND_USER,
EXPAND_SYNTIME, EXPAND_SYNTIME,
EXPAND_USER_ADDR_TYPE, EXPAND_USER_ADDR_TYPE,
EXPAND_PACKADD,
}; };
@ -307,4 +308,12 @@ enum {
# define SET_NO_HLSEARCH(flag) no_hlsearch = (flag); set_vim_var_nr( \ # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag); set_vim_var_nr( \
VV_HLSEARCH, !no_hlsearch && p_hls) VV_HLSEARCH, !no_hlsearch && p_hls)
// Used for flags in do_in_path()
#define DIP_ALL 0x01 // all matches, not just the first one
#define DIP_DIR 0x02 // find directories instead of files
#define DIP_ERR 0x04 // give an error message when none found
#define DIP_START 0x08 // also use "start" directory in 'packpath'
#define DIP_OPT 0x10 // also use "opt" directory in 'packpath'
#define DIP_NORTP 0x20 // do not use 'runtimepath'
#endif /* NVIM_VIM_H */ #endif /* NVIM_VIM_H */

View File

@ -0,0 +1,350 @@
-- Tests for 'packpath' and :packadd
local helpers = require('test.functional.helpers')(after_each)
local clear, source, execute = helpers.clear, helpers.source, helpers.execute
local call, eq, nvim = helpers.call, helpers.eq, helpers.meths
local feed = helpers.feed
local function expected_empty()
eq({}, nvim.get_vvar('errors'))
end
describe('packadd', function()
before_each(function()
clear()
source([=[
func SetUp()
let s:topdir = expand('%:p:h') . '/Xdir'
exe 'set packpath=' . s:topdir
let s:plugdir = s:topdir . '/pack/mine/opt/mytest'
endfunc
func TearDown()
call delete(s:topdir, 'rf')
endfunc
func Test_packadd()
call mkdir(s:plugdir . '/plugin', 'p')
call mkdir(s:plugdir . '/ftdetect', 'p')
call mkdir(s:plugdir . '/after', 'p')
set rtp&
let rtp = &rtp
filetype on
exe 'split ' . s:plugdir . '/plugin/test.vim'
call setline(1, 'let g:plugin_works = 42')
wq
exe 'split ' . s:plugdir . '/ftdetect/test.vim'
call setline(1, 'let g:ftdetect_works = 17')
wq
packadd mytest
call assert_true(42, g:plugin_works)
call assert_true(17, g:ftdetect_works)
call assert_true(len(&rtp) > len(rtp))
call assert_true(&rtp =~ (s:plugdir . '\($\|,\)'))
call assert_true(&rtp =~ (s:plugdir . '/after$'))
" Check exception
call assert_fails("packadd directorynotfound", 'E919:')
call assert_fails("packadd", 'E471:')
endfunc
func Test_packadd_noload()
call mkdir(s:plugdir . '/plugin', 'p')
call mkdir(s:plugdir . '/syntax', 'p')
set rtp&
let rtp = &rtp
exe 'split ' . s:plugdir . '/plugin/test.vim'
call setline(1, 'let g:plugin_works = 42')
wq
let g:plugin_works = 0
packadd! mytest
call assert_true(len(&rtp) > len(rtp))
call assert_true(&rtp =~ (s:plugdir . '\($\|,\)'))
call assert_equal(0, g:plugin_works)
" check the path is not added twice
let new_rtp = &rtp
packadd! mytest
call assert_equal(new_rtp, &rtp)
endfunc
func Test_packloadall()
" plugin foo with an autoload directory
let fooplugindir = &packpath . '/pack/mine/start/foo/plugin'
call mkdir(fooplugindir, 'p')
call writefile(['let g:plugin_foo_number = 1234',
\ 'let g:plugin_foo_auto = bbb#value',
\ 'let g:plugin_extra_auto = extra#value'], fooplugindir . '/bar.vim')
let fooautodir = &packpath . '/pack/mine/start/foo/autoload'
call mkdir(fooautodir, 'p')
call writefile(['let bar#value = 77'], fooautodir . '/bar.vim')
" plugin aaa with an autoload directory
let aaaplugindir = &packpath . '/pack/mine/start/aaa/plugin'
call mkdir(aaaplugindir, 'p')
call writefile(['let g:plugin_aaa_number = 333',
\ 'let g:plugin_aaa_auto = bar#value'], aaaplugindir . '/bbb.vim')
let aaaautodir = &packpath . '/pack/mine/start/aaa/autoload'
call mkdir(aaaautodir, 'p')
call writefile(['let bbb#value = 55'], aaaautodir . '/bbb.vim')
" plugin extra with only an autoload directory
let extraautodir = &packpath . '/pack/mine/start/extra/autoload'
call mkdir(extraautodir, 'p')
call writefile(['let extra#value = 99'], extraautodir . '/extra.vim')
packloadall
call assert_equal(1234, g:plugin_foo_number)
call assert_equal(55, g:plugin_foo_auto)
call assert_equal(99, g:plugin_extra_auto)
call assert_equal(333, g:plugin_aaa_number)
call assert_equal(77, g:plugin_aaa_auto)
" only works once
call writefile(['let g:plugin_bar_number = 4321'],
\ fooplugindir . '/bar2.vim')
packloadall
call assert_false(exists('g:plugin_bar_number'))
" works when ! used
packloadall!
call assert_equal(4321, g:plugin_bar_number)
endfunc
func Test_helptags()
let docdir1 = &packpath . '/pack/mine/start/foo/doc'
let docdir2 = &packpath . '/pack/mine/start/bar/doc'
call mkdir(docdir1, 'p')
call mkdir(docdir2, 'p')
call writefile(['look here: *look-here*'], docdir1 . '/bar.txt')
call writefile(['look away: *look-away*'], docdir2 . '/foo.txt')
exe 'set rtp=' . &packpath . '/pack/mine/start/foo,' . &packpath . '/pack/mine/start/bar'
helptags ALL
let tags1 = readfile(docdir1 . '/tags')
call assert_true(tags1[0] =~ 'look-here')
let tags2 = readfile(docdir2 . '/tags')
call assert_true(tags2[0] =~ 'look-away')
endfunc
func Test_colorscheme()
let colordirrun = &packpath . '/runtime/colors'
let colordirstart = &packpath . '/pack/mine/start/foo/colors'
let colordiropt = &packpath . '/pack/mine/opt/bar/colors'
call mkdir(colordirrun, 'p')
call mkdir(colordirstart, 'p')
call mkdir(colordiropt, 'p')
call writefile(['let g:found_one = 1'], colordirrun . '/one.vim')
call writefile(['let g:found_two = 1'], colordirstart . '/two.vim')
call writefile(['let g:found_three = 1'], colordiropt . '/three.vim')
exe 'set rtp=' . &packpath . '/runtime'
colorscheme one
call assert_equal(1, g:found_one)
colorscheme two
call assert_equal(1, g:found_two)
colorscheme three
call assert_equal(1, g:found_three)
endfunc
func Test_runtime()
let rundir = &packpath . '/runtime/extra'
let startdir = &packpath . '/pack/mine/start/foo/extra'
let optdir = &packpath . '/pack/mine/opt/bar/extra'
call mkdir(rundir, 'p')
call mkdir(startdir, 'p')
call mkdir(optdir, 'p')
call writefile(['let g:sequence .= "run"'], rundir . '/bar.vim')
call writefile(['let g:sequence .= "start"'], startdir . '/bar.vim')
call writefile(['let g:sequence .= "foostart"'], startdir . '/foo.vim')
call writefile(['let g:sequence .= "opt"'], optdir . '/bar.vim')
call writefile(['let g:sequence .= "xxxopt"'], optdir . '/xxx.vim')
exe 'set rtp=' . &packpath . '/runtime'
let g:sequence = ''
runtime extra/bar.vim
call assert_equal('run', g:sequence)
let g:sequence = ''
runtime START extra/bar.vim
call assert_equal('start', g:sequence)
let g:sequence = ''
runtime OPT extra/bar.vim
call assert_equal('opt', g:sequence)
let g:sequence = ''
runtime PACK extra/bar.vim
call assert_equal('start', g:sequence)
let g:sequence = ''
runtime! PACK extra/bar.vim
call assert_equal('startopt', g:sequence)
let g:sequence = ''
runtime PACK extra/xxx.vim
call assert_equal('xxxopt', g:sequence)
let g:sequence = ''
runtime ALL extra/bar.vim
call assert_equal('run', g:sequence)
let g:sequence = ''
runtime ALL extra/foo.vim
call assert_equal('foostart', g:sequence)
let g:sequence = ''
runtime! ALL extra/xxx.vim
call assert_equal('xxxopt', g:sequence)
let g:sequence = ''
runtime! ALL extra/bar.vim
call assert_equal('runstartopt', g:sequence)
endfunc
]=])
call('SetUp')
end)
after_each(function()
call('TearDown')
end)
it('is working', function()
call('Test_packadd')
expected_empty()
end)
it('works with packadd!', function()
call('Test_packadd_noload')
expected_empty()
end)
it('works with :packloadall', function()
call('Test_packloadall')
expected_empty()
end)
it('works with helptags', function()
call('Test_helptags')
expected_empty()
end)
it('works with colorschemes', function()
call('Test_colorscheme')
expected_empty()
end)
it('works with :runtime [what]', function()
call('Test_runtime')
expected_empty()
end)
describe('command line completion', function()
local Screen = require('test.functional.ui.screen')
local screen
before_each(function()
screen = Screen.new(30, 5)
screen:attach()
screen:set_default_attr_ids({
[1] = {
foreground = Screen.colors.Black,
background = Screen.colors.Yellow,
},
[2] = {bold = true, reverse = true}
})
local NonText = Screen.colors.Blue
screen:set_default_attr_ignore({{}, {bold=true, foreground=NonText}})
execute([[let optdir1 = &packpath . '/pack/mine/opt']])
execute([[let optdir2 = &packpath . '/pack/candidate/opt']])
execute([[call mkdir(optdir1 . '/pluginA', 'p')]])
execute([[call mkdir(optdir1 . '/pluginC', 'p')]])
execute([[call mkdir(optdir2 . '/pluginB', 'p')]])
execute([[call mkdir(optdir2 . '/pluginC', 'p')]])
end)
it('works', function()
feed(':packadd <Tab>')
screen:expect([=[
|
~ |
~ |
{1:pluginA}{2: pluginB pluginC }|
:packadd pluginA^ |
]=])
feed('<Tab>')
screen:expect([=[
|
~ |
~ |
{2:pluginA }{1:pluginB}{2: pluginC }|
:packadd pluginB^ |
]=])
feed('<Tab>')
screen:expect([=[
|
~ |
~ |
{2:pluginA pluginB }{1:pluginC}{2: }|
:packadd pluginC^ |
]=])
feed('<Tab>')
screen:expect([=[
|
~ |
~ |
{2:pluginA pluginB pluginC }|
:packadd ^ |
]=])
end)
it('works for colorschemes', function()
source([[
let colordirrun = &packpath . '/runtime/colors'
let colordirstart = &packpath . '/pack/mine/start/foo/colors'
let colordiropt = &packpath . '/pack/mine/opt/bar/colors'
call mkdir(colordirrun, 'p')
call mkdir(colordirstart, 'p')
call mkdir(colordiropt, 'p')
call writefile(['let g:found_one = 1'], colordirrun . '/one.vim')
call writefile(['let g:found_two = 1'], colordirstart . '/two.vim')
call writefile(['let g:found_three = 1'], colordiropt . '/three.vim')
exe 'set rtp=' . &packpath . '/runtime']])
feed(':colorscheme <Tab>')
screen:expect([=[
|
~ |
~ |
{1:one}{2: three two }|
:colorscheme one^ |
]=])
feed('<Tab>')
screen:expect([=[
|
~ |
~ |
{2:one }{1:three}{2: two }|
:colorscheme three^ |
]=])
feed('<Tab>')
screen:expect([=[
|
~ |
~ |
{2:one three }{1:two}{2: }|
:colorscheme two^ |
]=])
feed('<Tab>')
screen:expect([=[
|
~ |
~ |
{2:one three two }|
:colorscheme ^ |
]=])
end)
end)
end)