1

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

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

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

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

3 ответа3

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
2

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

:grep -r "string" directory

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

:copen

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

Это VIM способ подделки. Конечно, вы можете использовать :vimgrep вместо этого, или использовать плагин Grep или плагин Ack. Плагин ack имеет возможность открывать результат в новой вкладке, если вы нажмете t вместо <CR> в строке результатов.

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .