Как заставить vim spell error искать только текущую строку? - PullRequest
1 голос
/ 29 апреля 2019

Эта привязка vim заставит <C-l> исправить предыдущую орфографическую ошибку:

inoremap <C-l> <c-g>u<Esc>[s1z=`]a<c-g>u

Как мне изменить его, чтобы исправить предыдущую ошибку только в текущей строке?

1 Ответ

0 голосов
/ 30 апреля 2019

Существует более короткая и лучшая версия этого ответа , доступная на 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, чтобы увидеть, отличается ли он.
  • Возвращается туда, где он был, и определяет, изменилась ли линия.Если он изменился, он вернется в режим вставки туда, где находился курсор, и не исправит любую орфографическую ошибку, если она произошла в другой строке.
  • Если она не изменилась, он исправит орфографическую ошибку и возвратиттуда, где курсор был изначально.
...