1
0
forked from aniani/vim

patch 8.2.3384: cannot disable modeline for an individual file

Problem:    Cannot disable modeline for an individual file.
Solution:   Recognize "nomodeline" in a modeline. (Hu Jialun, closes #8798)
This commit is contained in:
Hu Jialun 2021-08-28 20:42:50 +02:00 committed by Bram Moolenaar
parent 9aecf79c45
commit 9dcd349ca8
4 changed files with 21 additions and 2 deletions

View File

@ -541,6 +541,15 @@ chance that a normal word like "lex:" is caught. There is one exception:
version 3.0). Using "ex:" at the start of the line will be ignored (this version 3.0). Using "ex:" at the start of the line will be ignored (this
could be short for "example:"). could be short for "example:").
If the modeline is disabled within a modeline, subsequent modelines will be
ignored. This is to allow turning off modeline on a per-file basis. This is
useful when a line looks like a modeline but isn't. For example, it would be
good to start a YAML file containing strings like "vim:" with
# vim: nomodeline ~
so as to avoid modeline misdetection. Following options on the same line
after modeline deactivation, if any, are still evaluated (but you would
normally not have any).
*modeline-local* *modeline-local*
The options are set like with ":setlocal": The new value only applies to the The options are set like with ":setlocal": The new value only applies to the
buffer and window that contain the file. Although it's possible to set global buffer and window that contain the file. Although it's possible to set global

View File

@ -5446,12 +5446,12 @@ do_modelines(int flags)
return; return;
++entered; ++entered;
for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count && lnum <= nmlines; for (lnum = 1; curbuf->b_p_ml && lnum <= curbuf->b_ml.ml_line_count && lnum <= nmlines;
++lnum) ++lnum)
if (chk_modeline(lnum, flags) == FAIL) if (chk_modeline(lnum, flags) == FAIL)
nmlines = 0; nmlines = 0;
for (lnum = curbuf->b_ml.ml_line_count; lnum > 0 && lnum > nmlines for (lnum = curbuf->b_ml.ml_line_count; curbuf->b_p_ml && lnum > 0 && lnum > nmlines
&& lnum > curbuf->b_ml.ml_line_count - nmlines; --lnum) && lnum > curbuf->b_ml.ml_line_count - nmlines; --lnum)
if (chk_modeline(lnum, flags) == FAIL) if (chk_modeline(lnum, flags) == FAIL)
nmlines = 0; nmlines = 0;

View File

@ -360,4 +360,12 @@ func Test_modeline_diff_buffer()
bw bw
endfunc endfunc
func Test_modeline_disable()
set modeline
call writefile(['vim: sw=2', 'vim: nomodeline', 'vim: sw=3'], 'Xmodeline_disable')
edit Xmodeline_disable
call assert_equal(2, &sw)
call delete('Xmodeline_disable')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -755,6 +755,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 */
/**/
3384,
/**/ /**/
3383, 3383,
/**/ /**/