Skip to content

Commit

Permalink
patch 8.2.3384: cannot disable modeline for an individual file
Browse files Browse the repository at this point in the history
Problem:    Cannot disable modeline for an individual file.
Solution:   Recognize "nomodeline" in a modeline. (Hu Jialun, closes #8798)
  • Loading branch information
SuibianP authored and brammool committed Aug 28, 2021
1 parent 9aecf79 commit 9dcd349
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 2 deletions.
9 changes: 9 additions & 0 deletions runtime/doc/options.txt
Expand Up @@ -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
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*
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
Expand Down
4 changes: 2 additions & 2 deletions src/buffer.c
Expand Up @@ -5446,12 +5446,12 @@ do_modelines(int flags)
return;

++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)
if (chk_modeline(lnum, flags) == FAIL)
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)
if (chk_modeline(lnum, flags) == FAIL)
nmlines = 0;
Expand Down
8 changes: 8 additions & 0 deletions src/testdir/test_modeline.vim
Expand Up @@ -360,4 +360,12 @@ func Test_modeline_diff_buffer()
bw
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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -755,6 +755,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3384,
/**/
3383,
/**/
Expand Down

0 comments on commit 9dcd349

Please sign in to comment.