vim:如何使用相同的键循环浏览选项列表?

Jen*_*ens 3 vim

我想循环浏览用于拼写检查的语言列表,例如

:setlocal spell spelllang=en_EN
:setlocal spell spelllang=en_US
:setlocal spell spelllang=de
:setlocal spell spelllang=fr
:setlocal nospell
Run Code Online (Sandbox Code Playgroud)

只需一个按键。
一种明显的方法是将每个键放在一个单独的键上,例如 F1 到 F5。但这对我拥有的宝贵的少数功能键来说很难。所以我试着把它们放在一个功能键上,它会重新映射自己以在列表中循环。但事实证明,映射的长度会随着 O(N^2) 增加。我相信有一种更优雅的方法可以使用 vim 函数来实现这一点,我确信它可以将状态保存在变量中的某个地方。可悲的是,我的 vim 编程功能还没有开发到足以解决这个问题。(不,我不想在 gvim 中使用菜单)。

kev*_*kev 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
Run Code Online (Sandbox Code Playgroud)

  • 它使我成为 [受信任的用户](http://stackoverflow.com/privileges/trusted-user)。:) (2认同)