diff options
-rw-r--r-- | runtime/doc/repeat.txt | 3 | ||||
-rw-r--r-- | src/Make_all.mak | 1 | ||||
-rw-r--r-- | src/ex_cmds.h | 22 | ||||
-rw-r--r-- | src/ex_cmds2.c | 15 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_scriptnames.vim | 26 | ||||
-rw-r--r-- | src/version.c | 2 |
7 files changed, 58 insertions, 12 deletions
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt index 8538d0c2f2..6e652202b8 100644 --- a/runtime/doc/repeat.txt +++ b/runtime/doc/repeat.txt @@ -334,6 +334,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. {not in Vi} {not available when compiled without the |+eval| feature} +:scr[iptnames][!] {scriptId} *:script* + Edit script {scriptId}. Suggested name is ":script". + *:fini* *:finish* *E168* :fini[sh] Stop sourcing a script. Can only be used in a Vim script file. This is a quick way to skip the rest of diff --git a/src/Make_all.mak b/src/Make_all.mak index da3a62ca8b..466f17e9e2 100644 --- a/src/Make_all.mak +++ b/src/Make_all.mak @@ -153,6 +153,7 @@ NEW_TESTS = \ test_reltime \ test_retab \ test_ruby \ + test_scriptnames \ test_scroll_opt \ test_scrollbind \ test_search \ diff --git a/src/ex_cmds.h b/src/ex_cmds.h index c5e0bf4495..335871a01b 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -62,15 +62,15 @@ #define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */ /* values for cmd_addr_type */ -#define ADDR_LINES 0 -#define ADDR_WINDOWS 1 -#define ADDR_ARGUMENTS 2 -#define ADDR_LOADED_BUFFERS 3 -#define ADDR_BUFFERS 4 -#define ADDR_TABS 5 -#define ADDR_TABS_RELATIVE 6 /* Tab page that only relative */ -#define ADDR_QUICKFIX 7 -#define ADDR_OTHER 99 +#define ADDR_LINES 0 // buffer line numbers +#define ADDR_WINDOWS 1 // window number +#define ADDR_ARGUMENTS 2 // argument number +#define ADDR_LOADED_BUFFERS 3 // buffer number of loaded buffer +#define ADDR_BUFFERS 4 // buffer number +#define ADDR_TABS 5 // tab page number +#define ADDR_TABS_RELATIVE 6 // Tab page that only relative +#define ADDR_QUICKFIX 7 // quickfix list entry number +#define ADDR_OTHER 99 // something else #ifndef DO_DECLARE_EXCMD typedef struct exarg exarg_T; @@ -1260,8 +1260,8 @@ EX(CMD_sbrewind, "sbrewind", ex_brewind, EDITCMD|TRLBAR, ADDR_LINES), EX(CMD_scriptnames, "scriptnames", ex_scriptnames, - TRLBAR|CMDWIN, - ADDR_LINES), + BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN, + ADDR_OTHER), EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, WORD1|TRLBAR|CMDWIN, ADDR_LINES), diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index d6b6f5bf89..c3f26b64c5 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -4690,10 +4690,23 @@ theend: * ":scriptnames" */ void -ex_scriptnames(exarg_T *eap UNUSED) +ex_scriptnames(exarg_T *eap) { int i; + if (eap->addr_count > 0) + { + // :script {scriptId}: edit the script + if (eap->line2 < 1 || eap->line2 > script_items.ga_len) + EMSG(_(e_invarg)); + else + { + eap->arg = SCRIPT_ITEM(eap->line2).sn_name; + do_exedit(eap, NULL); + } + return; + } + for (i = 1; i <= script_items.ga_len && !got_int; ++i) if (SCRIPT_ITEM(i).sn_name != NULL) { diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 45f45d7fd8..5b85156737 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -158,6 +158,7 @@ NEW_TESTS = test_arabic.res \ test_registers.res \ test_retab.res \ test_ruby.res \ + test_scriptnames.res \ test_scrollbind.res \ test_search.res \ test_shortpathname.res \ diff --git a/src/testdir/test_scriptnames.vim b/src/testdir/test_scriptnames.vim new file mode 100644 index 0000000000..fc6c910bfa --- /dev/null +++ b/src/testdir/test_scriptnames.vim @@ -0,0 +1,26 @@ +" Test for :scriptnames + +func Test_scriptnames() + call writefile(['let did_load_script = 123'], 'Xscripting') + source Xscripting + call assert_equal(123, g:did_load_script) + + let scripts = split(execute('scriptnames'), "\n") + let last = scripts[-1] + call assert_match('\<Xscripting\>', last) + let lastnr = substitute(last, '\D*\(\d\+\):.*', '\1', '') + exe 'script ' . lastnr + call assert_equal('Xscripting', expand('%:t')) + + call assert_fails('script ' . (lastnr + 1), 'E474:') + call assert_fails('script 0', 'E939:') + + new + call setline(1, 'nothing') + call assert_fails('script ' . lastnr, 'E37:') + exe 'script! ' . lastnr + call assert_equal('Xscripting', expand('%:t')) + + bwipe + call delete('Xscripting') +endfunc diff --git a/src/version.c b/src/version.c index 1fc35edd73..5f61775ac0 100644 --- a/src/version.c +++ b/src/version.c @@ -793,6 +793,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 553, +/**/ 552, /**/ 551, |