Возможно ли отобразить параметры проверки орфографии vim в окне быстрой исправления?

Вопрос или проблема

В настоящее время я работаю над простым плагином проверки орфографии для Vim. У меня возникли трудности с тем, как отобразить варианты исправлений в окне быстрого исправления.

Возможно ли отобразить параметры проверки орфографии Vim z= там?

То, что вы спрашиваете, конкретно, невозможно. Тем не менее, вы можете эмулировать нужное вам поведение, открыв собственное окно со временным буфером и заполнив его выводом spellsuggest().

Вам также потребуется создать ряд локальных подключений буфера для обработки взаимодействия с пользователем.

Смотрите:

:help special-buffers
:help map-local
:help spellsuggest()

Я поддерживаю этот плагин проверки орфографии для Vim более десяти лет: http://www.vim.org/scripts/script.php?script_id=135

У него всё еще есть несколько функций, которые никогда не были интегрированы в Vim.

  • Он не использует окно быстрого исправления, вместо этого используется временный буфер.
  • Заменяемые слова, как правило, получают более высокий рейтинг при следующем запросе предложений.
  • Он использует aspell или ispell для проверки орфографии.

Если вы хотите захватить вывод Vim, вы можете использовать :redir:

function! ShowSpell() abort
    " Резервное копирование регистра назначения, чтобы пользователь никогда не заметил, что мы с ним что-то сделали.
    let c_bak = @c

    redir @c
    silent norm! z=
    redir END
    let items = split(@c, "\n")
    " Преобразуйте каждое предложение в элемент быстрого исправления и уберите индекс.
    let items = items->map({_,v -> {'text': substitute(v, '\v.*"(.*)".*', '\1', "")}})
    call setqflist(items)

    let @c = c_bak
endf

:redir часто хорошо сочетается с lazyredraw, чтобы избежать отображения вывода, но, похоже, это не обязательно здесь с :silent.

Хотя эта функция работает, вы можете увидеть, что она гораздо проще с spellsuggest():

function! ShowSpell() abort
    let items = spellsuggest(expand(""))
    let items = items->map({_,v -> {'text': v}})
    call setqflist(items)
endf

Ответ или решение

Да, ваше желание отобразить варианты исправлений для проверки орфографии Vim в окне быстрой коррекции (quickfix) напрямую не может быть реализовано. Однако вы можете эмулировать это поведение, открыв собственное окно с буфером для заметок (scratch buffer) и заполнив его выводом функции spellsuggest().

Для этого вам потребуется создать несколько локальных привязок клавиш для обработки взаимодействия с пользователем. Ниже представлены некоторые шаги и примеры кода, которые могут вам помочь.

  1. Использование spellsuggest(): Для получения предложений по исправлению орфографии используйте функцию spellsuggest(), которая возвращает список возможных исправлений для текущего слова.

  2. Создание пользовательской функции: Вы можете создать специальную функцию, которая заполняет окно вашей собственной реализации списка исправлений и устанавливает его в качестве списка быстрого исправления. Вот пример такой функции:

function! ShowSpell() abort
    " Получаем предложения для текущего слова
    let items = spellsuggest(expand("<cword>"))
    " Преобразуем каждое предложение в необходимый формат для quickfix
    let items = items->map({_, v -> {'text': v}})
    " Устанавливаем список быстрого исправления
    call setqflist(items)
    " Открываем окно быстрого исправления
    copen
endf
  1. Маппинг клавиш: Для того чтобы пользователи могли взаимодействовать с вашими предложениями, создайте локальные маппинги клавиш, которые будут позволять им выбирать исправления.
function! SetupSpellMappings()
    nnoremap <silent> <Leader>ss :call ShowSpell()<CR>
    " Можно добавить другие комбинации для выбора и применения исправлений
endfunction

augroup SpellMappings
    autocmd!
    autocmd FileType * call SetupSpellMappings()
augroup END
  1. Дополнительные ссылки на документацию: Полезные команды и темы в Vim, которые могут помочь вам в разработке:
:help special-buffers
:help map-local
:help spellsuggest()
  1. Обратите внимание на производительность: Если вы собираетесь использовать внешние программы для проверки орфографии, такие как aspell или ispell, убедитесь, что ваши маппинги не блокируют основной поток редактирования и не приводят к задержкам.

Таким образом, хотя вы и не сможете напрямую использовать окно быстрой коррекции для отображения предложений по исправлениям, вы можете элегантно обойти это ограничение, предоставив пользователю альтернативный интерфейс для работы с предложениями.

Оцените материал
Добавить комментарий

Капча загружается...