emacs find-grep grep - PullRequest
       7

emacs find-grep grep

4 голосов
/ 01 апреля 2011

Я пытаюсь выполнить grep для результата emacs 'find-grep, поэтому я использую следующую команду:

найти ... | xargs ... | grep -v "include"

Результат отображается в буфере grep , но когда я нажимаю клавишу ввода для каждой записи, пытаясь перейти к этому файлу, emacs говорит, что файл не существует. На минибуфере перед полным путем файла есть символ ^ [[K]. Это в основном делает все имя файла неузнаваемым. Я просмотрел руководство grep, все еще не зная, что я могу с этим поделать.

Мне, вероятно, не нужно этого делать, но я просто не уверен, как передать два шаблона: один для grep, а другой для инверсии grep. (Может быть регулярное выражение?)

У кого-нибудь есть предложения по этому поводу?

Решение:

Я делал это на машине Cento 5.5. Это оказывается проблемой из-за старой версии grep. Я установил последнюю версию grep в свой домашний каталог, и теперь все хорошо.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

После «отладки» проблемы с помощью комментариев, это решение должно работать для вас. Добавьте его в свой .emacs и настройте так, чтобы регулярное выражение совпадало со специальными символами, которые вы хотите убрать из имени файла: ^[[K

(defadvice compilation-find-file (before compilation-find-file-strip-odd-chars activate)
  "Strip the ^[[K in the input string"
  (let ((filename (ad-get-arg 1)))
    (save-match-data
      (when (string-match "^\\[\\[K" filename)
        (ad-set-arg 1 (replace-match "" nil nil filename))))))
0 голосов
/ 06 июня 2012

У меня была такая же проблема, но я не мог изменить свою версию grep, поэтому я использовал обходной путь.Проблема заключалась в окончании строки greps, поэтому я просто запускаю результаты grep через awk и печатаю их как есть.

... | grep -v blaa | awk '{print $0}'

Это решает проблему для меня, хотя я не знаю почему.*

...