Как мне определить, почему Emacs имеет отступ на определенное количество? - PullRequest
3 голосов
/ 15 ноября 2011

В Emacs я редактирую некоторый исходный код и нажимаю . Emacs делает отступ для n пробелов. Я хотел бы изменить количество отступов для такой линии. Как мне выяснить, какое правило emacs применило для отступа этой строки на n пробелов?

Я хочу изменить n, но мне нужно выяснить, какую из множества переменных, связанных с отступами, только что использовал Emacs.

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

Общий ответ сложен. Некоторые режимы сделают это более очевидным, чем другие, но в общем случае (так как они могут свободно выполнять отступы, как им хочется), я не думаю, что вы избавитесь от необходимости читать некоторые elisp.

Начиная с привязки для TAB будет работать, но может быть немного трудоемким в зависимости от количества слоев косвенного обращения.

Если вы знаете, что рассматриваемый основной режим реализует свои собственные отступы, то один (не строгий, но быстрый) подход, который вы могли бы попытаться помочь отследить вызываемые функции, заключается в использовании ELP, встроенного в профилировщик elisp. , elp-instrument-package будет инструментом для профилирования всех функций с именами, соответствующими заданному вами аргументу строки префикса. Поэтому вы можете сделать что-то вроде следующего в PHP-файле (отметив, что php-mode сообщает вам, что он является производным от c-mode)

М-х elp-instrument-package RET php- RET
М-х elp-instrument-package RET c- RET
М-х elp-instrument-package RET indent RET

Теперь введите TAB в своем исходном коде и запустите M-x elp-results, чтобы увидеть, какие из этих инструментальных функций были вызваны.

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

Как только вы закончите, используйте M-x elp-restore-all, чтобы предотвратить дальнейшее профилирование.

4 голосов
/ 15 ноября 2011

Если вы используете режим на основе cc-mode (например, c-mode, c ++ - mode, java-mode и т. Д.), Вы можете нажать Cc Cs , и он сообщит вам что такое синтаксическая категория Если вы хотите изменить его, нажмите C-c C-o , и вы пройдете через весь процесс. Для получения более подробной информации обратитесь к документации по cc-mode для настройки: https://www.gnu.org/s/emacs/manual/html_node/ccmode/Customizing-Indentation.html

1 голос
/ 07 января 2013

Если вам нравится получать действительно грязные руки, всегда есть отладчик elisp, чтобы сказать вам, что Emacs задумал.

Если вы нажмете C-h k TAB, вы найдете функцию, которую выполняет Emacs (например, indent-for-tab-command), тогда вы можете выполнить M-x debug-on-entry RET indent-for-tab-command RET. Теперь, когда вы нажмете TAB, вы увидите всплывающее окно отладчика и сможете следить за выполнением шаг за шагом.

В зависимости от вашего вкуса к отладке, это либо сводящий с ума, либо поучительный опыт. В любом случае, не забудьте M-x cancel-debug-on-entry, когда закончите.

...