Подтвердить что ты не робот

Возможно ли использовать 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
4b9b3361

Ответ 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>)

Это тот же самый код, просто аккуратный и короткий, я не верю, что он заслуживает отдельного плагина.