В Emacs как работать (т.е. искать) только в регионах кода? - PullRequest
7 голосов
/ 26 сентября 2011

Я бы хотел, чтобы поиск / поиск-замена / происходил только в коде (который отсутствует в комментариях или строках).

Это должно быть распространенной проблемой, так какие пакеты уже делают это?*

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

Ответы [ 4 ]

2 голосов
/ 07 октября 2011

Сосульки Поиск дает вам несколько способов сделать это. Вот два:

  • Поиск «вещей» (например, defun s, sexp s, элементы xml и т. Д.), Игнорирование комментариев (опция icicle-ignore-comments-flag). То есть используйте выбранные сегменты кода в качестве контекстов поиска, но игнорируйте любые комментарии внутри кода или код внутри комментариев.

  • Поиск в дополнении комментариев. Например, определите контексты поиска как дополнение зон текста, которые заблокированы шрифтом либо с лицом font-lock-comment-face, либо с лицом font-lock-comment-delimiter-face (что означает поиск по всему коду вне комментариев).

После определения контекстов поиска просто введите текст, чтобы постепенно фильтровать контексты. И вы можете заменить любые совпадения по требованию.

0 голосов
/ 13 октября 2013

Isearch + делает то, что вы просите (как и Сосульки --- см. прочееответ , выше).

Вы можете определить контексты , которые ищет Isearch, используя любое из следующего:

  • Регулярное выражение для сопоставления.
  • Заданное свойство текста или наложения --- Контексты поиска - это текстовые зоны, у которых есть свойство (например, конкретное значение "face" или комбинация значений)
  • Заданный Emacs THING (sexp, defun, list, string, comment и т. Д.) --- Контексты поиска - это текстовые зоны данного типа THING.

Определив контексты поиска, вы также можете искать дополнение : non -контексты.Вы можете переключаться между контекстами поиска и не-контекстами в любое время в Isearch, используя C-M-~.

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

Для поиска по контексту с помощью Isearch вам понадобятся две библиотеки:

0 голосов
/ 26 сентября 2011

Выезд сужение .

0 голосов
/ 26 сентября 2011

Да, вы правы.Дополнительный режим HideShow позволяет скрывать / показывать блок текста, в частности многострочные комментарии.

Скрыть / показать комментарии не является частью стандартного пакета, но на вики-странице вы найдете код, который делает свое дело.

Тогда команда isearch не учитывает скрытые комментарии.

ОДНАКО: замена действует на весь буфер, включая скрытые блоки.

...