8

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

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

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

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

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

1 ответ1

5

В настоящее время 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 внутри блока, которое будет добавлено во временный список хороших слов.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .