diff options
author | Hu Jialun <hujialun@comp.nus.edu.sg> | 2021-08-28 20:42:50 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-08-28 20:42:50 +0200 |
commit | 9dcd349ca85e1df1abd1cbf1c29c0f1574b70bf8 (patch) | |
tree | a3b5f55b7ab7d58e173349c318906c77583f7691 | |
parent | 9aecf79c45da5593e4d8c0de1b2d212edc4765ce (diff) |
patch 8.2.3384: cannot disable modeline for an individual filev8.2.3384
Problem: Cannot disable modeline for an individual file.
Solution: Recognize "nomodeline" in a modeline. (Hu Jialun, closes #8798)
-rw-r--r-- | runtime/doc/options.txt | 9 | ||||
-rw-r--r-- | src/buffer.c | 4 | ||||
-rw-r--r-- | src/testdir/test_modeline.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 21 insertions, 2 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index ebb408dd49..a181ecb0d8 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -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 diff --git a/src/buffer.c b/src/buffer.c index bc3378a995..507eb01267 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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; diff --git a/src/testdir/test_modeline.vim b/src/testdir/test_modeline.vim index 19c99b55ea..f28ad3e84f 100644 --- a/src/testdir/test_modeline.vim +++ b/src/testdir/test_modeline.vim @@ -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 diff --git a/src/version.c b/src/version.c index a9c5b4cdfc..d50d09829d 100644 --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3384, +/**/ 3383, /**/ 3382, |