I currently have the following map setup to allow me to quickly create a pair of parens by tapping (
twice, leaving the cursor between them for more typing:
imap (( ()<left>
Separately, I have another map for skipping over the closing paren when it already exists. That is, if you type )
when there is already a )
to the right of the cursor, instead of inserting another )
the cursor just jumps over the existing one:
inoremap <expr> ) strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"
The problem occurs in the interaction of these two maps. That is, say my code is:
func(foo)
I realize that foo is not a value, but a function, and what I really want is to pass the return value from calling foo()
to func, so I go ahead and move my cursor -- signified by |
between the o
and )
:
func(foo|)
Now what I want to do is simply tap (
twice, which will trigger my first map and leave me with:
func(foo())
But in fact, because of my second map, what I get is this:
func(foo()
How can I create an exception to my 2nd map so that it won't interfere with this specific case? That is, when the typed )
is caused by another map rather than by me physically hitting a key, I don't want the 2nd map to be triggered.
inoremap
instead ofimap