vim - 特定の文字列を含むファイルを新しいタブで開く

vim - 特定の文字列を含むファイルを新しいタブで開く

特定の文字列を含むすべてのファイルを新しい vim タブで開く方法を探しています。

ファイルは特定のディレクトリ内ではなく、ディレクトリ ツリー全体に分散されています。

理想的には、各ファイル内の文字列が一致する位置にジャンプしたいです。

vim内で実行できればさらに良い

答え1

まさに探しているものではありませんが、次のようにして文字列を含むすべてのファイルを見つけることができます。

:grep -r "string" directory

次に、以下を使用して結果を参照します。

:copen

quickfix結果を含むウィンドウが開き、リスト内を上下に移動して、 を押すと、<CR>一致した行のファイルが新しいバッファに読み込まれます。

これはvimのgrep方法です。もちろん、代わり:vimgrepに、またはGrepプラグインまたはAckプラグインack プラグインには、結果行で のt代わりにを押すと、結果を新しいタブで開く機能があります。<CR>

答え2

.vimrc ファイルに次のコードを追加できます。

com! -nargs=+ PatternFilesToTabs call s:PatternFilesToTabs(<q-args>)

function! s:PatternFilesToTabs(pattern)
    let savelz=&lz
    let savlast=@#
    let savfile=@%
    let hash={}
    let files=[]
    sil! redir => result
    exec 'sil! grep ' . a:pattern . ' -r .'
    sil! redir end
    for line in split(result, '\n')
        if (match(line, ':\d\+:') > 0)
            let filen=substitute(line, ':.*', '', '')
            if (!has_key(hash,filen))
                let hash[filen] = 1
                let files += [ filen ]
            endif
        endif
    endfor
    for filen in files
        exec 'sil! tabedit ' . filen
        1
        sil! call search(a:pattern)
    endfor
    exec 'sil! tabp ' . len(files)
    exec 'sil! edit ' . savlast
    exec 'sil! edit ' . savfile
    let &lz=savelz
endfunction

答え3

bashシェルから直接シェルグロブパターン文字列を含むファイルを開くには、"*backup-file.*.sh"次のワンライナーを使用します(はい、シングルクォーテーションに従う限り、findコマンドを変更できます)。

   # in bash
   vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'

関連情報