mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	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:
		
				
					committed by
					
						 Bram Moolenaar
						Bram Moolenaar
					
				
			
			
				
	
			
			
			
						parent
						
							9aecf79c45
						
					
				
				
					commit
					9dcd349ca8
				
			| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -755,6 +755,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     3384, | ||||
| /**/ | ||||
|     3383, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user