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

如何通过检查拼写是否打开来创建用于切换拼写和语法的Vim函数?,vim,Vim,目前,通过检查“拼写”选项是否已关闭,以下操作有效: 然而,下面检查拼写是否开启的代码似乎不起作用,这让我很困惑 function! ToggleSpell() if &spell ==# "spell" set nospell syntax on echom "spelling was on ... turning off" else syntax off set 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

当我这么做的时候:设置咒语?在Vim上,当咒语开启时,我会得到前面有两个空格的咒语,我怀疑这是问题的一部分;但是,即使我在检查相等时修改了上述内容以读取拼写,该函数也不起作用。

您可以通过使用1或0测试未设置的相等来检查是否设置了选项:

if (&spell == 1)

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

if (&spell == 1)

要切换拼写检查,您可以使用内置!特征

例如,您可以使用一个命令打开和关闭拼写检查

设置咒语

然而,syntax on没有这个特性,但是您可以通过

if existsg:syntax|u on | syntax off | else | syntax enable | endif


查看详细信息

切换拼写检查,您可以使用内置!特征

例如,您可以使用一个命令打开和关闭拼写检查

设置咒语

然而,syntax on没有这个特性,但是您可以通过

if existsg:syntax|u on | syntax off | else | syntax enable | endif

查看详细信息

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

if &spell
    ...
函数的第一个版本能够正常工作是一个意外。与数字比较时,拼写和nospell都转换为0,因此在函数的两个版本中,条件在逻辑上都等效于

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

if &spell
    ...
函数的第一个版本能够正常工作是一个意外。与数字比较时,拼写和nospell都转换为0,因此在函数的两个版本中,条件在逻辑上都等效于

if &spell ==# 0