vim:如何使用相同的密钥循环选项列表?

时间:2012-08-17 13:10:58

标签: vim

我想循环查看拼写检查的语言列表,例如

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

只需一次按键 一个显而易见的方法是将每个这些都放在一个单独的键上,比如F1到F5。但这对我所拥有的几个功能键很难。所以我尝试将它们放在一个功能键上,它将重新映射以在列表中循环。但事实证明,映射的长度会随着O(N ^ 2)而增加。我相信有一种更优雅的方法可以通过vim函数实现这一点,我确信它可以在变量中的某个位置保持状态。可悲的是,我的vim编程功能还不足以解决这个问题。 (不,我不想在gvim中使用菜单。)

1 个答案:

答案 0 :(得分:4)

试试这个:

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