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:
parent
01a060da74
commit
07dc18ffa4
@ -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
|
||||||
|
@ -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 \
|
||||||
|
@ -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),
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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 \
|
||||||
|
26
src/testdir/test_scriptnames.vim
Normal file
26
src/testdir/test_scriptnames.vim
Normal 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
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user