3

スペルチェックのために言語のリストを循環させたい、例えば

:setlocal spell spelllang=en_EN
:setlocal spell spelllang=en_US
:setlocal spell spelllang=de
:setlocal spell spelllang=fr
:setlocal nospell

単一のキープレスで。
1 つの明白な方法は、F1 から F5 のように、これらのそれぞれを個別のキーに配置することです。しかし、これは私が持っている貴重な数個のファンクション キーにとっては難しいことです。そこで、リストを循環するように自分自身を再マップする1 つのファンクション キーにそれらを配置しようとしました。しかし、マッピングの長さは O(N^2) で増加することがわかりました。vim関数を使用してこれを実現するよりエレガントな方法があると思います。これは、変数のどこかに状態を保持できると確信しています。悲しいことに、私の vim プログラミング fu は、これに取り組むのに十分に開発されていません。(いいえ、gvim でメニューを使いたくありません)。

4

1 に答える 1

5

これを試して:

nnoremap <F2> :call CycleLang()<CR>

fun! CycleLang()
    let langs = ['', 'en_gb', 'en_us', 'de', 'fr']

    let i = index(langs, &spl)
    let j = (i+1)%len(langs)
    let &spl = langs[j]

    if empty(&spl)
        set nospell
    else
        set spell
    endif
endfun
于 2012-08-17T13:29:10.747 に答える