mirror of
https://github.com/neovim/neovim.git
synced 2025-09-10 21:38:19 +00:00
vim-patch:8.1.0553: it is not easy to edit a script that was sourced (#9298)
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.
07dc18ffa4
This commit is contained in:

committed by
Justin M. Keyes

parent
0ce880083d
commit
a9e368a705
@@ -305,6 +305,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
|||||||
first sourced. The number is used for the script ID
|
first sourced. The number is used for the script ID
|
||||||
|<SID>|.
|
|<SID>|.
|
||||||
|
|
||||||
|
: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
|
||||||
|
@@ -28,15 +28,15 @@ local FILES = bit.bor(XFILE, EXTRA)
|
|||||||
local WORD1 = bit.bor(EXTRA, NOSPC)
|
local WORD1 = bit.bor(EXTRA, NOSPC)
|
||||||
local FILE1 = bit.bor(FILES, NOSPC)
|
local FILE1 = bit.bor(FILES, NOSPC)
|
||||||
|
|
||||||
local ADDR_LINES = 0
|
local ADDR_LINES = 0 -- buffer line numbers
|
||||||
local ADDR_WINDOWS = 1
|
local ADDR_WINDOWS = 1 -- window number
|
||||||
local ADDR_ARGUMENTS = 2
|
local ADDR_ARGUMENTS = 2 -- argument number
|
||||||
local ADDR_LOADED_BUFFERS = 3
|
local ADDR_LOADED_BUFFERS = 3 -- buffer number of loaded buffer
|
||||||
local ADDR_BUFFERS = 4
|
local ADDR_BUFFERS = 4 -- buffer number
|
||||||
local ADDR_TABS = 5
|
local ADDR_TABS = 5 -- tab page number
|
||||||
local ADDR_TABS_RELATIVE = 6
|
local ADDR_TABS_RELATIVE = 6 -- Tab page that only relative
|
||||||
local ADDR_QUICKFIX = 7
|
local ADDR_QUICKFIX = 7 -- quickfix list entry number
|
||||||
local ADDR_OTHER = 99
|
local ADDR_OTHER = 99 -- something else
|
||||||
|
|
||||||
-- The following table is described in ex_cmds_defs.h file.
|
-- The following table is described in ex_cmds_defs.h file.
|
||||||
return {
|
return {
|
||||||
@@ -2326,8 +2326,8 @@ return {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
command='scriptnames',
|
command='scriptnames',
|
||||||
flags=bit.bor(TRLBAR, CMDWIN),
|
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, TRLBAR, CMDWIN),
|
||||||
addr_type=ADDR_LINES,
|
addr_type=ADDR_OTHER,
|
||||||
func='ex_scriptnames',
|
func='ex_scriptnames',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@@ -3069,6 +3069,17 @@ theend:
|
|||||||
/// ":scriptnames"
|
/// ":scriptnames"
|
||||||
void ex_scriptnames(exarg_T *eap)
|
void ex_scriptnames(exarg_T *eap)
|
||||||
{
|
{
|
||||||
|
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 (int i = 1; i <= script_items.ga_len && !got_int; i++) {
|
for (int i = 1; i <= script_items.ga_len && !got_int; i++) {
|
||||||
if (SCRIPT_ITEM(i).sn_name != NULL) {
|
if (SCRIPT_ITEM(i).sn_name != NULL) {
|
||||||
home_replace(NULL, SCRIPT_ITEM(i).sn_name,
|
home_replace(NULL, SCRIPT_ITEM(i).sn_name,
|
||||||
|
26
src/nvim/testdir/test_scriptnames.vim
Normal file
26
src/nvim/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
|
Reference in New Issue
Block a user