summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/repeat.txt3
-rw-r--r--src/Make_all.mak1
-rw-r--r--src/ex_cmds.h22
-rw-r--r--src/ex_cmds2.c15
-rw-r--r--src/testdir/Make_all.mak1
-rw-r--r--src/testdir/test_scriptnames.vim26
-rw-r--r--src/version.c2
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,