Tambahkan file kata-kata baik spesifik ke daftar kata vim internal (melalui modeline)

9

Apakah mungkin untuk menambahkan kata-kata yang dieja dengan benar ke daftar kata internal vim melalui modeline? Atau metode khusus file lain?

Vim dapat menambahkan kata-kata ke daftar kata-kata sementara sementara melalui perintah kunci zGatau :spellgood! {word}. Bisakah hal yang sama dilakukan pada modeline?

Contoh akan mengikuti teks di mana saya ingin akronim "RAS" dan "RAP" dianggap kata-kata yang baik ketika menggunakan ejaan memeriksa vim.

Sindrom RAS (kependekan dari "sindrom sindrom akronim redundan"), juga dikenal sebagai sindrom PNS ("sindrom sindrom nomor PIN", yang berkembang menjadi "sindrom nomor sindrom nomor identifikasi pribadi") atau frasa RAP ("frase frase akronim berlebihan"), mengacu pada penggunaan satu atau lebih dari kata-kata yang membentuk akronim atau inisialisasi dalam hubungannya dengan bentuk yang disingkat, sehingga berlaku mengulangi satu atau lebih kata.

Teks disalin dari http://en.wikipedia.org/wiki/RAS_syndrome

Charles Maresh
sumber

Jawaban:

6

Saat ini Vim tidak menyediakan mekanisme "asli" untuk melakukan ini, meskipun saya pikir itu ide yang bagus. Satu-satunya hal yang dapat saya pikirkan adalah :autocmdfungsi panggilan yang mencari bagian khusus dalam file dan kemudian memindahkan kursor ke kata-kata di bagian itu dan memicu zGdengan :normalperintah. Ini akan berantakan dan saya akan enggan repot-repot dengan itu.

Sunting: Tentu saja, entah bagaimana saya mengabaikan keberadaan:spellgood!, meskipun itu ada dalam pertanyaan Anda. Ini membuat pekerjaan jauh lebih layak. Saya datang dengan implementasi dasar yang dapat Anda sesuaikan dengan kebutuhan Anda:

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()

Ini akan mencari blok yang terlihat seperti ini:

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

Dan setiap kata yang ditemukan - dalam hal ini, word1, word2, word3, word4, danword5 --within blok itu akan menambah daftar kata-kata yang baik sementara.

Ketahuilah bahwa saya belum menguji stres ini.

Heptite
sumber
Ini lebih mendalam dari yang saya harapkan, dan itu akan membuat skrip vim yang sangat berguna. Saya memang memeriksa vim.org, tetapi tidak ada kecocokan serupa. Terima kasih!
Charles Maresh