0
0
mirror of https://github.com/vim/vim.git synced 2025-08-27 20:13:38 -04:00

patch 8.1.0553: it is not easy to edit a script that was sourced

Problem:    It is not easy to edit a script that was sourced.
Solution:   Add a count to ":scriptnames", so that ":script 40" edits the
            script with script ID 40.
This commit is contained in:
Bram Moolenaar 2018-11-30 22:48:32 +01:00
parent 01a060da74
commit 07dc18ffa4
7 changed files with 58 additions and 12 deletions

View File

@ -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 {not in Vi} {not available when compiled without the
|+eval| feature} |+eval| feature}
:scr[iptnames][!] {scriptId} *:script*
Edit script {scriptId}. Suggested name is ":script".
*:fini* *:finish* *E168* *:fini* *:finish* *E168*
:fini[sh] Stop sourcing a script. Can only be used in a Vim :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 script file. This is a quick way to skip the rest of

View File

@ -153,6 +153,7 @@ NEW_TESTS = \
test_reltime \ test_reltime \
test_retab \ test_retab \
test_ruby \ test_ruby \
test_scriptnames \
test_scroll_opt \ test_scroll_opt \
test_scrollbind \ test_scrollbind \
test_search \ test_search \

View File

@ -62,15 +62,15 @@
#define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */ #define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */
/* values for cmd_addr_type */ /* values for cmd_addr_type */
#define ADDR_LINES 0 #define ADDR_LINES 0 // buffer line numbers
#define ADDR_WINDOWS 1 #define ADDR_WINDOWS 1 // window number
#define ADDR_ARGUMENTS 2 #define ADDR_ARGUMENTS 2 // argument number
#define ADDR_LOADED_BUFFERS 3 #define ADDR_LOADED_BUFFERS 3 // buffer number of loaded buffer
#define ADDR_BUFFERS 4 #define ADDR_BUFFERS 4 // buffer number
#define ADDR_TABS 5 #define ADDR_TABS 5 // tab page number
#define ADDR_TABS_RELATIVE 6 /* Tab page that only relative */ #define ADDR_TABS_RELATIVE 6 // Tab page that only relative
#define ADDR_QUICKFIX 7 #define ADDR_QUICKFIX 7 // quickfix list entry number
#define ADDR_OTHER 99 #define ADDR_OTHER 99 // something else
#ifndef DO_DECLARE_EXCMD #ifndef DO_DECLARE_EXCMD
typedef struct exarg exarg_T; typedef struct exarg exarg_T;
@ -1260,8 +1260,8 @@ EX(CMD_sbrewind, "sbrewind", ex_brewind,
EDITCMD|TRLBAR, EDITCMD|TRLBAR,
ADDR_LINES), ADDR_LINES),
EX(CMD_scriptnames, "scriptnames", ex_scriptnames, EX(CMD_scriptnames, "scriptnames", ex_scriptnames,
TRLBAR|CMDWIN, BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN,
ADDR_LINES), ADDR_OTHER),
EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding,
WORD1|TRLBAR|CMDWIN, WORD1|TRLBAR|CMDWIN,
ADDR_LINES), ADDR_LINES),

View File

@ -4690,10 +4690,23 @@ theend:
* ":scriptnames" * ":scriptnames"
*/ */
void void
ex_scriptnames(exarg_T *eap UNUSED) ex_scriptnames(exarg_T *eap)
{ {
int i; 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) for (i = 1; i <= script_items.ga_len && !got_int; ++i)
if (SCRIPT_ITEM(i).sn_name != NULL) if (SCRIPT_ITEM(i).sn_name != NULL)
{ {

View File

@ -158,6 +158,7 @@ NEW_TESTS = test_arabic.res \
test_registers.res \ test_registers.res \
test_retab.res \ test_retab.res \
test_ruby.res \ test_ruby.res \
test_scriptnames.res \
test_scrollbind.res \ test_scrollbind.res \
test_search.res \ test_search.res \
test_shortpathname.res \ test_shortpathname.res \

View File

@ -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

View File

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