Добавить специфичные для файла хорошие слова во внутренний список слов vim (через моделину)

9

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

Vim может добавлять слова во временный внутренний словарь с помощью ключевой команды zGили :spellgood! {word}. Можно ли сделать то же самое на моделине?

Примером может служить следующий текст, где я хочу, чтобы сокращения «RAS» и «RAP» считались хорошими словами при использовании проверки правописания в vim.

Синдром RAS (сокращение от «синдром синдрома избыточной аббревиатуры»), также известный как синдром PNS («синдром синдрома номера PIN», который расширяется до «синдрома синдрома персонального идентификационного номера») или фраз RAP («фразы фразы избыточной аббревиатуры»), относится к использованию одного или нескольких слов, которые образуют аббревиатуру или инициализм в сочетании с сокращенной формой, таким образом, фактически повторяя одно или несколько слов.

Текст был скопирован с http://en.wikipedia.org/wiki/RAS_syndrome

Чарльз Мареш
источник

Ответы:

6

В настоящее время Vim не предоставляет «родного» механизма для этого, хотя я думаю, что это хорошая идея. Единственное , что я могу думать это , :autocmdчто вызывает функцию , которая ищет специальный раздел в файле , а затем перемещает курсор над словами в этом разделе и триггеров zGс :normalкомандами. Это было бы грязно, и я не хотел бы беспокоиться об этом.

Изменить: Конечно, как-то я упустил из виду существование:spellgood!, хотя это в вашем вопросе. Это делает работу намного более выполнимой. Я придумал базовую реализацию, которую вы можете настроить в соответствии со своими потребностями:

function! AutoSpellGoodWords()
    let l:goodwords_start = search('\C-\*-SpellGoodWordsStart-\*-', 'wcn')
    let l:goodwords_end = search('\C-\*-SpellGoodWordsEnd-\*-', 'wcn')
    if l:goodwords_start == 0 || l:goodwords_end == 0
        return
    endif
    let l:lines = getline(l:goodwords_start + 1, l:goodwords_end - 1)
    let l:words = []
    call map(l:lines, "extend(l:words, split(v:val, '\\W\\+'))")
    for l:word in l:words
        silent execute ':spellgood! ' . l:word
    endfor
endfunction

autocmd BufReadPost * call AutoSpellGoodWords()

Это будет искать блок, который выглядит примерно так:

-*-SpellGoodWordsStart-*-
word1 word2 word3
word4 word5 ...
-*-SpellGoodWordsEnd-*-

И каждое слово , он находит - в этом случае word1, word2, word3, word4, и word5--within блока будет добавить к временному списку хороших слов.

Просто знайте, что я не подвергался стресс-тестированию.

Heptite
источник
Это намного глубже, чем я ожидал, и это сделало бы очень полезный скрипт vim. Я проверил vim.org, но подобных совпадений не было. Спасибо!
Чарльз Мареш