我正在寻找一种方法来在新的 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"
请使用以下一行代码(是的,您可以修改 find 命令,只要您遵守单引号
# in bash
vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'