VIM: Как сохранить результаты grep в буфере

Я хочу отлаживать процесс, поэтому я привязал strace к процессу и перенаправил вывод в файл, а затем выполнил операцию. Во время процесса он создал много процессов. Итак, вот что я хочу сделать, я хочу выбрать все системные вызовы, выполняемые процессом. Для этого я использовал команду grep с шаблоном как pid:

:grep pid %

Он показывает результат, но я не могу пройти через результат, он promts

Press ENTER or type command to continue

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

Я хотел бы найти результат и сохранить его в буфере.

Ответы

Ответ 1

Вы можете перейти к более старым запросам и вернуться обратно:

:copen
:colder " goes to older
:cnewer " newer

Вы можете выполнить другой поиск, используя lvimgrep (использует окно местоположения):

:lopen
:lnext
etc...

Он также имеет историю:

:lolder
:lnewer

Вы можете прочитать в любом буфере:

:r!grep bla **/*.cs

Наконец, любая команда, выдающая вывод, может быть перенаправлена ​​командой redir:

:redir >> file
:grep bla **/*.cs
:redir END

См. :he redir для многих способов его использования (перенаправление на регистры или переменные).

Ответ 2

За годы чтения всех видов журналов я узнал этот маленький трюк:

:%!grep pattern

Он просто заменяет содержимое текущего буфера grep-выходом (поэтому, чтобы вернуться к исходным журналам, вам нужно просто нажать u).

Вы также можете использовать его с другими инструментами:

:%!ack pattern %
:%!ag pattern %

Для меня это самое простое и лучшее решение для быстрого grepping больших файлов в Vim, и я очень удивлен, что никто никогда не упоминал об этом.

Ответ 3

Я думал, что результаты :grep были сохранены по умолчанию в окне quickfix.

Попробуйте использовать :copen после запуска команды grep. Я ожидаю, что вы найдете там свои результаты.

(: cclose, чтобы закрыть окно quickfix)

На самом деле это не буфер, но пока вы не начинаете другой поиск, ваш список результатов останется нетронутым.

Вы можете "выдернуть" содержимое окна quickfix в новый буфер.

  • Перейдите в quickfix с помощью :copen
  • Загрузите содержимое yG
  • откройте новый буфер с помощью :new
  • Вставьте содержимое с помощью p
  • Сохраните его с помощью :w Process1.txt

Повторите и полоскайте для нескольких поисков/процессов.