Как сделать сложный многобуферный поиск?

В регулярном диалекте Python (правильная терминология?) Мы имеем (?<=...) который может быть использован для сужения поиска относительно того, что предшествует данному шаблону.

Попытка сделать это в Emacs для выполнения сложного поиска в нескольких буферах, например, поиск только в тех буферах, содержимое которых содержит "x" и / или "y" а затем искать содержимое соответствующих буферов для "foo" и перечислить результаты, не было плодотворно, так как:

(multi-occur-in-matching-buffers "." "\\(?<=:x\\|y\\)foo")

ничего не соответствовало

В сводке синтаксиса регулярных выражений говорится, что она недоступна GNU Emacs/Elisp.

Как я могу решить эту проблему?

1 ответ

Решение

Это легко с помощью сосулек.

  • C-x b, который выбирает буферы, позволяет также выбирать по их содержимому соответствующий шаблон ввода (который может быть регулярным выражением). И это мультикоманда, что означает, что вы можете выбрать любое количество буферов с помощью одного использования C-x b,

  • Прогрессивное завершение позволяет вам использовать любое количество шаблонов (например, регулярные выражения), комбинируя их, чтобы получить их пересечение (и т.д.). И вы можете вычесть совпадения из других моделей (дополняющих).

  • Вы можете "пометить" или "сохранить" выбранные буферы как набор сохраненных кандидатов на завершение. (Вы даже можете сохранить такой набор постоянно.)

Это означает, что вы можете легко выбрать все буферы, которые соответствуют x а также y, Или если вы хотите, чтобы все это совпадение x или же yпросто добавьте те, которые соответствуют y в буферы, помеченные для соответствия x,

Учитывая, что отмеченный или "сохраненный" набор буферов, вы можете затем искать foo в них, используя Icicles search или vanilla Isearch.

С другой стороны, если все, что вы хотите сделать, это найти буферы, которые соответствуют foo так же как x или же y, тогда просто используйте C-x b, Обратите внимание, что последний шаблон соответствия контента (например, foo) вы используете для поиска буферов автоматически сохраняется как последнее регулярное выражение Isearch. Поэтому, когда вы затем посещаете буферы, вы можете сразу использовать C-M-s искать отдельные случаи.

Другие вопросы по тегам