mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.0690: line number of option set by modeline is wrong (#20228)
Problem: Line number of option set by modeline is wrong.
Solution: Do not double the line number. (Ozaki Kiichi, closes vim/vim#6035)
5125874951
This commit is contained in:
parent
72e1041429
commit
18139a69bc
@ -1891,15 +1891,16 @@ void set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx)
|
|||||||
int both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
|
int both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
|
||||||
int indir = (int)options[opt_idx].indir;
|
int indir = (int)options[opt_idx].indir;
|
||||||
nlua_set_sctx(&script_ctx);
|
nlua_set_sctx(&script_ctx);
|
||||||
const LastSet last_set = {
|
LastSet last_set = {
|
||||||
.script_ctx = {
|
.script_ctx = script_ctx,
|
||||||
script_ctx.sc_sid,
|
.channel_id = current_channel_id,
|
||||||
script_ctx.sc_seq,
|
|
||||||
script_ctx.sc_lnum + SOURCING_LNUM
|
|
||||||
},
|
|
||||||
current_channel_id
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Modeline already has the line number set.
|
||||||
|
if (!(opt_flags & OPT_MODELINE)) {
|
||||||
|
last_set.script_ctx.sc_lnum += SOURCING_LNUM;
|
||||||
|
}
|
||||||
|
|
||||||
// Remember where the option was set. For local options need to do that
|
// Remember where the option was set. For local options need to do that
|
||||||
// in the buffer or window structure.
|
// in the buffer or window structure.
|
||||||
if (both || (opt_flags & OPT_GLOBAL) || (indir & (PV_BUF|PV_WIN)) == 0) {
|
if (both || (opt_flags & OPT_GLOBAL) || (indir & (PV_BUF|PV_WIN)) == 0) {
|
||||||
|
@ -281,6 +281,62 @@ func Test_modeline_fails_modelineexpr()
|
|||||||
call s:modeline_fails('titlestring', 'titlestring=Something()', 'E992:')
|
call s:modeline_fails('titlestring', 'titlestring=Something()', 'E992:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_modeline_setoption_verbose()
|
||||||
|
let modeline = &modeline
|
||||||
|
set modeline
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
1 vim:ts=2
|
||||||
|
2 two
|
||||||
|
3 three
|
||||||
|
4 four
|
||||||
|
5 five
|
||||||
|
6 six
|
||||||
|
7 seven
|
||||||
|
8 eight
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xmodeline')
|
||||||
|
edit Xmodeline
|
||||||
|
let info = split(execute('verbose set tabstop?'), "\n")
|
||||||
|
call assert_match('^\s*Last set from modeline line 1$', info[-1])
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
1 one
|
||||||
|
2 two
|
||||||
|
3 three
|
||||||
|
4 vim:ts=4
|
||||||
|
5 five
|
||||||
|
6 six
|
||||||
|
7 seven
|
||||||
|
8 eight
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xmodeline')
|
||||||
|
edit Xmodeline
|
||||||
|
let info = split(execute('verbose set tabstop?'), "\n")
|
||||||
|
call assert_match('^\s*Last set from modeline line 4$', info[-1])
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
1 one
|
||||||
|
2 two
|
||||||
|
3 three
|
||||||
|
4 four
|
||||||
|
5 five
|
||||||
|
6 six
|
||||||
|
7 seven
|
||||||
|
8 vim:ts=8
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xmodeline')
|
||||||
|
edit Xmodeline
|
||||||
|
let info = split(execute('verbose set tabstop?'), "\n")
|
||||||
|
call assert_match('^\s*Last set from modeline line 8$', info[-1])
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
let &modeline = modeline
|
||||||
|
call delete('Xmodeline')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_modeline_disable()
|
func Test_modeline_disable()
|
||||||
set modeline
|
set modeline
|
||||||
call writefile(['vim: sw=2', 'vim: nomodeline', 'vim: sw=3'], 'Xmodeline_disable')
|
call writefile(['vim: sw=2', 'vim: nomodeline', 'vim: sw=3'], 'Xmodeline_disable')
|
||||||
|
Loading…
Reference in New Issue
Block a user