vim — открытие файлов, содержащих определенную строку, в новых вкладках

vim — открытие файлов, содержащих определенную строку, в новых вкладках

Я ищу способ открыть все файлы, содержащие определенную строку, в новых вкладках Vim.

Файлы не находятся в определенном каталоге, а разбросаны по дереву каталогов.

В идеале я хочу перейти к позиции совпадения строки в каждом файле.

Еще лучше, если это можно будет выполнить в vim.

решение1

Это не совсем то, что вы ищете, но вы можете найти все файлы, содержащие вашу строку, следующим образом:

:grep -r "string" directory

а затем просмотрите результаты, используя:

:copen

откроется quickfixокно с результатами, после чего вы сможете перемещаться вверх/вниз по списку и нажимать , <CR>чтобы загрузить файл на совпадающей строке в новый буфер.

Это способ grepping в vim. Конечно, вы можете использовать :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

Чтобы открыть файлы, содержащие "*backup-file.*.sh"строку шаблона shell glob, прямо из оболочки bash, используйте следующий однострочник (да, вы можете изменить команду find, если вы соблюдаете правила заключения в одинарные кавычки)

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

Связанный контент