diff options
author | Teddy Wing | 2020-09-26 13:50:44 +0200 |
---|---|---|
committer | Teddy Wing | 2020-09-29 01:15:08 +0200 |
commit | 802d388c9dcc1c75b0acd8bcfe75cbd66c76838d (patch) | |
tree | f23b5abb6d10f561f8f78fa25c0a5fbb817ccb1d | |
parent | 8a05e0113d49585ba1c22251695d5478b1c634ca (diff) | |
download | vim-grappele-802d388c9dcc1c75b0acd8bcfe75cbd66c76838d.tar.bz2 |
Trying to fix omap (WIP)
gG omap works characterwise but should work linewise.
Adding V to the gG omap causes >17G to indent 17 times instead of once.
Try changing `G` to an `<expr>` mapping to simplify the code, allowing
it to work more exactly like the normal `G`. This resulted in moving the
logic to `grappele#Recall()`, causing problems for `gG`.
-rw-r--r-- | autoload/grappele.vim | 70 | ||||
-rw-r--r-- | plugin/grappele.vim | 16 |
2 files changed, 53 insertions, 33 deletions
diff --git a/autoload/grappele.vim b/autoload/grappele.vim index 74af532..418f365 100644 --- a/autoload/grappele.vim +++ b/autoload/grappele.vim @@ -1,36 +1,56 @@ function! grappele#Grappele(line, ...) - let l:current_buffer = 0 - let l:column_position = 0 - let l:column_offset = 0 + " let l:current_buffer = 0 + " let l:column_position = 0 + " let l:column_offset = 0 + " + " let l:mode = get(a:, 1, '') + " let l:visualmode = get(a:, 2, '') + " + " normal! m' + " + " if l:mode ==# 'v' + " execute 'normal! ' . l:visualmode + " elseif l:mode ==# 'o' + " normal! V + " endif + " + " if a:line ==# 0 + " " Go to the end of the buffer + " $ + " else + " let s:line = a:line + " + " call setpos('.', [ + " \ l:current_buffer, + " \ a:line, + " \ l:column_position, + " \ l:column_offset + " \ ]) + " endif - let l:mode = get(a:, 1, '') - let l:visualmode = get(a:, 2, '') + let l:line = '' - normal! m' - - if l:mode ==# 'v' - execute 'normal! ' . l:visualmode - elseif l:mode ==# 'o' - normal! V - endif - - if a:line ==# 0 - " Go to the end of the buffer - $ - else + if a:line !=# 0 let s:line = a:line - - call setpos('.', [ - \ l:current_buffer, - \ a:line, - \ l:column_position, - \ l:column_offset - \ ]) endif + + echom s:line . 'G' + return 'G' endfunction function! grappele#Recall(mode) if exists('s:line') - call grappele#Grappele(s:line, a:mode, visualmode()) + " call grappele#Grappele(s:line, a:mode, visualmode()) + + let l:line = s:line + + if a:mode ==# 'o' + " let l:line += 1 + elseif a:mode ==# 'v' + let l:line = visualmode() . l:line + endif + + echom 'Recall: ' . l:line + execute 'normal! ' . l:line . 'G' endif endfunction diff --git a/plugin/grappele.vim b/plugin/grappele.vim index 9ab1400..e04c8e4 100644 --- a/plugin/grappele.vim +++ b/plugin/grappele.vim @@ -4,22 +4,22 @@ endif let g:loaded_grappele = 1 -nnoremap <silent> <Plug>Grappele :<c-u>call grappele#Grappele(v:count, 'n')<cr> -nnoremap <silent> <Plug>GrappeleRecall :<c-u>call grappele#Recall('n')<cr> -vnoremap <silent> <Plug>GrappeleRecall :<c-u>call grappele#Recall('v')<cr> -onoremap <silent> <Plug>GrappeleRecall :<c-u>call grappele#Recall('o')<cr> +nnoremap <silent> <Plug>Grappele grappele#Grappele(v:count, 'n') +nnoremap <silent> <Plug>GrappeleRecall :<C-u>call grappele#Recall('n')<cr> +vnoremap <silent> <Plug>GrappeleRecall :<C-u>call grappele#Recall('v')<cr> +onoremap <silent> <Plug>GrappeleRecall :<C-u>call grappele#Recall('o')<cr> if !hasmapto('<Plug>Grappele') || !maparg('G', 'n') - nnoremap <silent> G :<c-u>call grappele#Grappele(v:count, 'n')<cr> + nnoremap <silent> <expr> G grappele#Grappele(v:count, 'n') endif if !hasmapto('<Plug>Grappele') || !maparg('G', 'v') - vnoremap <silent> G - \ :<c-u>call grappele#Grappele(v:count, 'v', visualmode())<cr> + vnoremap <silent> <expr> G + \ grappele#Grappele(v:count, 'v', visualmode()) endif if !hasmapto('<Plug>Grappele') || !maparg('G', 'o') - onoremap <silent> G :<c-u>call grappele#Grappele(v:count, 'o')<cr> + onoremap <silent> <expr> G grappele#Grappele(v:count, 'o') endif if !hasmapto('<Plug>GrappeleRecall') || !maparg('gG', 'n') |