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; |     return NULL; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   char *fname; | ||||||
|  |   if (curbuf->b_ffname != NULL) { | ||||||
|  |     fname = xstrdup(curbuf->b_ffname); | ||||||
|  |   } else { | ||||||
|     if (ex_lua) { |     if (ex_lua) { | ||||||
|       // Use ":{range}lua buffer=<num>" as the script name |       // Use ":{range}lua buffer=<num>" as the script name | ||||||
|       snprintf(IObuff, IOSIZE, ":{range}lua buffer=%d", curbuf->b_fnum); |       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 |       // Use ":source buffer=<num>" as the script name | ||||||
|       snprintf(IObuff, IOSIZE, ":source buffer=%d", curbuf->b_fnum); |       snprintf(IObuff, IOSIZE, ":source buffer=%d", curbuf->b_fnum); | ||||||
|     } |     } | ||||||
|   char *fname = xstrdup(IObuff); |     fname = xstrdup(IObuff); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   ga_init(&sp->buflines, sizeof(char *), 100); |   ga_init(&sp->buflines, sizeof(char *), 100); | ||||||
|   // Copy the lines from the buffer into a grow array |   // Copy the lines from the buffer into a grow array | ||||||
|   | |||||||
| @@ -247,12 +247,15 @@ describe(':source', function() | |||||||
|         feed('dd') |         feed('dd') | ||||||
|  |  | ||||||
|         feed_command(':source') |         feed_command(':source') | ||||||
|  |         local filepath = fn.expand('%:p') | ||||||
|  |         if filepath == '' then | ||||||
|  |           filepath = ':source buffer=1' | ||||||
|  |         end | ||||||
|         eq(12, eval('g:c')) |         eq(12, eval('g:c')) | ||||||
|         eq('  \\ 1\n "\\ 2', exec_lua('return _G.a')) |         eq('  \\ 1\n "\\ 2', exec_lua('return _G.a')) | ||||||
|         eq(':source buffer=1', api.nvim_get_var('sfile_value')) |         eq(filepath, api.nvim_get_var('sfile_value')) | ||||||
|         eq(':source buffer=1', api.nvim_get_var('stack_value')) |         eq(filepath, api.nvim_get_var('stack_value')) | ||||||
|         eq(':source buffer=1', api.nvim_get_var('script_value')) |         eq(filepath, api.nvim_get_var('script_value')) | ||||||
|       end) |       end) | ||||||
|     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 clear, eq = n.clear, t.eq | ||||||
| local eval, command = n.eval, n.command | 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() | describe('joining lines', function() | ||||||
|   before_each(clear) |   before_each(clear) | ||||||
| @@ -19,4 +23,336 @@ describe('joining lines', function() | |||||||
|     command('normal 10J') |     command('normal 10J') | ||||||
|     eq('one two three four', eval('getline(1)')) |     eq('one two three four', eval('getline(1)')) | ||||||
|   end) |   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) | end) | ||||||
|   | |||||||
| @@ -562,12 +562,8 @@ func Test_match_invalid_byte() | |||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| func Test_match_illegal_byte() | func Test_match_illegal_byte() | ||||||
|   let lines =<< trim END |   " Text has illegal bytes which need to be set explicitly | ||||||
|       silent! buffer ÿ\c |   let lines = ["norm :set no\x01\<CR>", "silent n\xff", "silent norm :b\xff\<CR>"] | ||||||
|       next ÿ |  | ||||||
|       0scriptnames |  | ||||||
|       source |  | ||||||
|   END |  | ||||||
|   call writefile(lines, 'Xregexp') |   call writefile(lines, 'Xregexp') | ||||||
|   call system(GetVimCommand() .. ' -X -Z -e -s -S Xregexp -c qa!') |   call system(GetVimCommand() .. ' -X -Z -e -s -S Xregexp -c qa!') | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq