2016-05-07 11 views
0

私はVimを終了した場合、その後のgrep結果は、端末/ bashのウィンドウの表示を得ているMysplitを実行した後、vimのスクリプトでvimスクリプト:Vimエディタを終了した後、grepが端末に出力を表示しないようにする方法。

function! SearchFname(fname) 
execute "silent! grep!" a:fname "~/Index.files" 
let l:file = getqflist() 
for l:item in l:file 
    execute 'vsplit' l:item["text"] 
endfor 
endfunction 
command! -nargs=* Mysplit call SearchFname('<args>') 

をコマンドを次のようしています。 bashウィンドウで結果を見るのを避けるために、grepコマンドをバックグラウンドで実行するには?
ターミナル/ bashウィンドウをスクロールした後でもそれを見てはいけません。関数grepの後にgetqflist()関数を使用していますので、解決策がgetqflist()の使用に影響しないようにしてください。

ご協力いただければ幸いです。

答えて

2

あなたが画面を埋めずに変数に外部コマンドの出力を得るためにsystem()またはsystemlist()を使用することができます。

let myvar = system("grep foo somefile.txt") 

しかし、あなたがすべてでgrepgetqflist()を使用する理由私は得ることはありません。ここでははるかに簡単な選択肢です:

function! SearchFname(fname) 
    let files = filter(readfile("~/Index.files"), 'v:value =~ a:fname') 
    for file in files 
     execute 'vsplit' file 
    endfor 
endfunction 

--- EDIT ---

あなたはファイル名にマッチを制限する必要がある場合、代わりにこのバージョンを試してみてください。

function! SearchFname(fname) 
    let files = filter(readfile("~/Index.files"), 'fnamemodify(v:val, ":t") =~ a:fname') 
    for file in files 
     execute 'vsplit' file 
    endfor 
endfunction 

あなたの場合は、絶対に適切なVimパターンの代わりにグロブを使用したい場合は、次のバージョンを試してください:

function! SearchFname(fname) 
    let pat = substitute(a:fname, "\*", ".*", "g") 
    let files = filter(readfile("~/Index.files"), 'fnamemodify(v:val, ":t") =~ pat') 
    for file in files 
     execute 'vsplit' file 
    endfor 
endfunction 
+0

実際、Index.filesファイルには、プロジェクトのすべてのファイルと、私は:filenameにのみ:fnameを記述しており、:fnameにリテラル '*'を使用してファイル名を検索することができます。 これを実行するには、「実行」サイレント!grep!を使用しています。 '、'、 '、'、 '、'、 '、'、 '、'、 ' '[^ /]'、 'g')。 "$"〜/ Index.files' あなたのアプローチで同じことをする方法。私の以前の質問[http://stackoverflow.com/questions/36878144/vimrc-function-to-search-filename-using-literal-in-a-file-which-has-list-of/36955846?noredirect=1# comment61711091_36955846] – ypp

+0

'=〜'は 'a:fname:'を正規表現として扱うので、 'file'がどのくらい長く/複雑であっても' a:fname'を 'file'で見つけるでしょう。ファイル名のみが使用されていることを確認するには、 'fnamemodify(v:val、 ":t")=〜a:fname'という式を使用します。 – romainl

+0

'mac _ * _ main.c'としてfnameを渡しましたが、'〜/ Index.files'から 'mac_cfg_main.c'にマッチするはずですが、変数' files'の値は 'mac_cfg_main.c ' – ypp

関連する問題