mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge pull request #36258 from janlazo/vim-9.1.0918
vim-patch:9.0.0106,9.1.{359,918}
			
			
This commit is contained in:
		| @@ -1993,6 +1993,10 @@ static char *do_source_buffer_init(source_cookie_T *sp, const exarg_T *eap, bool | ||||
|     return NULL; | ||||
|   } | ||||
|  | ||||
|   char *fname; | ||||
|   if (curbuf->b_ffname != NULL) { | ||||
|     fname = xstrdup(curbuf->b_ffname); | ||||
|   } else { | ||||
|     if (ex_lua) { | ||||
|       // Use ":{range}lua buffer=<num>" as the script name | ||||
|       snprintf(IObuff, IOSIZE, ":{range}lua buffer=%d", curbuf->b_fnum); | ||||
| @@ -2000,7 +2004,8 @@ static char *do_source_buffer_init(source_cookie_T *sp, const exarg_T *eap, bool | ||||
|       // Use ":source buffer=<num>" as the script name | ||||
|       snprintf(IObuff, IOSIZE, ":source buffer=%d", curbuf->b_fnum); | ||||
|     } | ||||
|   char *fname = xstrdup(IObuff); | ||||
|     fname = xstrdup(IObuff); | ||||
|   } | ||||
|  | ||||
|   ga_init(&sp->buflines, sizeof(char *), 100); | ||||
|   // Copy the lines from the buffer into a grow array | ||||
|   | ||||
| @@ -247,12 +247,15 @@ describe(':source', function() | ||||
|         feed('dd') | ||||
|  | ||||
|         feed_command(':source') | ||||
|  | ||||
|         local filepath = fn.expand('%:p') | ||||
|         if filepath == '' then | ||||
|           filepath = ':source buffer=1' | ||||
|         end | ||||
|         eq(12, eval('g:c')) | ||||
|         eq('  \\ 1\n "\\ 2', exec_lua('return _G.a')) | ||||
|         eq(':source buffer=1', api.nvim_get_var('sfile_value')) | ||||
|         eq(':source buffer=1', api.nvim_get_var('stack_value')) | ||||
|         eq(':source buffer=1', api.nvim_get_var('script_value')) | ||||
|         eq(filepath, api.nvim_get_var('sfile_value')) | ||||
|         eq(filepath, api.nvim_get_var('stack_value')) | ||||
|         eq(filepath, api.nvim_get_var('script_value')) | ||||
|       end) | ||||
|     end | ||||
|  | ||||
|   | ||||
							
								
								
									
										22
									
								
								test/functional/legacy/029_fuzzy_spec.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								test/functional/legacy/029_fuzzy_spec.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| -- Test for buffer name completion when 'wildoptions' contains "fuzzy" | ||||
| -- (Confirm that Vim does not crash) | ||||
| local n = require('test.functional.testnvim')() | ||||
|  | ||||
| local clear = n.clear | ||||
| local insert = n.insert | ||||
| local expect = n.expect | ||||
| local feed_command = n.feed_command | ||||
| local command = n.command | ||||
|  | ||||
| describe('set wildoptions=fuzzy', function() | ||||
|   before_each(clear) | ||||
|  | ||||
|   it('works', function() | ||||
|     insert([[I'm alive!]]) | ||||
|     command('set wildoptions=fuzzy') | ||||
|     command('new buf_a') | ||||
|     feed_command('b buf_a') | ||||
|     command('q!') | ||||
|     expect([[I'm alive!]]) | ||||
|   end) | ||||
| end) | ||||
| @@ -1,345 +0,0 @@ | ||||
| -- Test for joining lines with marks in them (and with 'joinspaces' set/reset) | ||||
|  | ||||
| local n = require('test.functional.testnvim')() | ||||
|  | ||||
| local feed = n.feed | ||||
| local clear = n.clear | ||||
| local insert = n.insert | ||||
| local expect = n.expect | ||||
| local feed_command = n.feed_command | ||||
|  | ||||
| describe('joining lines', function() | ||||
|   before_each(clear) | ||||
|  | ||||
|   -- luacheck: ignore 613 (Trailing whitespaces in a string) | ||||
|   -- luacheck: ignore 611 (Line contains only whitespaces) | ||||
|   it("keeps marks with different 'joinspaces' settings", function() | ||||
|     insert([[ | ||||
|       firstline | ||||
|       asdfasdf. | ||||
|       asdf | ||||
|       asdfasdf.  | ||||
|       asdf | ||||
|       asdfasdf.   | ||||
|       asdf | ||||
|       asdfasdf.	 | ||||
|       asdf | ||||
|       asdfasdf. 	 | ||||
|       asdf | ||||
|       asdfasdf.	  | ||||
|       asdf | ||||
|       asdfasdf.		 | ||||
|       asdf | ||||
|       asdfasdf | ||||
|       asdf | ||||
|       asdfasdf  | ||||
|       asdf | ||||
|       asdfasdf   | ||||
|       asdf | ||||
|       asdfasdf	 | ||||
|       asdf | ||||
|       asdfasdf	  | ||||
|       asdf | ||||
|       asdfasdf 	 | ||||
|       asdf | ||||
|       asdfasdf		 | ||||
|       asdf | ||||
|       zx cvn. | ||||
|       as dfg? | ||||
|       hjkl iop! | ||||
|       ert | ||||
|       ]]) | ||||
|  | ||||
|     -- Switch off 'joinspaces', then join some lines in the buffer using "J". | ||||
|     -- Also set a few marks and record their movement when joining lines. | ||||
|     feed_command('set nojoinspaces') | ||||
|     feed_command('/firstline/') | ||||
|     feed('j"td/^$/<cr>') | ||||
|     feed('PJjJjJjJjJjJjJjJjJjJjJjJjJjJ') | ||||
|     feed('j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p') | ||||
|  | ||||
|     -- Do the same with 'joinspaces' on. | ||||
|     feed_command('set joinspaces') | ||||
|     feed('j"tp') | ||||
|     feed('JjJjJjJjJjJjJjJjJjJjJjJjJjJ') | ||||
|     feed('j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$po<esc>') | ||||
|  | ||||
|     feed_command('1d') | ||||
|  | ||||
|     expect([[ | ||||
|       asdfasdf. asdf | ||||
|       asdfasdf. asdf | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.	asdf | ||||
|       asdfasdf. 	asdf | ||||
|       asdfasdf.	 asdf | ||||
|       asdfasdf.		asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf  asdf | ||||
|       asdfasdf	asdf | ||||
|       asdfasdf	 asdf | ||||
|       asdfasdf 	asdf | ||||
|       asdfasdf		asdf | ||||
|       zx cvn. as dfg? hjkl iop! ert ernop | ||||
|        | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.	asdf | ||||
|       asdfasdf. 	asdf | ||||
|       asdfasdf.	 asdf | ||||
|       asdfasdf.		asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf  asdf | ||||
|       asdfasdf	asdf | ||||
|       asdfasdf	 asdf | ||||
|       asdfasdf 	asdf | ||||
|       asdfasdf		asdf | ||||
|       zx cvn.  as dfg?  hjkl iop!  ert  enop | ||||
|       ]]) | ||||
|   end) | ||||
|  | ||||
|   it("removes comment leaders with 'joinspaces' off", function() | ||||
|     insert([[ | ||||
|       { | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|       } | ||||
|       ]]) | ||||
|  | ||||
|     feed_command('/^{/+1') | ||||
|     feed_command('set comments=s1:/*,mb:*,ex:*/,://') | ||||
|     feed_command('set nojoinspaces') | ||||
|     feed_command('set backspace=eol,start') | ||||
|  | ||||
|     -- With 'joinspaces' switched off, join lines using both "J" and :join and | ||||
|     -- verify that comment leaders are stripped or kept as appropriate. | ||||
|     feed_command('.,+3join') | ||||
|     feed('j4J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('jj3J<cr>') | ||||
|  | ||||
|     expect([[ | ||||
|       { | ||||
|       /* Make sure the previous comment leader is not removed. */ | ||||
|       /* Make sure the previous comment leader is not removed. */ | ||||
|       // Should the next comment leader be left alone? Yes. | ||||
|       // Should the next comment leader be left alone? Yes. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       if (condition) // Remove the next comment leader! OK, I will. | ||||
|           action(); | ||||
|       if (condition) // Remove the next comment leader! OK, I will. | ||||
|           action(); | ||||
|       } | ||||
|       ]]) | ||||
|   end) | ||||
|  | ||||
|   -- This test case has nothing to do with joining lines. | ||||
|   it("Ctrl-u and 'backspace' compatibility", function() | ||||
|     -- Notice that the buffer text, which is intended to helpfully hint at | ||||
|     -- what's being done in the test, is off by one line. (For example, "this | ||||
|     -- should be deleted" should not be deleted, but the line below it should, | ||||
|     -- and is.) This is likely a mistake, but was kept here for consistency. | ||||
|     insert([[ | ||||
|       1 this shouldn't be deleted | ||||
|       2 this shouldn't be deleted | ||||
|       3 this shouldn't be deleted | ||||
|       4 this should be deleted | ||||
|       5 this shouldn't be deleted | ||||
|       6 this shouldn't be deleted | ||||
|       7 this shouldn't be deleted | ||||
|       8 this shouldn't be deleted (not touched yet) | ||||
|       ]]) | ||||
|  | ||||
|     -- As mentioned above, we mimic the wrong initial cursor position in the old | ||||
|     -- test by advancing one line further. | ||||
|     feed_command([[/^\d\+ this]], '+1') | ||||
|  | ||||
|     -- Test with the default 'backspace' setting. | ||||
|     feed('Avim1<c-u><esc><cr>') | ||||
|     feed('Avim2<c-g>u<c-u><esc><cr>') | ||||
|     feed_command('set cpo-=<') | ||||
|     feed_command('inoremap <c-u> <left><c-u>') | ||||
|     feed('Avim3<c-u><esc><cr>') | ||||
|     feed_command('iunmap <c-u>') | ||||
|     feed('Avim4<c-u><c-u><esc><cr>') | ||||
|  | ||||
|     -- Test with 'backspace' set to the compatible setting. | ||||
|     feed_command('set backspace=') | ||||
|     feed('A vim5<esc>A<c-u><c-u><esc><cr>') | ||||
|     feed('A vim6<esc>Azwei<c-g>u<c-u><esc><cr>') | ||||
|     feed_command('inoremap <c-u> <left><c-u>') | ||||
|     feed('A vim7<c-u><c-u><esc><cr>') | ||||
|  | ||||
|     expect([[ | ||||
|       1 this shouldn't be deleted | ||||
|       2 this shouldn't be deleted | ||||
|       3 this shouldn't be deleted | ||||
|       4 this should be deleted3 | ||||
|        | ||||
|       6 this shouldn't be deleted vim5 | ||||
|       7 this shouldn't be deleted vim6 | ||||
|       8 this shouldn't be deleted (not touched yet) vim7 | ||||
|       ]]) | ||||
|   end) | ||||
|  | ||||
|   it("removes comment leaders with 'joinspaces' on", function() | ||||
|     insert([[ | ||||
|       { | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       /* List: | ||||
|        * - item1 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        * - item2 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        */ | ||||
|        | ||||
|       /* List: | ||||
|        * - item1 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        * - item2 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        */ | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|        | ||||
|       int i = 7 /* foo *// 3 | ||||
|        // comment | ||||
|        ; | ||||
|        | ||||
|       int i = 7 /* foo *// 3 | ||||
|        // comment | ||||
|        ; | ||||
|        | ||||
|       ># Note that the last character of the ending comment leader (left angle | ||||
|        # bracket) is a comment leader itself. Make sure that this comment leader is | ||||
|        # not removed from the next line #< | ||||
|       < On this line a new comment is opened which spans 2 lines. This comment should | ||||
|       < retain its comment leader. | ||||
|        | ||||
|       ># Note that the last character of the ending comment leader (left angle | ||||
|        # bracket) is a comment leader itself. Make sure that this comment leader is | ||||
|        # not removed from the next line #< | ||||
|       < On this line a new comment is opened which spans 2 lines. This comment should | ||||
|       < retain its comment leader. | ||||
|        | ||||
|       } | ||||
|       ]]) | ||||
|  | ||||
|     feed_command('/^{/+1') | ||||
|     feed_command([[set comments=sO:*\ -,mO:*\ \ ,exO:*/]]) | ||||
|     feed_command('set comments+=s1:/*,mb:*,ex:*/,://') | ||||
|     feed_command('set comments+=s1:>#,mb:#,ex:#<,:<') | ||||
|     feed_command('set backspace=eol,start') | ||||
|  | ||||
|     -- With 'joinspaces' on (the default setting), again join lines and verify | ||||
|     -- that comment leaders are stripped or kept as appropriate. | ||||
|     feed_command('.,+3join') | ||||
|     feed('j4J<cr>') | ||||
|     feed_command('.,+8join') | ||||
|     feed('j9J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('jj3J<cr>') | ||||
|     feed('j') | ||||
|     feed_command('.,+2join') | ||||
|     feed('jj3J<cr>') | ||||
|     feed('j') | ||||
|     feed_command('.,+5join') | ||||
|     feed('j6J<cr>') | ||||
|     feed( | ||||
|       'oSome code!<cr>// Make sure backspacing does not remove this comment leader.<esc>0i<bs><esc>' | ||||
|     ) | ||||
|  | ||||
|     expect([[ | ||||
|       { | ||||
|       /* Make sure the previous comment leader is not removed.  */ | ||||
|       /* Make sure the previous comment leader is not removed.  */ | ||||
|       /* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */ | ||||
|       /* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */ | ||||
|       // Should the next comment leader be left alone?  Yes. | ||||
|       // Should the next comment leader be left alone?  Yes. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       if (condition) // Remove the next comment leader!  OK, I will. | ||||
|           action(); | ||||
|       if (condition) // Remove the next comment leader!  OK, I will. | ||||
|           action(); | ||||
|       int i = 7 /* foo *// 3 // comment | ||||
|        ; | ||||
|       int i = 7 /* foo *// 3 // comment | ||||
|        ; | ||||
|       ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader. | ||||
|       ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader. | ||||
|        | ||||
|       Some code!// Make sure backspacing does not remove this comment leader. | ||||
|       } | ||||
|       ]]) | ||||
|   end) | ||||
| end) | ||||
| @@ -5,6 +5,10 @@ local n = require('test.functional.testnvim')() | ||||
|  | ||||
| local clear, eq = n.clear, t.eq | ||||
| local eval, command = n.eval, n.command | ||||
| local feed = n.feed | ||||
| local insert = n.insert | ||||
| local expect = n.expect | ||||
| local feed_command = n.feed_command | ||||
|  | ||||
| describe('joining lines', function() | ||||
|   before_each(clear) | ||||
| @@ -19,4 +23,336 @@ describe('joining lines', function() | ||||
|     command('normal 10J') | ||||
|     eq('one two three four', eval('getline(1)')) | ||||
|   end) | ||||
|  | ||||
|   -- luacheck: ignore 613 (Trailing whitespaces in a string) | ||||
|   -- luacheck: ignore 611 (Line contains only whitespaces) | ||||
|   it("keeps marks with different 'joinspaces' settings", function() | ||||
|     insert([[ | ||||
|       firstline | ||||
|       asdfasdf. | ||||
|       asdf | ||||
|       asdfasdf.  | ||||
|       asdf | ||||
|       asdfasdf.   | ||||
|       asdf | ||||
|       asdfasdf.	 | ||||
|       asdf | ||||
|       asdfasdf. 	 | ||||
|       asdf | ||||
|       asdfasdf.	  | ||||
|       asdf | ||||
|       asdfasdf.		 | ||||
|       asdf | ||||
|       asdfasdf | ||||
|       asdf | ||||
|       asdfasdf  | ||||
|       asdf | ||||
|       asdfasdf   | ||||
|       asdf | ||||
|       asdfasdf	 | ||||
|       asdf | ||||
|       asdfasdf	  | ||||
|       asdf | ||||
|       asdfasdf 	 | ||||
|       asdf | ||||
|       asdfasdf		 | ||||
|       asdf | ||||
|       zx cvn. | ||||
|       as dfg? | ||||
|       hjkl iop! | ||||
|       ert | ||||
|       ]]) | ||||
|  | ||||
|     -- Switch off 'joinspaces', then join some lines in the buffer using "J". | ||||
|     -- Also set a few marks and record their movement when joining lines. | ||||
|     feed_command('set nojoinspaces') | ||||
|     feed_command('/firstline/') | ||||
|     feed('j"td/^$/<cr>') | ||||
|     feed('PJjJjJjJjJjJjJjJjJjJjJjJjJjJ') | ||||
|     feed('j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p') | ||||
|  | ||||
|     -- Do the same with 'joinspaces' on. | ||||
|     feed_command('set joinspaces') | ||||
|     feed('j"tp') | ||||
|     feed('JjJjJjJjJjJjJjJjJjJjJjJjJjJ') | ||||
|     feed('j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$po<esc>') | ||||
|  | ||||
|     feed_command('1d') | ||||
|  | ||||
|     expect([[ | ||||
|       asdfasdf. asdf | ||||
|       asdfasdf. asdf | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.	asdf | ||||
|       asdfasdf. 	asdf | ||||
|       asdfasdf.	 asdf | ||||
|       asdfasdf.		asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf  asdf | ||||
|       asdfasdf	asdf | ||||
|       asdfasdf	 asdf | ||||
|       asdfasdf 	asdf | ||||
|       asdfasdf		asdf | ||||
|       zx cvn. as dfg? hjkl iop! ert ernop | ||||
|        | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.  asdf | ||||
|       asdfasdf.	asdf | ||||
|       asdfasdf. 	asdf | ||||
|       asdfasdf.	 asdf | ||||
|       asdfasdf.		asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf asdf | ||||
|       asdfasdf  asdf | ||||
|       asdfasdf	asdf | ||||
|       asdfasdf	 asdf | ||||
|       asdfasdf 	asdf | ||||
|       asdfasdf		asdf | ||||
|       zx cvn.  as dfg?  hjkl iop!  ert  enop | ||||
|       ]]) | ||||
|   end) | ||||
|  | ||||
|   it("removes comment leaders with 'joinspaces' off", function() | ||||
|     insert([[ | ||||
|       { | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|       } | ||||
|       ]]) | ||||
|  | ||||
|     feed_command('/^{/+1') | ||||
|     feed_command('set comments=s1:/*,mb:*,ex:*/,://') | ||||
|     feed_command('set nojoinspaces') | ||||
|     feed_command('set backspace=eol,start') | ||||
|  | ||||
|     -- With 'joinspaces' switched off, join lines using both "J" and :join and | ||||
|     -- verify that comment leaders are stripped or kept as appropriate. | ||||
|     feed_command('.,+3join') | ||||
|     feed('j4J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('jj3J<cr>') | ||||
|  | ||||
|     expect([[ | ||||
|       { | ||||
|       /* Make sure the previous comment leader is not removed. */ | ||||
|       /* Make sure the previous comment leader is not removed. */ | ||||
|       // Should the next comment leader be left alone? Yes. | ||||
|       // Should the next comment leader be left alone? Yes. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       if (condition) // Remove the next comment leader! OK, I will. | ||||
|           action(); | ||||
|       if (condition) // Remove the next comment leader! OK, I will. | ||||
|           action(); | ||||
|       } | ||||
|       ]]) | ||||
|   end) | ||||
|  | ||||
|   -- This test case has nothing to do with joining lines. | ||||
|   it("Ctrl-u and 'backspace' compatibility", function() | ||||
|     -- Notice that the buffer text, which is intended to helpfully hint at | ||||
|     -- what's being done in the test, is off by one line. (For example, "this | ||||
|     -- should be deleted" should not be deleted, but the line below it should, | ||||
|     -- and is.) This is likely a mistake, but was kept here for consistency. | ||||
|     insert([[ | ||||
|       1 this shouldn't be deleted | ||||
|       2 this shouldn't be deleted | ||||
|       3 this shouldn't be deleted | ||||
|       4 this should be deleted | ||||
|       5 this shouldn't be deleted | ||||
|       6 this shouldn't be deleted | ||||
|       7 this shouldn't be deleted | ||||
|       8 this shouldn't be deleted (not touched yet) | ||||
|       ]]) | ||||
|  | ||||
|     -- As mentioned above, we mimic the wrong initial cursor position in the old | ||||
|     -- test by advancing one line further. | ||||
|     feed_command([[/^\d\+ this]], '+1') | ||||
|  | ||||
|     -- Test with the default 'backspace' setting. | ||||
|     feed('Avim1<c-u><esc><cr>') | ||||
|     feed('Avim2<c-g>u<c-u><esc><cr>') | ||||
|     feed_command('set cpo-=<') | ||||
|     feed_command('inoremap <c-u> <left><c-u>') | ||||
|     feed('Avim3<c-u><esc><cr>') | ||||
|     feed_command('iunmap <c-u>') | ||||
|     feed('Avim4<c-u><c-u><esc><cr>') | ||||
|  | ||||
|     -- Test with 'backspace' set to the compatible setting. | ||||
|     feed_command('set backspace=') | ||||
|     feed('A vim5<esc>A<c-u><c-u><esc><cr>') | ||||
|     feed('A vim6<esc>Azwei<c-g>u<c-u><esc><cr>') | ||||
|     feed_command('inoremap <c-u> <left><c-u>') | ||||
|     feed('A vim7<c-u><c-u><esc><cr>') | ||||
|  | ||||
|     expect([[ | ||||
|       1 this shouldn't be deleted | ||||
|       2 this shouldn't be deleted | ||||
|       3 this shouldn't be deleted | ||||
|       4 this should be deleted3 | ||||
|        | ||||
|       6 this shouldn't be deleted vim5 | ||||
|       7 this shouldn't be deleted vim6 | ||||
|       8 this shouldn't be deleted (not touched yet) vim7 | ||||
|       ]]) | ||||
|   end) | ||||
|  | ||||
|   it("removes comment leaders with 'joinspaces' on", function() | ||||
|     insert([[ | ||||
|       { | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       /* | ||||
|        * Make sure the previous comment leader is not removed. | ||||
|        */ | ||||
|        | ||||
|       /* List: | ||||
|        * - item1 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        * - item2 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        */ | ||||
|        | ||||
|       /* List: | ||||
|        * - item1 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        * - item2 | ||||
|        *   foo bar baz | ||||
|        *   foo bar baz | ||||
|        */ | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       // Should the next comment leader be left alone? | ||||
|       // Yes. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       /* Here the comment leader should be left intact. */ | ||||
|       // And so should this one. | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|        | ||||
|       if (condition) // Remove the next comment leader! | ||||
|                      // OK, I will. | ||||
|           action(); | ||||
|        | ||||
|       int i = 7 /* foo *// 3 | ||||
|        // comment | ||||
|        ; | ||||
|        | ||||
|       int i = 7 /* foo *// 3 | ||||
|        // comment | ||||
|        ; | ||||
|        | ||||
|       ># Note that the last character of the ending comment leader (left angle | ||||
|        # bracket) is a comment leader itself. Make sure that this comment leader is | ||||
|        # not removed from the next line #< | ||||
|       < On this line a new comment is opened which spans 2 lines. This comment should | ||||
|       < retain its comment leader. | ||||
|        | ||||
|       ># Note that the last character of the ending comment leader (left angle | ||||
|        # bracket) is a comment leader itself. Make sure that this comment leader is | ||||
|        # not removed from the next line #< | ||||
|       < On this line a new comment is opened which spans 2 lines. This comment should | ||||
|       < retain its comment leader. | ||||
|        | ||||
|       } | ||||
|       ]]) | ||||
|  | ||||
|     feed_command('/^{/+1') | ||||
|     feed_command([[set comments=sO:*\ -,mO:*\ \ ,exO:*/]]) | ||||
|     feed_command('set comments+=s1:/*,mb:*,ex:*/,://') | ||||
|     feed_command('set comments+=s1:>#,mb:#,ex:#<,:<') | ||||
|     feed_command('set backspace=eol,start') | ||||
|  | ||||
|     -- With 'joinspaces' on (the default setting), again join lines and verify | ||||
|     -- that comment leaders are stripped or kept as appropriate. | ||||
|     feed_command('.,+3join') | ||||
|     feed('j4J<cr>') | ||||
|     feed_command('.,+8join') | ||||
|     feed('j9J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('j3J<cr>') | ||||
|     feed_command('.,+2join') | ||||
|     feed('jj3J<cr>') | ||||
|     feed('j') | ||||
|     feed_command('.,+2join') | ||||
|     feed('jj3J<cr>') | ||||
|     feed('j') | ||||
|     feed_command('.,+5join') | ||||
|     feed('j6J<cr>') | ||||
|     feed( | ||||
|       'oSome code!<cr>// Make sure backspacing does not remove this comment leader.<esc>0i<bs><esc>' | ||||
|     ) | ||||
|  | ||||
|     expect([[ | ||||
|       { | ||||
|       /* Make sure the previous comment leader is not removed.  */ | ||||
|       /* Make sure the previous comment leader is not removed.  */ | ||||
|       /* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */ | ||||
|       /* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */ | ||||
|       // Should the next comment leader be left alone?  Yes. | ||||
|       // Should the next comment leader be left alone?  Yes. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       /* Here the comment leader should be left intact. */ // And so should this one. | ||||
|       if (condition) // Remove the next comment leader!  OK, I will. | ||||
|           action(); | ||||
|       if (condition) // Remove the next comment leader!  OK, I will. | ||||
|           action(); | ||||
|       int i = 7 /* foo *// 3 // comment | ||||
|        ; | ||||
|       int i = 7 /* foo *// 3 // comment | ||||
|        ; | ||||
|       ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader. | ||||
|       ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader. | ||||
|        | ||||
|       Some code!// Make sure backspacing does not remove this comment leader. | ||||
|       } | ||||
|       ]]) | ||||
|   end) | ||||
| end) | ||||
|   | ||||
| @@ -562,12 +562,8 @@ func Test_match_invalid_byte() | ||||
| endfunc | ||||
|  | ||||
| func Test_match_illegal_byte() | ||||
|   let lines =<< trim END | ||||
|       silent! buffer ÿ\c | ||||
|       next ÿ | ||||
|       0scriptnames | ||||
|       source | ||||
|   END | ||||
|   " Text has illegal bytes which need to be set explicitly | ||||
|   let lines = ["norm :set no\x01\<CR>", "silent n\xff", "silent norm :b\xff\<CR>"] | ||||
|   call writefile(lines, 'Xregexp') | ||||
|   call system(GetVimCommand() .. ' -X -Z -e -s -S Xregexp -c qa!') | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq