Существует несколько вопросов на ТАК о том, как получить код, сворачивающийся в emacs, не имея необходимость добавлять любые специальные символы как "маркеры" в комментариях, например. Кто-то сказал, что не было "никакого идеального решения".
Кажется, что это могло быть сделано путем парсинга источника записанной программы и искать соответствие круглой скобке или скобке, или сделать это на основе добавления отступа. Вы могли также использовать комбинацию сценариев, которые используют различные методы.
Итак, почему обычно признается, что нет никакого "идеального" и простого способа получить сворачивание кода в emac? Есть ли что-то в emacs или его архитектуре, которая мешает программировать? Если бы это было легко, то после такого количества лет умных людей, использующих emacs, Вы думали бы, что кто-то имел бы, записал это.
Вам стоит поиграть с Hideshow (hs-minor-mode
) в сочетании с fold-dwim.el
. Он делает именно то, что вы предложили - ищет совпадающие скобки/пары, и может быть настроен на отступ.
Для большинства распространенных языков есть надежное решение для сворачивания, а если его нет, то все пакеты для сворачивания хорошо настраиваются. Фактически, единственным недостатком является распространение методов сворачивания (fold-dwim
очень помогает в этом); раньше я думал, что раз никто не может указать мне на окончательное решение, то сворачивание трудно или невозможно - на самом деле все наоборот. Вы просто должны немного поэкспериментировать, чтобы понять, что работает лучше для вас.
Я использовал folding.el
(например, для группировки материала в .emacs
), outline-minor-mode
, а теперь и Hideshow. Существует некоторая вероятность того, что ни один из них не будет работать именно так, как вы хотите, прямо из коробки (например, вам может понадобиться установить регекс для контура или определить метки складывания для folding.el
), но это оказывается просто. Привязки клавиш по умолчанию могут быть несколько барочными, но это исправляется с помощью fold-dwim
и/или hideshow-org
(настоятельно рекомендуется для Hideshow, см. страницу Emacswiki hideshow; вы также можете имитировать поведение hideshow-org
для других режимов сворачивания с помощью быстрого и грязного elisp и fold-dwim
). Как только вы определитесь с предпочтительной настройкой, просто включите ее автоматически с помощью хуков или локальных переменных буфера, и наблюдайте, как ваш код сворачивается :) (см. ниже, обратите внимание на кликабельные +
в полях).
alt text http://img198.imageshack.us/img198/4029/screenshot1oc.png
Вы должны посмотреть на CEDET. Он отлично справляется со сворачиванием кода и многими другими модными функциями, которые вам, вероятно, нужны, если вы переходите с IDE на Emacs.
В частности, поищите `global-semantic-tag-folding-mode'
Вам не нужно ничего дополнительного, просто включите режим outline-minor-mode для типов файлов, которые вы хотите свернуть.
Я уже довольно давно использую режим сворачивания . С автоматическим добавлением шаблона и аббревиатур он неплохо работает для меня для некоторых хороших блоков кода.
Возможность создания свернутого буфера (для печати / отправки по электронной почте) всегда была моим желанием. Некоторые из моих складных тегов предназначены для безопасного скрытия пароля.
Но на самом деле существуют различные решения для Emacs; Я перечислил некоторые из них (те, с которыми мне довелось столкнуться) на http://en.wikipedia.org/w/index.php?title=Code_folding&oldid=375300945#cite_note-2 .
Однако есть вещи, которых мне не хватает: в некоторых случаях я хотел бы объединить несколько механизмов: например, для разметки я бы хотел использовать складывание на основе контура (для разделов) и на основе отступов сворачивание (для цитат, блоков кода и т. д.) - чтобы не заморачиваться с реализацией полного парсера для уценки.
Вот они:
Сворачивание на основе токенов в Emacs препятствует второстепенному режиму сворачивания .
Можно использовать функцию set-selected-display
в Emacs, чтобы скрыть строки на основе уровня отступа, как предложено в Универсальном сворачивании кода примечание.
Зависимое от синтаксиса сворачивание в Emacs поддерживается:
режимами контура и allout для специальных специальных синтаксисов "схемы";
второстепенным режимом hideshow для некоторых языков программирования;
также
senator-fold-tag
команда для
синтаксисы, поддерживаемые семантикой , sgml-fold-element
, Несколько механизмов складывания объединены фолд-двим интерфейс.
См. Также http://www.emacswiki.org/emacs/CategoryHideStuff .
Сворачивание выбранных пользователем регионов в Emacs реализуется командой hide-region-hide .