0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 7.4.1553

Problem:    ":runtime" does not use 'packpath'.
Solution:   Add "what" argument.
This commit is contained in:
Bram Moolenaar
2016-03-12 22:47:14 +01:00
parent 7f8989dd8a
commit 8dcf259d90
5 changed files with 114 additions and 11 deletions

View File

@@ -182,10 +182,12 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
{not in Vi}
*:ru* *:runtime*
:ru[ntime][!] {file} ..
:ru[ntime][!] [where] {file} ..
Read Ex commands from {file} in each directory given
by 'runtimepath'. There is no error for non-existing
files. Example: >
by 'runtimepath' and/or 'packpath'. There is no error
for non-existing files.
Example: >
:runtime syntax/c.vim
< There can be multiple {file} arguments, separated by
@@ -199,6 +201,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
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
matching files. Example: >
:runtime! plugin/*.vim
@@ -238,6 +249,16 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
Also see |pack-add|.
:packloadall[!] Load all packages in the "start" directories under
'packpath'. The directories found are added to
'runtimepath'.
This normally done 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.
See |packages|.
:scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167*
Specify the character encoding used in the script.
@@ -461,8 +482,13 @@ Note that the files under "pack/foo/opt" or not loaded automatically, only the
ones under "pack/foo/start". See |pack-add| below for how the "opt" directory
is used.
Loading packages will not happen if loading plugins is disabled, see
|load-plugins|.
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 ~

View File

@@ -2901,12 +2901,38 @@ ex_compiler(exarg_T *eap)
#endif
/*
* ":runtime {name}"
* ":runtime [what] {name}"
*/
void
ex_runtime(exarg_T *eap)
{
source_runtime(eap->arg, eap->forceit ? DIP_ALL : 0);
char_u *arg = eap->arg;
char_u *p = skiptowhite(arg);
int len = (int)(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);
}
static void
@@ -3067,15 +3093,16 @@ do_in_runtimepath(
void (*callback)(char_u *fname, void *ck),
void *cookie)
{
int done;
int done = FAIL;
char_u *s;
int len;
char *start_dir = "pack/*/start/*/%s";
char *opt_dir = "pack/*/opt/*/%s";
if ((flags & DIP_NORTP) == 0)
done = do_in_path(p_rtp, name, flags, callback, cookie);
if (done == FAIL && (flags & DIP_START))
if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START))
{
len = STRLEN(start_dir) + STRLEN(name);
s = alloc(len);
@@ -3086,7 +3113,7 @@ do_in_runtimepath(
vim_free(s);
}
if (done == FAIL && (flags & DIP_OPT))
if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT))
{
len = STRLEN(opt_dir) + STRLEN(name);
s = alloc(len);

View File

@@ -134,3 +134,50 @@ func Test_colorscheme()
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

View File

@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1553,
/**/
1552,
/**/

View File

@@ -2294,5 +2294,6 @@ int vim_main2(int argc, char **argv);
#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 /* VIM__H */