![vim - 特定の文字列を含むファイルを新しいタブで開く](https://rvso.com/image/1365800/vim%20-%20%E7%89%B9%E5%AE%9A%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E5%90%AB%E3%82%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%96%B0%E3%81%97%E3%81%84%E3%82%BF%E3%83%96%E3%81%A7%E9%96%8B%E3%81%8F.png)
特定の文字列を含むすべてのファイルを新しい vim タブで開く方法を探しています。
ファイルは特定のディレクトリ内ではなく、ディレクトリ ツリー全体に分散されています。
理想的には、各ファイル内の文字列が一致する位置にジャンプしたいです。
vim内で実行できればさらに良い
答え1
答え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'\''`'