Vim 如何使替代独立于';gdefault';?

Vim 如何使替代独立于';gdefault';?,vim,Vim,我正在写一个小的Vim脚本。根据选项gdefault,替换需要包含/g或不包含/g 如何使替换独立,而不考虑用户的设置 除了测试gdefault外,还有更好的方法吗?我不确定您到底在问什么,但典型的方法是保存use'rs'选项设置,将选项更改为您想要的,执行命令,然后恢复用户设置。例如: let user_gdefault = &gdefault set nogdefault s/something/something else/g let &gdefault = user_gd

我正在写一个小的Vim脚本。根据选项gdefault,替换需要包含/g或不包含/g

如何使替换独立,而不考虑用户的设置


除了测试gdefault外,还有更好的方法吗?

我不确定您到底在问什么,但典型的方法是保存use'rs'选项设置,将选项更改为您想要的,执行命令,然后恢复用户设置。例如:

let user_gdefault = &gdefault
set nogdefault
s/something/something else/g
let &gdefault = user_gdefault
如果您想做得更好,请使用try/finally结构:

let user_gdefault = &gdefault
try
    set nogdefault
    s/something/something else/g
finally    
    let &gdefault = user_gdefault
endtry

使替换独立于gdefault的另一种方法是使用substitute()函数

例如:

call setline('.', substitute(getline('.'), 'something', 'somethingelse', 'g'))

substitute()函数独立于gdefault。此函数中的模式匹配始终表现为设置了magic选项,而cpoptions为空。但是,它仍然遵循ignorecase。

您理解的意思是正确的。基本上,我是在询问是否有一种方法可以让替代动作(比如gdefault一直处于打开状态)/(关闭状态),而无需询问。(类比:比较运算符==,==#,==?另一种方式:
执行's/somthing/somethingelse/'。(&gdefault'g':'')
@tungd-当然更好!好主意。