Глобальное переопределение уровня отступа в Emacs

Я хочу установить режим отступа только для вкладок с шириной 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-mode, но ничего больше. Я что-то забываю? Я установил неправильные переменные? Нет такой возможности?

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

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


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

Режим R поступает из пакета ESS. Прочитав документацию, я обнаружил следующее: (setq ess-indent-level 4)

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

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


person goweon    schedule 27.07.2011    source источник


Ответы (3)


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

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

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

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

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

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

e.g.:

(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)
person phils    schedule 28.07.2011

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

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

person db48x    schedule 27.07.2011

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

person Quyen Nguyen Tuan    schedule 12.07.2016