5

vimscript で、現在のファイル内の正規表現のすべての一致を反復処理し、結果ごとにシェル コマンドを実行するにはどうすればよいですか?

これが始まりだと思いますが、ファイル全体をフィードして各一致を取得する方法がわかりません。

while search(ENTIRE_FILE, ".*{{\zs.*\ze}}", 'nw') > 0
    system(do something with THIS_MATCH)
endwhile
4

2 に答える 2

1

次の内容のファイルがあるとします。

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

于 2012-10-23T08:35:48.563 に答える
0

代わりに使用できますsubtitute()。例えば...

call substitute(readfile(expand('%')), '.*{{\zs.*\ze}}', 
    \ '\=system("!dosomething ".submatch(1))', 'g')
于 2012-10-22T23:25:01.330 に答える