I want to make a custom search, accessible with operator-pending commands;
onoremap to make it work in this mode.
It's working well, and I can use my command (let's say it's mapped to
But when the function called by the mapping does not match anything, I would like to make it react exactly like when I type the following normal mode command:
E486: Pattern not found: never\&match
An error is gently displayed, and it goes back to normal mode, because an error happened.
For now, when my custom search fails with the example
czz command, it enters into insert mode, as if the search was successful. That's my problem:
How can I cancel the
czz command and go back to normal mode, when the search inside the
zz mapping fails?
To solve it I tried to put the following in the right place, but in vain:
exe "normal! \<esc>"
Here is an example code:
" Create the o-mapping: onoremap zz :<c-u>call MyQTest()<cr> function! MyQTest() " Just below, performs a custom search that will set two " vars, 'l:start' and 'l:end', the bounds of the area to " work with: " [ ... ] " Finally we get some values, for example: " let l:start = 5 " let l:end = 10 " But if the search fails, instead of the two lines above, " the values could be: let l:start = -1 let l:end = -1 if l:start == -1 || l:end == -1 " HERE is the problem: " If the search fails, how can I completely cancel the operator-pending " command and return to normal mode, instead of start editing (with " the 'c' normal command) ? return endif " Make a selection, for operator-pending mode: call cursor(0, l:start) normal v call cursor(0, l:end) endf