如何通过检查拼写是否打开来创建用于切换拼写和语法的Vim函数?

时间:2014-04-17 05:57:38

标签: vim

目前,通过检查spell选项关闭,以下工作原理:

function ToggleSpell()
    if &spell ==# "nospell"
        syntax off
        set spell
        echom "spelling is now on; syntax disabled"
    else
        set nospell
        syntax on
        echom "spelling is now off; syntax enabled"
    endif
endfunction

但是,检查spell 的以下内容似乎不起作用,这让我感到困惑。

function! ToggleSpell()
    if &spell ==# "spell"
        set nospell
        syntax on
        echom "spelling was on ... turning off"
    else
        syntax off
        set spell
        echom "spelling was off ... turning on"
    endif
endfunction

:set spell?开启时,当我在Vim上spell时,我得到前面有两个空格的spell,我怀疑这是问题的一部分;但是,即使我在检查相等性时修改上述内容以读取" spell",该功能也不起作用。

3 个答案:

答案 0 :(得分:2)

对于布尔选项(spell / nospell),:set的输出与将选项视为特殊变量(&spell)不同。后者的计算结果为0/1(表示Vim中的布尔值),因此您不应将其与字符串进行比较:

if &spell
    ...

您的功能的第一个版本有效,这是一个意外。与数字进行比较时,"拼写"和" nospell"转换为0,因此在函数的两个版本中,条件在逻辑上等效于

if &spell ==# 0

答案 1 :(得分:1)

您可以通过测试等于1(或未设置为0)来检查是否设置了选项:

if (&spell == 1)

答案 2 :(得分:1)

要切换拼写检查,您可以使用!功能

中的内置版本 例如,您可以使用一个命令来打开和关闭拼写检查

set spell!

但是syntax on没有此功能,但您可以通过

获得相同的结果

if exists("g:syntax_on") | syntax off | else | syntax enable | endif

查看http://vimdoc.sourceforge.net/htmldoc/syntax.html了解详情