Note: This site is currently "Under construction". I'm migrating to a new version of my site building software. Lots of things are in a state of disrepair as a result (for example, footnote links aren't working). It's all part of the process of building in public. Most things should still be readable though.

Fix Espanso Cursor Hint Positioning In Neovim

-- 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