vim-在新选项卡中打开包含特定字符串的文件

vim-在新选项卡中打开包含特定字符串的文件

我正在寻找一种方法来在新的 vim 选项卡中打开所有包含特定字符串的文件。

这些文件不在特定的目录中,而是分散在目录树中。

理想情况下,我想跳转到每个文件中字符串匹配的位置。

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

答案1

它并不完全是您要找的内容,但您可以按如下方式找到包含您的字符串的所有文件:

:grep -r "string" directory

然后使用以下方法浏览结果:

:copen

打开一个quickfix包含结果的窗口,然后您可以在列表中向上/向下移动,然后按下<CR>以在新缓冲区中的匹配行加载该文件。

这是 vim 的 grepping 方式。当然,你可以使用:vimgrep其他方式,或者使用Grep 插件或者Ack 插件。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"请使用以下一行代码(是的,您可以修改 find 命令,只要您遵守单引号

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

相关内容