From e07089624f0f8b8ba3f024bbf3c0c1a735522d06 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 26 Sep 2020 22:24:54 +0200 Subject: Fix `gG` omap by removing count Previously, if we stored a number in `s:line`, for example with `17G`, then `>gG` would cause lines .,17 to be indented 17 times due to the use of `V`. When I removed `V` from the omap, any commands using `gG` operated characterwise, when they should operate linewise. Found this answer from Liu Sha (https://stackoverflow.com/users/7026980/liu-sha) https://stackoverflow.com/questions/4261177/discarding-count-in-expr-mappings/53182922#53182922 that shows how to discard the count for different types of mappings: > nnoremap s "@_" . ToNthSpace() > vnoremap s "@_" . ToNthSpace() > onoremap s printf(":normal %s\", ToNthSpace()) The `:normal!` looks like it discards the count, so this gives us what we want. Adapted the suggestion into a new `` omap that indents only once for e.g. .,17. --- autoload/grappele.vim | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'autoload') diff --git a/autoload/grappele.vim b/autoload/grappele.vim index 418f365..1b1a71a 100644 --- a/autoload/grappele.vim +++ b/autoload/grappele.vim @@ -44,13 +44,20 @@ function! grappele#Recall(mode) let l:line = s:line - if a:mode ==# 'o' + " if a:mode ==# 'o' " let l:line += 1 - elseif a:mode ==# 'v' + " return ':normal! V' . l:line . "G\" + if a:mode ==# 'v' let l:line = visualmode() . l:line endif - echom 'Recall: ' . l:line + " echom 'Recall: ' . l:line execute 'normal! ' . l:line . 'G' endif endfunction + +function! grappele#ORecall() + if exists('s:line') + return ':normal! V' . s:line . "G\" + endif +endfunction -- cgit v1.2.3