VIM: Как сохранить результаты grep в буфере - PullRequest
16 голосов
/ 16 июня 2011

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

:grep pid %

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

Press ENTER or type command to continue

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

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

Ответы [ 3 ]

27 голосов
/ 25 июля 2014

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

:%!grep pattern

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

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

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

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

15 голосов
/ 16 июня 2011

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

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

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

:lopen
:lnext
etc...

Он также имеетhistory:

:lolder
:lnewer

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

:r!grep bla **/*.cs

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

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

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

2 голосов
/ 16 июня 2011

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

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

(: закрыть, чтобы закрыть окно быстрого исправления)

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

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

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

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

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