Emacs плохо обрабатывает авто-отступ в Flex и Bison. На самом деле, похоже, нет поддержки режима flex. Так, Как пользователь Emacs справляется с этим? Мне нравится VIm, но я бы предпочел не переключаться, потому что в Emacs мне гораздо быстрее и комфортнее.
Несколько месяцев назад у меня был сторонний модуль elisp для Bison, но когда его отступ сломался, он никогда не исправился. Короче говоря, это был плохой взлом.
Или есть способ, которым я могу отключить авто отступ для файлов .l и .y (таким образом нажатие сделало бы один отступ)? Как бы я изменил эту настройку elisp только для emacs?
Было бы очень полезно также получить хорошее и краткое руководство по elisp. Я не возражал бы потратить несколько дней на написание своих собственных режимов flex и bison, если бы у меня была правильная документация.
Emacs выбирает основной режим в основном на основе расширения имени файла. .l
является спорным расширением: некоторые люди используют его для lex, другие для lisp (и есть несколько других более редких применений). Emacs связывает .l
с lisp, а .lex
с lex (для которого он использует режим C).
Если файлы .l
, с которыми вы работаете, чаще являются lex, чем lisp, вы можете изменить то, какие файлы .l
связаны со следующей строкой в вашем .emacs
:
(add-to-list 'auto-mode-alist '("\\.l\\'" . c-mode))
Вы также можете объявить внутри файла, какой режим вы хотите, чтобы Emacs использовал при открытии файла. Поместите следующий фрагмент в первую строку файла (обычно в комментарии):
-*-mode: c-mode-*-
Это более общая функция, предлагающая другие синтаксисы и другие возможности; см. «Файловые переменные» в руководстве Emacs для получения дополнительной информации.
Если вы хотите начать работу с Emacs Lisp, прочтите Введение в Emacs Lisp (которое может быть включено в ваш Emacs или дистрибутив ОС). После того, как вы немного поигрались с основами языка, вы можете перейти к главе о режимах в справочном руководстве Emacs Lisp.
Дополнительный совет: вы можете решить, что вам нужно общее поведение Emacs - то, что он использует, когда у него нет специального режима для формата файла. Это называется Fundamental mode на emacs lingo: поэтому вы можете запросить его на лету с помощью Mx basic-mode
или поместить - * - mode: basic - * -
в первую строку файл или настройте auto-mode-alist следующим образом:
(add-to-list 'auto-mode-alist '("\\.l\\'" . fundamental-mode))
Еще можно попробовать indented-text-mode
(вероятно, с отключенным автозаполнением).