On 07/09/2018 20:58, Lifepillar wrote:
> If you run `vim --clean` (I have tried with Vim 8.1.300) and
> source this:
>
> fun! Act()
> echo "The cursor gets stuck here ->"
> return ''
> endf
>
> " 1. Trigger keyword completion (<c-x><c-n)
> " 2. Force waiting for the pop-up menu to appear (<c-r>==''<cr>)
> " 3. Invoke Act() with pumvisible() == 1 (<plug>(Act)
> fun! Complete()
> return "\<c-x>\<c-n>\<c-r>=''\<cr>\<plug>(Act)"
> endf
>
> imap <silent> <expr> <plug>(Act) Act()
> imap <expr> <tab> Complete()
>
> set completeopt=menu
> set noshowmode
>
> then (in the same buffer) type something like `s<tab>`: you should see
> that the pop-up menu appears, but the cursor stays in the command line
> until you press another character.
>
> Is there a way to avoid that, i.e., to have the cursor stays in the
> buffer? Tried redraw after echo, but it does not change anything;
> redraw! leaves the cursor at the bottom-right angle of the menu instead.
Forcing a status line redraw (e.g., let &ro=&ro) fixes the issue (thanks
to Github user @cwfoo). The status line must be visible, though.
The fixed example follows.
Life.
fun! Act()
echo "The cursor won't get stuck here ->"
let &ro=&ro
return ''
endf
fun! Complete()
return "\<c-x>\<c-n>\<c-r>=''\<cr>\<plug>(Act)"
endf
imap <silent> <expr> <plug>(Act) Act()
imap <expr> <tab> Complete()
se cot=menu
set noshowmode
set laststatus=2
--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment