Существует более короткая и лучшая версия этого ответа , доступная на Stack Exchange здесь .Идея та же, но исполнение лучше.
Пока работает текущее решение, в ответе по ссылке выше используется именно оригинальное отображение.
Оригинальный ответниже
Я возился с различными версиями вашего сопоставления и почти придумал хорошее решение (хотя оно и довольно не элегантное), которое необходимо добавить в ваш файл конфигурации, как представлено здесь:
function! FixLastSpellCurrentLine()
let s:linenum1 = line('.')
execute 'normal ms[s'
let s:linenum2 = line('.')
execute 'normal `s'
if s:linenum1 == s:linenum2
execute 'normal ms[s1z=`sl'
endif
let s:islastchar = col(".") == col("$")-1
if s:islastchar
:startinsert!
else
execute 'normal h'
:startinsert
endif
endfunction
imap <C-l> <esc>:call FixLastSpellCurrentLine()<CR>
Вероятно, это не работает так, как вы ожидаете при любых обстоятельствах, но это достаточно близко, так что я чувствую, что это может вдохновить вас или кого-то еще улучшить его.Идея состоит в том, чтобы просто проверить, где произошла предыдущая орфографическая ошибка и сравнить строки.Я думаю, что это может быть реализовано более или менее в том же духе, но я все еще не убежден, что это решение идеально.
Что он делает:
- Из текущей позиции курсора он переходит в нормальный режим и вызывает определенную функцию.
- Затем он сохраняет значение текущегострока в
s:linenum1
. - Помечает текущую позицию с помощью
ms
и переходит к предыдущей орфографической ошибке, найденной в файле, если таковая имеется. - Оттуда она захватывает номер строкиснова в
s:linenum2
, чтобы увидеть, отличается ли он. - Возвращается туда, где он был, и определяет, изменилась ли линия.Если он изменился, он вернется в режим вставки туда, где находился курсор, и не исправит любую орфографическую ошибку, если она произошла в другой строке.
- Если она не изменилась, он исправит орфографическую ошибку и возвратиттуда, где курсор был изначально.