Eu tenho duas ideias, mas ambas são bastante complexas:
- Use
:inoremap <expr>
e execute o reposicionamento do cursor com:call cursor()
. A desvantagem é que você precisa fazer o cálculo de qual coluna empacotada está diretamente acima / abaixo do cursor. - Use
:inoremap <expr>
para agrupar o comando<C-o>gj
em:set eventignore+=InsertLeave,InsertEnter
antes e depois restaurar a opção, assim:
function! IgnoreOn( motion )
set eventignore+=InsertLeave,InsertEnter
return "\<C-o>" . a:motion
endfunction
function! IgnoreOff()
set eventignore-=InsertLeave,InsertEnter
return "\<Left>\<Right>" | " Workaround for missing screen update.
endfunction
inoremap <expr> <SID>IgnoreOff IgnoreOff()
inoremap <expr> <SID>IgnoredDown IgnoreOn('gj')
inoremap <script> <Down> <SID>IgnoredDown<SID>IgnoreOff