
我正在尋找一種方法在新的 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 shell 開啟包含 shell glob 模式字串的文件,"*backup-file.*.sh"
請使用以下 oneliner (是的,只要遵守單引號,您就可以修改 find 命令
# in bash
vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'