2009-12-02 3 views
2

Я использую gvim. С помощью vimgrep в текущем каталоге найдите текст в файлах *.sql. Когда он ищет файлы, он просто показывает мне имя файла за раз и в конце открывает один файл.Как открыть несколько файлов в vim после vimgrep

Можно ли открыть все файлы в виде вкладок? В основном я хочу открыть все файлы, потому что я хочу заменить шаблон «vimgrepped» другим текстом.

+0

Это немного сложно, потому что в списке quickfix хранятся местоположения, а не только файлы. –

+0

, так что я должен просто искать и заменять несколько файлов? и забыть об их открытии .. – Omnipresent

+0

Мне все еще нужен список имен файлов, которые были затронуты. – Omnipresent

ответ

1

Для автоматизации действий на местах списка QuickFix, я написал команду , похожей на :bufdo или :windo, который выполняет команду для каждого элемента.

command! -nargs=+ Qfixdo call QuickFixDo(<q-args>) 
function! QuickFixDo(cmd) 
    let bufnam = {} 
    for q in getqflist() 
     let bufnam[q.bufnr] = bufname(q.bufnr) 
    endfor 
    for n in keys(bufnam) 
     exe 'buffer' n 
     exe a:cmd 
     update 
    endfor 
endfunction 

С помощью функции можно открыть все файлы, указанные в списке QuickFix по следующей команде.

:Qfixdo tab sp 

Кроме того, аналогично можно повторить подстановку.

:Qfixdo %s/pattern/string/ 
+0

Мне нравится это решение, но, пожалуйста, [примите кредит] (http://stackoverflow.com/questions/4792561/how-to-do-search-replace-with-ack-in-vim/4793316#4793316). – nelstrom

+0

@nelstrom: Ого! Интересно посмотреть, как думать, что способ Vim может дать почти одинаковые решения аналогичных проблем. Тем не менее, я сам придумал эту функцию, поэтому кредит на этот конкретный ответ объясняется не Al, хотя код действительно очень похож. –

+0

@ib мои извинения. Кажется глупым, что у Vim нет встроенного * quickfixdo *, учитывая, что у него есть 'bufdo',' windo', 'tabdo' и' argdo'. – nelstrom

Смежные вопросы