在vimscript中,如何遍历当前文件中正则表达式的所有匹配项,然后为每个结果运行shell命令?
我认为这是一个开始但我无法弄清楚如何将整个文件提供给每个匹配。
while search(ENTIRE_FILE, ".*{{\zs.*\ze}}", 'nw') > 0
system(do something with THIS_MATCH)
endwhile
答案 0 :(得分:1)
假设我们有一个包含内容的文件:
123 a shouldmatch
456 b shouldmatch
111 c notmatch
我们喜欢匹配
123 a shouldmatch
456 b shouldmatch
使用正则表达式
.*shouldmatch
如果每行只有一个匹配项,则可以使用readfile()
,然后遍历这些行,并使用matchstr()
检查每一行。 [1]
function! Test001()
let file = readfile(expand("%:p")) " read current file
for line in file
let match = matchstr(line, '.*shouldmatch') " regex match
if(!empty(match))
echo match
" your command with match
endif
endfor
endfunction
您可以将此功能放在~/.vimrc
中,并使用call Test001()
进行调用。
[1] http://vimdoc.sourceforge.net/htmldoc/eval.html#matchstr%28%29
答案 1 :(得分:0)
您可以使用subtitute()
代替。例如......
call substitute(readfile(expand('%')), '.*{{\zs.*\ze}}',
\ '\=system("!dosomething ".submatch(1))', 'g')