mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.2.1347: cannot easily get the script ID
Problem: Cannot easily get the script ID. Solution: Support expand('<SID>').
This commit is contained in:
@@ -1167,6 +1167,10 @@ When executing an autocommand or a user command, it will run in the context of
|
|||||||
the script it was defined in. This makes it possible that the command calls a
|
the script it was defined in. This makes it possible that the command calls a
|
||||||
local function or uses a local mapping.
|
local function or uses a local mapping.
|
||||||
|
|
||||||
|
In case the value is used in a context where <SID> cannot be correctly
|
||||||
|
expanded, use the expand() function: >
|
||||||
|
let &includexpr = expand('<SID>') .. 'My_includeexpr()'
|
||||||
|
|
||||||
Otherwise, using "<SID>" outside of a script context is an error.
|
Otherwise, using "<SID>" outside of a script context is an error.
|
||||||
|
|
||||||
If you need to get the script number to use in a complicated script, you can
|
If you need to get the script number to use in a complicated script, you can
|
||||||
|
@@ -8302,9 +8302,11 @@ find_cmdline_var(char_u *src, int *usedlen)
|
|||||||
#define SPEC_AMATCH (SPEC_ABUF + 1)
|
#define SPEC_AMATCH (SPEC_ABUF + 1)
|
||||||
"<sflnum>", // script file line number
|
"<sflnum>", // script file line number
|
||||||
#define SPEC_SFLNUM (SPEC_AMATCH + 1)
|
#define SPEC_SFLNUM (SPEC_AMATCH + 1)
|
||||||
|
"<SID>", // script ID: <SNR>123_
|
||||||
|
#define SPEC_SID (SPEC_SFLNUM + 1)
|
||||||
#ifdef FEAT_CLIENTSERVER
|
#ifdef FEAT_CLIENTSERVER
|
||||||
"<client>"
|
"<client>"
|
||||||
# define SPEC_CLIENT (SPEC_SFLNUM + 1)
|
# define SPEC_CLIENT (SPEC_SID + 1)
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -8581,6 +8583,16 @@ eval_vars(
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
case SPEC_SID:
|
||||||
|
if (current_sctx.sc_sid <= 0)
|
||||||
|
{
|
||||||
|
*errormsg = _(e_usingsid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
sprintf((char *)strbuf, "<SNR>%d_", current_sctx.sc_sid);
|
||||||
|
result = strbuf;
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef FEAT_CLIENTSERVER
|
#ifdef FEAT_CLIENTSERVER
|
||||||
case SPEC_CLIENT: // Source of last submitted input
|
case SPEC_CLIENT: // Source of last submitted input
|
||||||
sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
|
sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
" Tests for expand()
|
" Tests for expand()
|
||||||
|
|
||||||
|
source shared.vim
|
||||||
|
|
||||||
let s:sfile = expand('<sfile>')
|
let s:sfile = expand('<sfile>')
|
||||||
let s:slnum = str2nr(expand('<slnum>'))
|
let s:slnum = str2nr(expand('<slnum>'))
|
||||||
let s:sflnum = str2nr(expand('<sflnum>'))
|
let s:sflnum = str2nr(expand('<sflnum>'))
|
||||||
@@ -18,20 +20,20 @@ endfunc
|
|||||||
|
|
||||||
" This test depends on the location in the test file, put it first.
|
" This test depends on the location in the test file, put it first.
|
||||||
func Test_expand_sflnum()
|
func Test_expand_sflnum()
|
||||||
call assert_equal(5, s:sflnum)
|
call assert_equal(7, s:sflnum)
|
||||||
call assert_equal(22, str2nr(expand('<sflnum>')))
|
call assert_equal(24, str2nr(expand('<sflnum>')))
|
||||||
|
|
||||||
" Line-continuation
|
" Line-continuation
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\ 25,
|
\ 27,
|
||||||
\ str2nr(expand('<sflnum>')))
|
\ str2nr(expand('<sflnum>')))
|
||||||
|
|
||||||
" Call in script-local function
|
" Call in script-local function
|
||||||
call assert_equal(16, s:expand_sflnum())
|
call assert_equal(18, s:expand_sflnum())
|
||||||
|
|
||||||
" Call in command
|
" Call in command
|
||||||
command Flnum echo expand('<sflnum>')
|
command Flnum echo expand('<sflnum>')
|
||||||
call assert_equal(34, str2nr(trim(execute('Flnum'))))
|
call assert_equal(36, str2nr(trim(execute('Flnum'))))
|
||||||
delcommand Flnum
|
delcommand Flnum
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@@ -60,7 +62,7 @@ func Test_expand_sfile_and_stack()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_expand_slnum()
|
func Test_expand_slnum()
|
||||||
call assert_equal(4, s:slnum)
|
call assert_equal(6, s:slnum)
|
||||||
call assert_equal(2, str2nr(expand('<slnum>')))
|
call assert_equal(2, str2nr(expand('<slnum>')))
|
||||||
|
|
||||||
" Line-continuation
|
" Line-continuation
|
||||||
@@ -86,6 +88,17 @@ func Test_expand()
|
|||||||
quit
|
quit
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func s:sid_test()
|
||||||
|
return 'works'
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_expand_SID()
|
||||||
|
let sid = expand('<SID>')
|
||||||
|
execute 'let g:sid_result = ' .. sid .. 'sid_test()'
|
||||||
|
call assert_equal('works', g:sid_result)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" Test for 'wildignore' with expand()
|
" Test for 'wildignore' with expand()
|
||||||
func Test_expand_wildignore()
|
func Test_expand_wildignore()
|
||||||
set wildignore=*.vim
|
set wildignore=*.vim
|
||||||
|
@@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1347,
|
||||||
/**/
|
/**/
|
||||||
1346,
|
1346,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user