在Ruby的"gsub"和Vim的替换命令中,"g"代表什么?

Nat*_*ong 12 ruby regex vim

Ruby和Vim都使用"g"和替换命令来表示"所有出现"."g"代表什么?

具体来说,在Ruby中,String类有两个"子"命令:sub将仅替换第一个匹配项,gsub并将替换所有匹配项.例如:

string = "One potato, two potato, three potato, four."
string.sub('potato','banana') # => "One banana, two potato, three potato, four."
string.gsub('potato','banana') # => "One banana, two banana, three banana, four."
Run Code Online (Sandbox Code Playgroud)

类似地,在Vim中,:%s/foo/bar将查看整个文件(这%意味着什么)并且每行替换一个事件,但是:%s/foo/bar/g将在每一行上执行所有事件.

我的猜测是,在这两种情况下,"g"意味着"贪婪",因为Ruby命令和Vim命令都接受正则表达式,但我对贪婪匹配的理解是"匹配符合这些条件的最长子字符串",而不是"匹配尽可能多的子串." (参见" 注意贪婪! ")

Mic*_*ohl 16

如果我没记错,这意味着global,这个Wiki页面似乎证实:

g标志表示全局 - 行中的每个事件都会更改,而不仅仅是第一个.


tjm*_*tjm 6

我认为它代表"全球化".

继VIM的帮助下,从:help :s:help s_flags:help gdefault说:

'gdefault' 'gd'         boolean (default off)
                        global
Run Code Online (Sandbox Code Playgroud)