-- tldr/
Add this to your Neovim init.lua file to let
Espanso reposition the cursor properly
-- code
-- lua
vim.o.whichwrap="b,s,["
-- /tldr
-- h2
The Problem
I use Espanso for a text expander. One great
feature is the ability to reposition the cursor
inside the expanded text with a `$|$`` cursor
hint. For example, this would position the
cursor between the two div tags after the
expansion:
-- code
<div>$|$</div>
-- p
Sadly, it didn't work in Neovim. Espanso
simulates left arrow keypresses to move the cursor.
Using the left arrow in Neovim works, but only
up to a point. It won't move to the prior line.
Any expansion that tries to do that ends up
with the cursor stuck at the first character
of the last line.
-- h2
The Fix
Neovim has a `whichwrap`` config option that
provides a fix for the issue. The option defaults
to "b" and "s" which let the backspace and space
keys to move to the preceding and following lines,
respectively. Adding "[" to those (as shown above)
lets left arrow move to prior lines in Insert
and Replace mode. Insert mode being where Espanso
would be doing the expansion.
This works inside regular expansions and with
the output from scripts as well.
Took me a bit to figure out what was up. Now
that I've got it working, I'm using Espanso
even more.
-- ref
-- title: Espanso
-- url: https://espanso.org
A very nice open-source text expander
-- ref
-- title: Neovim
-- url: https://neovim.io
The hyperextensible Vim-based text editor
-- ref
-- title: Espanso - Cursor Hints
-- url: https://espanso.org/docs/matches/basics/#cursor-hints
This is how to setup where you want the cursor to go. Note that
if editors do additional formatting (e.g. tabbing) it won't
work as expected since it can't the editor changes
-- ref
-- title: Neovim: whichwrap option
-- url: https://neovim.io/doc/user/options.html#'whichwrap'
One of the one-zillion config options in Neovim