mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.1.0648: custom operators can't act upon a forced motion
Problem:    Custom operators can't act upon a forced motion. (Christian
            Wellenbrock)
Solution:   Add the forced motion to the mode() result. (Christian Brabandt,
            closes #3490)
			
			
This commit is contained in:
		| @@ -230,3 +230,57 @@ func Test_cabbr_visual_mode() | ||||
|   call assert_equal(expected, getreg(':')) | ||||
|   cunabbr s | ||||
| endfunc | ||||
|  | ||||
| func Test_motionforce_omap() | ||||
|   func GetCommand() | ||||
|     let g:m=mode(1) | ||||
|     let [g:lnum1, g:col1] = searchpos('-', 'Wb') | ||||
|     if g:lnum1 == 0 | ||||
|         return "\<Esc>" | ||||
|     endif | ||||
|     let [g:lnum2, g:col2] = searchpos('-', 'W') | ||||
|     if g:lnum2 == 0 | ||||
|         return "\<Esc>" | ||||
|     endif | ||||
|     return ":call Select()\<CR>" | ||||
|   endfunc | ||||
|   func Select() | ||||
|     call cursor([g:lnum1, g:col1]) | ||||
|     exe "normal! 1 ". (strlen(g:m) == 2 ? 'v' : g:m[2]) | ||||
|     call cursor([g:lnum2, g:col2]) | ||||
|     execute "normal! \<BS>" | ||||
|   endfunc | ||||
|   new | ||||
|   onoremap <buffer><expr> i- GetCommand() | ||||
|   " 1) default omap mapping | ||||
|   %d_ | ||||
|   call setline(1, ['aaa - bbb', 'x', 'ddd - eee']) | ||||
|   call cursor(2, 1) | ||||
|   norm di- | ||||
|   call assert_equal('no', g:m) | ||||
|   call assert_equal(['aaa -- eee'], getline(1, '$')) | ||||
|   " 2) forced characterwise operation | ||||
|   %d_ | ||||
|   call setline(1, ['aaa - bbb', 'x', 'ddd - eee']) | ||||
|   call cursor(2, 1) | ||||
|   norm dvi- | ||||
|   call assert_equal('nov', g:m) | ||||
|   call assert_equal(['aaa -- eee'], getline(1, '$')) | ||||
|   " 3) forced linewise operation | ||||
|   %d_ | ||||
|   call setline(1, ['aaa - bbb', 'x', 'ddd - eee']) | ||||
|   call cursor(2, 1) | ||||
|   norm dVi- | ||||
|   call assert_equal('noV', g:m) | ||||
|   call assert_equal([''], getline(1, '$')) | ||||
|   " 4) forced blockwise operation | ||||
|   %d_ | ||||
|   call setline(1, ['aaa - bbb', 'x', 'ddd - eee']) | ||||
|   call cursor(2, 1) | ||||
|   exe "norm d\<C-V>i-" | ||||
|   call assert_equal("no\<C-V>", g:m) | ||||
|   call assert_equal(['aaabbb', 'x', 'dddeee'], getline(1, '$')) | ||||
|   bwipe! | ||||
|   delfunc Select | ||||
|   delfunc GetCommand | ||||
| endfunc | ||||
|   | ||||
		Reference in New Issue
	
	Block a user