目前,通过检查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"
,该功能也不起作用。
答案 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