我有一个文件,其内容大致类似于
insert into FooBar values (13, 19, 220, 108);
// some text,
// some more text
insert into MixMax values (22, 5, 87, 1);
// and so on
insert into HooHoo values (8, 37, 222, 51);
// etc ...
现在,我想将字符串values (
之后的第一个数字拉入变量,最好是一次性。
我想到了类似:g/values (\(\d\+\)/let @a .= ', ' . submatch(1)
的内容,然后希望注册a
为,13,22,8
。
不幸的是,使用这种方法,我只得到逗号,而不是子匹配,即寄存器的内容是,,,
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
首先,submatch()仅适用于:substitute。
我认为这就是你想要的。最后会有一个额外的逗号。
:let @a=''
:g/values (/normal f(l"Ayf,
:let @a=substitute(@a, ',', ', ', 'g')
答案 1 :(得分:1)
如果你想在一行上做,你可以这样做:
let @a = '' | g/^/let @a .= matchstr(getline('.'), 'values (\zs\d\+, \ze')
:g
部分在每一行上运行其余部分(您可以根据需要进行过滤,但无论如何matchstr
正在执行此操作)。 matchstr
返回当前行的匹配字符串。 \zs
和\ze
分隔实际匹配,因此您无法获得'值('位。
请参阅:
:help matchstr()
:help getline()
:help \zs
:help \ze
:help :bar
答案 2 :(得分:0)
yi(
有什么问题?