
特定の文字列を含むすべてのファイルを新しい 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'\''`'