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
Повторите и полоскайте для нескольких поисков/процессов.