Возможно ли использовать grep Vim quickfix?
Итак, скажем, я использую ag.vim для поиска "отключенных" через файлы. Он возвращает мне некоторые результаты в окне quickfix:
1 first_file.rb|1 col 1| disabled something something
2 second_file.rb|1 col 2| disabled another something
Можно ли получить результаты быстрого поиска в виде ввода, grep через него и открыть результаты в новом quickfix? Итак, если бы я ввел :quickfix_grep first_file
, новое quickfix появлялось бы только с 1 записью:
1 first_file.rb|1 col 1| disabled something something
Ответы
Ответ 1
Update
Для этого требования был написан плагин vim: https://github.com/sk1418/QFGrep
Исходный ответ:
Мое понимание вашей цели:
Результат grep как-то огромен в вашем quickfix, вы хотите сузить ваш взгляд на это. введя команду с регулярным выражением, отфильтруйте grep результат. Отфильтрованный результат также должен отображаться в QuickFix чтобы вы могли открыть/перейти к файлу.
Если выше вы хотите, проверьте следующее:
введите эту функцию и командную строку:
function! GrepQuickFix(pat)
let all = getqflist()
for d in all
if bufname(d['bufnr']) !~ a:pat && d['text'] !~ a:pat
call remove(all, index(all,d))
endif
endfor
call setqflist(all)
endfunction
command! -nargs=* GrepQF call GrepQuickFix(<q-args>)
то после того, как ваш grep/ack/все, что отображается в вашем quickfix, вы можете ввести
:GrepQF <regex>
чтобы сделать фильтрацию в вашем quickfix.
Здесь я добавляю анимацию GIF. Я использую Ack
вместо grep
, но это не имеет никакого значения. Данное регулярное выражение будет совпадать с именем файла и текстом, отображаемым в quickfix. Я сделал фильтрацию дважды, чтобы показать это.
![enter image description here]()
надеюсь, что это поможет.
Ответ 2
Мое решение этой проблемы всегда заключалось в том, чтобы создать буфер быстрого исправления
по умолчанию изменен:
:autocmd BufReadPost quickfix set modifiable
Выполнение этого открывает целый ряд возможностей для любого подходящего
редактирование, например добавление комментариев, удаление несвязанных записей вручную или
путем фильтрации с помощью команд :global
и :vglobal
.
Ответ 3
Здесь более короткая и более аккуратная версия ответа @Kent:
function! GrepQuickFix(pat)
call setqflist(filter(getqflist(), "bufname(v:val['bufnr']) !~# a:pat"))
endfunction
command! -nargs=* GrepQF call GrepQuickFix(<q-args>)
Это тот же самый код, просто аккуратный и короткий, я не верю, что он заслуживает отдельного плагина.