ファイル固有の適切な単語を内部vim単語リストに追加する(モードライン経由)


9

モードラインを介してvimの内部ワードリストに正しく綴られた単語を追加することは可能ですか?または別のファイル固有の方法?

Vimは、キーコマンドzGまたはを使用して、一時的な内部単語リストに単語を追加できます:spellgood! {word}。モードラインでも同じことができますか?

例としては、vimのスペルチェックを使用するときに、頭字語「RAS」と「RAP」を適切な単語と見なしたい場合のテキストを次に示します。

RASシンドローム(「冗長頭字語シンドローム」の略)、PNSシンドローム(「PINナンバーシンドロームシンドローム」、「個人識別番号シンドロームシンドローム」に拡張)またはRAPフレーズ(「冗長頭字語シンドロームフレーズ」)としても知られています。略語と組み合わせて頭字語または頭文字を構成する1つまたは複数の単語を使用することを指します。したがって、1つまたは複数の単語を繰り返すことになります。

テキストは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-*-

そして、各単語は、それが見つかった-この場合には、word1word2word3word4、およびword5ブロック--withinそれは一時的な良い単語リストに追加されます。

私がこれをストレステストしていないことに注意してください。


これは私が予想していたよりも深く、非常に便利なvimスクリプトになります。vim.orgを確認しましたが、類似する一致はありませんでした。ありがとう!
Charles Maresh 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.