在vim中,有没有办法:只有在没有设置的情况下才设置选项?

sta*_*tti 5 vim configuration editor

具体来说,我只想在尚未更改的情况下设置makeprg选项.有什么办法吗?

Pri*_*ash 5

您可以使用 访问选项的内容&。因此,在这种情况下,您可以检查该选项是否为“空”,如下所示:

if &makeprg == ""
    set makeprg=new_value
endif
Run Code Online (Sandbox Code Playgroud)

- - 编辑 - -

Xavier 提出了一个很好的观点,即 的默认值makeprg不是空字符串。您可以使用set {option}&将选项设置为其默认值,因此仅当当前值为默认值时,才可以使用以下命令更改该值:

function! SetMakePrg( new_value )
    let cur_value=&makeprg
    " let new_val=a:new_value
    set makeprg& 
    if &makeprg == cur_value
        " cur_value is default: set to new value
        exe "set makeprg=" . a:new_value
    else
        " cur_value is not default: change it back
        exe "set makeprg=" . cur_value
    endif
endfunction
Run Code Online (Sandbox Code Playgroud)

call SetMakePrg("my_make")因此,仅当该选项当前不是默认值时,调用才会修改该选项。

  • 我不确定 makeprg 的默认值是否为空,我猜默认值是“make”(但它可能会根据操作系统等而有所不同)。`:verbose set makeprg?` 返回 makeprg=make 没有文件名,所以我猜这个表示它是默认值。 (2认同)