vimscript で、現在のファイル内の正規表現のすべての一致を反復処理し、結果ごとにシェル コマンドを実行するにはどうすればよいですか?
これが始まりだと思いますが、ファイル全体をフィードして各一致を取得する方法がわかりません。
while search(ENTIRE_FILE, ".*{{\zs.*\ze}}", 'nw') > 0
system(do something with THIS_MATCH)
endwhile
vimscript で、現在のファイル内の正規表現のすべての一致を反復処理し、結果ごとにシェル コマンドを実行するにはどうすればよいですか?
これが始まりだと思いますが、ファイル全体をフィードして各一致を取得する方法がわかりません。
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
1 行に 1 つの一致しかない場合は、 を使用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')