diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-12 22:47:14 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-12 22:47:14 +0100 |
commit | 8dcf259d904cfb965d31841dc74a5cfaf5a351d9 (patch) | |
tree | 39bcccbdf9fed9c4976e32bda07f3e507717ee39 | |
parent | 7f8989dd8a627af2185df381195351a913f3777f (diff) | |
download | vim-git-8dcf259d904cfb965d31841dc74a5cfaf5a351d9.tar.gz |
patch 7.4.1553v7.4.1553
Problem: ":runtime" does not use 'packpath'.
Solution: Add "what" argument.
-rw-r--r-- | runtime/doc/repeat.txt | 36 | ||||
-rw-r--r-- | src/ex_cmds2.c | 39 | ||||
-rw-r--r-- | src/testdir/test_packadd.vim | 47 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 1 |
5 files changed, 114 insertions, 11 deletions
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt index 28a17ae11..9399e1f23 100644 --- a/runtime/doc/repeat.txt +++ b/runtime/doc/repeat.txt @@ -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 ~ diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index b99d0020e..d7bf60901 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -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"; - done = do_in_path(p_rtp, name, flags, callback, cookie); + 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); diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim index 3ca8375fc..52e6a33ca 100644 --- a/src/testdir/test_packadd.vim +++ b/src/testdir/test_packadd.vim @@ -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 diff --git a/src/version.c b/src/version.c index d77d4805b..ed6e4b2ea 100644 --- a/src/version.c +++ b/src/version.c @@ -744,6 +744,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1553, +/**/ 1552, /**/ 1551, @@ -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 */ |