Выбор результирующих файлов из grep в vim

После запуска grep-поиска в vim с помощью: grep, я получаю список файлов. Есть ли способ выбрать один из этих файлов и открыть его на новой вкладке в этой конкретной строке?

Ответ 1

Для достижения того, что вы хотите, вы должны открыть окно quickfix/error после вызова grep:

:copen

У меня есть script, который делает это для меня каждый раз, когда я использую grep.

Ответ 2

Только для полноты, а также команды :copen также есть :cw, который открывает окно "quickfix", если есть записи (поэтому, если ваш grep не имеет результатов, он не появится).

Я думаю, что самый простой способ (без определения сопоставления) открытия файлов на новой вкладке:

:cw                " Open the quickfix window
Ctrl-W T           " Switch the window into a new tab
<ENTER>            " Open the file/line

В качестве альтернативы вы можете сделать:

:cw                " Open the quick fix window
Ctrl-W <ENTER>     " Open the file/line in a new window
Ctrl-W T           " Move the new window to a new tab

Если вы хотите сделать это по умолчанию, возможно, вы можете использовать autocmds BufEnter и BufLeave для создания и удаления отображения при входе и выходе из окна quickfix; однако это, вероятно, не тривиально.

:help :cw
:help :copen
:help quickfix

Ответ 3

Если вы получаете список файлов, вы можете просматривать их по древовидному виду через

:cn
:colder

Для получения дополнительной информации

:help grep

и прокрутите до нижней части записи

Ответ 4

Я наткнулся на эту тему, ища ответ на очень похожий вопрос. Ответ, представленный выше, хотя и правильный, не смог описать удобный способ открытия ВСЕХ файлов в окне QuickFix сразу... в буферах или вкладках.

Кажется, что нет встроенной команды, но это тривиально, как плагин VIM... кто-то сделал это здесь http://pastebin.com/J9RwciFQ

Это 12 строк кода (одна функция)..., вставленных здесь, чтобы сохранить клик во время анализа. Следуйте ссылке pastebin, если вы попытаетесь реализовать это, хотя... мой плагин установлен в каталог патогенов, и я немного модифицировал плагин из оригинала (подробности после кода).

~/.v/b/v/p/quickfixopenall.vim
" Create command
command! QuickFixOpenAll :call StartQuickFixOpenAll()

function!  StartQuickFixOpenAll()
    if empty(getqflist())
        return
    endif
    let s:prev_val = ""
    for d in getqflist()
        let s:curr_val = bufname(d.bufnr)
        if (s:curr_val != s:prev_val)
            exec "edit " . s:curr_val
        endif
        let s:prev_val = s:curr_val
    endfor
endfunction

Итак, как только у меня есть результат grep, я доволен... у плагина есть функция: QuickFixOpenAll... Мне пришлось модифицировать плагин как заданный (добавлена ​​следующая строка в quickfixplugin.vim). И я переименовал его заданную функцию StartQuickFixOpenAll...

 " Create command
 command! QuickFixOpenAll :call StartQuickFixOpenAll()

Затем у вас есть все файлы в результате grep open в виде буферов... если вы хотите запускать любые операции commeon, такие как find/replace, вы можете префикс регулярной команды с помощью команды bufdo, которая будет выполнять вашу команду в все... в VIM типа "help bufdo"

Вы можете довольно тривиально модифицировать этот плагин, если вы хотите использовать вкладки... он использует начальное "редактирование"... просто замените его на "tabe" и: QuickFixOpenAll откроет каждый буфер результатов на новой вкладке.