在 vimscript 中,如何遍历当前文件中正则表达式的所有匹配项,然后为每个结果运行 shell 命令?
我认为这是一个开始,但我不知道如何将整个文件提供给它并获得每场比赛。
while search(ENTIRE_FILE, ".*{{\zs.*\ze}}", 'nw') > 0
system(do something with THIS_MATCH)
endwhile
在 vimscript 中,如何遍历当前文件中正则表达式的所有匹配项,然后为每个结果运行 shell 命令?
我认为这是一个开始,但我不知道如何将整个文件提供给它并获得每场比赛。
while search(ENTIRE_FILE, ".*{{\zs.*\ze}}", 'nw') > 0
system(do something with THIS_MATCH)
endwhile
假设我们有一个包含内容的文件:
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
你可以subtitute()
改用。例如...
call substitute(readfile(expand('%')), '.*{{\zs.*\ze}}',
\ '\=system("!dosomething ".submatch(1))', 'g')