vim - 在新分頁中開啟包含特定字串的文件

vim - 在新分頁中開啟包含特定字串的文件

我正在尋找一種方法在新的 vim 選項卡中打開包含特定字串的所有檔案。

這些檔案並不位於特定目錄中,而是分散在目錄樹中。

理想情況下,我想跳到每個文件中字串匹配的位置。

如果可以在 vim 中執行就更好了

答案1

這並不完全是您要查找的內容,但您可以找到包含您的字串的所有文件,如下所示:

:grep -r "string" directory

然後使用以下命令瀏覽結果:

:copen

打開一個quickfix包含結果的窗口,然後您可以在列表中向上/向下移動,然後按<CR>將該文件加載到新緩衝區中的匹配行處。

這是 vim 的 grep 方式。當然,你可以使用:vimgrep,或使用Grep 插件或者確認插件。 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 shell 開啟包含 shell glob 模式字串的文件,"*backup-file.*.sh"請使用以下 oneliner (是的,只要遵守單引號,您就可以修改 find 命令

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

相關內容