Глобальное переопределение уровня отступа Emacs - PullRequest
4 голосов
/ 27 июля 2011

Я хочу установить режим отступа только для вкладок, с шириной 4 символа для любого режима. Это кажется тривиальной вещью, но я не имел успеха. Кажется, что каждый режим имеет свои переменные и параметры. Я пытался сделать это для Perl и R без успеха. Вещи, которые не работали:

(setq-default tab-width 4)
(setq standard-indent 4)
(setq-default r-indent-level 4)
(setq perl-indent-level 4)

(setq c-basic-offset 4) работает для режима c, но ничего больше. Я что-то забыл? Я установил неправильные переменные? Нет такого варианта?

Я ежедневно работаю со множеством языков (R, Perl, sh, C / C ++ и т. Д.). Поскольку мне нравится использовать одинаковые отступы для разных языков, существует ли такая глобальная переменная переопределения, которую я могу установить, чтобы уровень и стиль отступа были одинаковыми во всех режимах? Если нет, есть ли способ установить их для каждого режима при запуске? Если все остальное терпит неудачу, должен быть сценарий elisp, который делает это.

Использование Emacs 23


РАЗРЕШЕНО: Мне пришлось устанавливать переменные для каждого режима отдельно, потому что такого глобального переопределения не существует. Вы можете поместить следующие операторы в ваш файл ~ / .emacs для настройки emacs при запуске.

Режим

R происходит из пакета ESS . Читая документацию, я нашел это: (setq ess-indent-level 4)

В режиме CPerl (setq cperl-indent-level 4)

Похоже, вам просто нужно искать правильную переменную в каждом режиме.

Ответы [ 3 ]

6 голосов
/ 28 июля 2011

Отступы в Emacs на самом деле не «тривиальная вещь».Вы можете прочитать все об этом в Emacs Wiki:
http://www.emacswiki.org/emacs/CategoryIndentation

Любой основной режим свободен для реализации отступов, как он пожелает, и, как вы заметили, некоторые из них вводят переменные, связанные с отступами;поэтому нет, не существует глобальной конфигурации отступов, которая гарантированно влияет на все возможные основные режимы (хотя на практике некоторые переменные полностью стандартны по соглашению).

Если нет,Есть ли способ установить их для каждого режима при запуске?

Конечно.Самый простой способ - настроить значения и значения по умолчанию с помощью интерфейса Mx customize RET , хотя там отображаются только переменные, определенные с defcustom, поэтому это не обязательно является исчерпывающим (ноон все еще может быть очень полезен для просмотра некоторых доступных настроек, даже если вы фактически не используете его для установки значений).

Установка значений (или значения по умолчанию в случае автоматически локальных переменных буфера)в вашем файле инициализации с setq и setq-default, как вы уже сделали, это тоже хорошо.

Если вы хотите больше контроля, вы можете использовать ловушки режима.Практически каждый режим запускает список функций, назначенных переменной (mode-name)-hook после инициализации в буфере, поэтому любые настройки для конкретного режима можно записать в функцию elisp и добавить в соответствующий список ловушек в файле инициализации.

Например:

(defun my-c-mode-config ()
  (whitespace-mode 1)
  (setq indent-tabs-mode t
        tab-width        4
        c-basic-offset   4))

(add-hook 'c-mode-hook 'my-c-mode-config)
5 голосов
/ 28 июля 2011

Используйте переменную standard-indent.Вы можете установить его в своем файле запуска или настроить его;это в группе Indent.Сделайте M-x customize, затем выберите Редактирование, затем Отступ;в качестве альтернативы, сделайте M-x customize-group indent.

Что касается отступа с табуляцией вместо пробелов, все что вам нужно сделать, это установить indent-tabs-mode в t.Это настраивается так же.

1 голос
/ 12 июля 2016

(setq default-tab-width 2) у меня работает в emacs 24

...