Додайте конкретні хороші слова до внутрішнього списку слів vim (через modeline)


9

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

Vim може додавати слова до тимчасового внутрішнього списку слів за допомогою клавіші key zGабо :spellgood! {word}. Чи можна те ж саме зробити на моделіні?

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

Синдром RAS (скорочення «синдром надлишкового акроніму»), також відомий як синдром PNS («синдром синдрому ПІН-номера», який розширюється до «синдром синдрому персонального ідентифікаційного номера») або фрази 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 блоку буде додати до тимчасового списку хороших слів.

Просто майте на увазі, що я цього не піддавав стресу.


Це більш глибоко, ніж я очікував, і це дозволить зробити дуже корисний сценарій vim. Я перевірив vim.org, але подібних збігів не було. Дякую!
Чарльз Мареш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.