2010-08-16 3 views
7

У Emacs плохое управление автоиндексацией в Flex и Bison. На самом деле, похоже, он не поддерживает гибкий режим. Итак, как пользователь emacs справляется с этим? Мне нравится VIm, но я бы предпочел не переключаться, потому что я намного быстрее и удобнее в Emacs.Режимы Emacs для гибких и бизонов, или удаление автоматического отступа для этих режимов?

У меня был третий модуль elisp для Bison несколько месяцев назад, но когда его отступ сломался, он никогда не будет исправлен. Короче говоря, это был плохой взлом.

Или есть способ, которым я могу отключить авто отступ для файлов .l и .y (так что нажатие сделало бы один отступ)? Как мне изменить эту настройку elisp только для emacs?

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

+0

Я не уверен, что вы подразумеваете под «отключением автоматического отступа для файлов .l и .y». В каком режиме претендует модельный? Вы можете настроить это, изменив auto-mode-alist. – zwol

+0

Он, кажется, находится в режиме C для бизона. Для Flex это режим Lisp. Режим C для Bison является допустимым, но нет никаких режимов Lex или Flex для Emacs. – Kizaru

+0

Возможно, вы уже это видели, но если не позвольте мне обратиться к следующему вопросу: http://stackoverflow.com/questions/2166680/is-there-a-good-emacs-mode-or-method-for- lex-flex-yacc-bison-files – 2010-10-14 07:38:23

ответ

3

Emacs выбирает основной режим в основном на основе расширения имени файла. .l - это расширенное расширение: некоторые используют его для lex, другие для lisp (и есть несколько других более редких применений). Emacs связывает .l с lisp и .lex с lex (для которого он использует режим C).

Если .l файлы с которыми вы работаете чаще Лекса, чем лепет, вы можете изменить то, что .l файлы ассоциированы с помощью следующей строки в вашем .emacs:

(add-to-list 'auto-mode-alist '("\\.l\\'" . c-mode)) 

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

-*-mode: c-mode-*- 

Это более общая особенность, предлагая другие синтаксисом и другие возможности; см. «Переменные файла» в руководстве Emacs для получения дополнительной информации.


Если вы хотите, чтобы начать работу с Emacs Lisp, читать Emacs Lisp intro (которые могут быть включены в вашем Emacs или распространении ОС). После того, как вы немного поработали с основами языка, вы можете перейти к главе о режимах справочного руководства Emacs Lisp.

+0

Я попробую это на моей установке Emacs дома ... Я не совсем уверен, но я думал, что у Flex/Lex возникли проблемы с режимом C (особенно в разделе правил).Например, если первый символ строки не является пробелом, Flex интерпретирует его как шаблон для соответствия. В режиме C, если бы я захотел поместить некоторый код, соответствующий правилу, я не смог бы его отключить вправо, если я не введу отступ, что является утомительным. Любые простые решения или идеи, что делать здесь? – Kizaru

+0

@PlaZmaZ: Я не думаю, что вы можете решить это, не написав немного кода. Режим lex или yacc будет выводиться из режима C (смотрите «Производные режимы» в руководстве Emacs Lisp). Режим CC имеет сложный механизм отступов, который я никогда не рассматривал; Я думаю, что раздел «Расширенная настройка» вас будет интересовать. Для синтаксической раскраски найдите «Режим блокировки шрифтов». – Gilles

1

Дополнительная подсказка: вы можете решить, что вы хотите, это общее поведение Emacs - то, что он использует, когда у него нет специального режима для формата файла. Это называется Фундаментальная режим в Emacs жаргоне: так что вы можете запросить его на лету с M-x fundamental-mode, или положить -*- mode: fundamental -*- на первой строке файла, или настроить автоматическое режим-ассоциативный список, как так:

(add-to-list 'auto-mode-alist '("\\.l\\'" . fundamental-mode)) 

Другое дело, try может быть indented-text-mode (возможно, с автоматическим заполнением отключено).

Смежные вопросы