Hund

How I use temporary keybindings for spellcheck in Neovim

May 15, 2021

I use my text editor Neovim for everything, and I really mean everything. I even use it for inputing text on the web via my web browser qutebrowser and it’s of course the editor I use for all my emails. This also means that I commonly use the spellchecking feature all the time.

And because I use the spellcheck feature all the time, I also want the shortcuts for it to be close to the home row. Unfortunately, I couldn’t find any available keys that felt natural to me to bind the spellcheck commands to, but after some thinking, I got the idea that I could use temporary keybindings.

This means that the keybindings for the spellcheck is only available when I have the spellcheck feature enabled, and I can bind them to keys that I normally use for other things.

After some experimenting, I came up with this solution:

map <silent> <F1>
        \ :set nospell<BAR> :silent! unmap ff<BAR> :silent! unmap fF<BAR>
        \ :silent! unmap fa<BAR> :silent! unmap fn<BAR> :silent! unmap fd<BAR>
        \ :redraw<BAR> echom "Spellcheck disabled"<CR>

map <F2>
        \ :setlocal spell spelllang=sv<BAR> :noremap ff ]s<BAR> :noremap fF [s<BAR>
        \ :noremap fa zg<BAR> :noremap fn z=<BAR> :noremap fd zuw<BAR>
        \ :highlight SpellBad ctermfg=003 ctermbg=none cterm=none<BAR> :redraw<BAR>
        \ echom "Swedish spellcheck enabled"<CR>
map <F3>
        \ :setlocal spell spelllang=en<BAR> :noremap ff ]s<BAR> :noremap fF [s <BAR>
        \ :noremap fa zg<BAR> :noremap fn z=<BAR> :noremap fd zuw<BAR>
        \ :highlight SpellBad ctermfg=003 ctermbg=none cterm=none<BAR> :redraw<BAR>
        \ echom "English spellcheck enabled"<CR>

This means that when I enable spellcheck I also enable these keybindings:

ff Go to the next misspelled word.
fF Go the previously misspelled word.
fn Correct the current misspelled word.
fa Add the current word to the dictionary.
fd Remove the current word from the dictionary.

And when I disable the spellcheck, it then removes the keybindings and restore the default behaviour for the f key.

Meta

No Comments

Use the e-mail form, if you wish to leave feedback for this post. Markdown is supported. [Terms of service]