Есть ли способ настроить опцию Vim grepprg, чтобы избежать ожидания, пока внешний инструмент не завершит поиск? - PullRequest
9 голосов
/ 01 февраля 2011

Я давно Виммер.Тем не менее, я продолжаю переключаться на оболочку для поиска.Это позволяет мне не использовать функциональность быстрого исправления.

Основная причина перехода на оболочку заключается в том, что когда я использую grep изнутри Vim (с :grep), я не могу следить за прогрессом.

Потому чтокодовая база, которую я ищу, обычно широка, я действительно ценю немедленную обратную связь.

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

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

Любой намек на то, как воспроизвести этот шаблон внутри Vim, будет принят.

Ответы [ 5 ]

1 голос
/ 08 апреля 2011

Я не вижу того же поведения vim, что и вы.Когда я запускаю :grep, я все еще вижу результаты в vim (а не в быстром исправлении) до завершения поиска (но я ничего не могу сделать, пока поиск не завершен).

Я даже пытался не использовать настройки vimили плагины:

gvim -u NONE -U NONE

Если это не ваше поведение, проверьте ваш grepprg.Моя по умолчанию:

:verbose set grepprg
grepprg=grep -n $* /dev/null

Когда я использую команду grep -e "score" -R /etc, я вижу этот вывод в vim:

:!grep -n -e "score" -R /etc /dev/null 2>&1| tee /tmp/voLcaNS/232

Возможно, ваша система отсутствует teeили ваш vim не использует его (я использую Vim 7.2 в Ubuntu 10.10).tee берет переданный ему текст и записывает его в файл и в стандартный вывод.


Если вы ищете способ обновить Quickfix с результатами поиска и не иметь vim notблокируя во время поиска, вы могли бы написать скрипт, который:

  • выполняет поиск с помощью grep в качестве фонового процесса и перенаправляет в файл
  • каждую секунду до завершения работы grep. Имеет vimзагрузите файл в формате Quickfix (cgetfile) (вы можете указать vim сделать что-то из другого процесса с помощью --remote-expr)

Вы можете попробовать мой плагин AsyncCommand , чтобы получить вашкод запущенОн выполняет вышеуказанное, за исключением того, что он загружает файл только после завершения поиска.

1 голос
/ 03 февраля 2011

Ты вообще знаком с ack.vim ?Он не использует окно быстрого исправления, но использует отдельный буфер в разделении.Тем не менее, результаты быстрее возвращаются к фрейму vim.

0 голосов
/ 23 декабря 2015

Существует три способа поиска во всех проектах.

  • Системная команда grep (быстрая, но плохо работает со списком Ouickfix)

    =>$ grep -n Example *
    
  • Vim внутренний grep (медленный, но с сильной структурой поддержки)

    :vim[grep] /{pattern}/[g][j] {file} ...
    
  • Системный плагин ack (отлично)

    1 install ack

    brew install ack
    

    2 добавьте ниже конфиги к вашему .vimrc

    :set grepprg=ack\ --nongroup\ --column\ $*
    
    :set grepformat=%f:%l:%c:%m
    

    3, затем вы можете использовать grep для вызова ack в vim как

    :grep "object\." app/**/*.rb
    
0 голосов
/ 19 апреля 2011

Это может быть связано с буферизацией между grep и tee, а не с самим vim.Чтобы проверить эту теорию, запустите grep из командной строки и пропустите вывод через tee (т.е. grep <pattern> <files> | tee temp.out).Если он ведет себя так же, как вы наблюдаете в vim, тогда происходит буферизация.

Чтобы обойти эту проблему, установите ожидаемый (sudo apt-get install expect-dev в Ubuntu 10.10) и grepprg в unbuffer grep -n $* /dev/null.(См. Отключить буферизацию в трубе ).

0 голосов
/ 07 апреля 2011

Взгляните на :vimgrep в онлайн-документации.Он отображает имя файла, в котором выполняется поиск, и обновляется по мере его поступления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...