Подтвердить что ты не робот

Как установить параметры вкладки Emacs по типу файла?

Мне нужно настроить параметры вкладки для следующих типов файлов:

  • .rb: 2 мягких пространства
  • .css,.html.erb: 4 пробела.

Я пробовал следующее, но ни один из них не меняет настройки по умолчанию для каждого из типов файлов.

;; js-mode-hook has also been tried
(add-hook 'javascript-mode-hook 
      '(lambda() 
        (setq tab-width 4)))

(add-hook 'css-mode-hook 
      '(lambda() 
        (setq tab-width 4)))

(add-hook 'html-mode-hook 
      '(lambda() 
        (setq tab-width 8)))

Я новичок в emacs, поэтому мои знания конфигурации довольно низки.

4b9b3361

Ответ 1

В emacs каждый режим имеет собственный стиль отступов. Основная команда для отступа (привязана к TAB) - indent-for-tab-command. Эта команда вызывает специальную функцию отступов, определенную в переменной indent-line-function. Таким образом, каждый режим имеет свой собственный способ сделать это.

Для Ruby (для моего emacs 2 по умолчанию):

 (setq ruby-indent-level 2)

Для CSS (опять же, для меня по умолчанию 4):

 (setq css-indent-offset 4)

К сожалению, режим SGML (на котором основан режим HTML) имеет очень простой механизм отступов и, по-видимому, уровень не настраивается. См. Исходный код функции sgml-calculate-indent.

Я лично считаю это странным. Я не пишу HTML, но вы можете попробовать изменить функцию sgml-calculate-indent самостоятельно:). Изучите некоторые lisp.

Я использую режим js2, и он отлично отступы по умолчанию. Для js вам нужно искать js-indent-level или что-то подобное.

Приветствия.

Ответ 2

Существует ряд аспектов того, как Emacs делает отступы. Установка ширины табуляции указывает только, насколько велика вкладка, если вставлена ​​литеральная вкладка. Если вы не хотите использовать литеральные вкладки для отступов, вы должны сначала отключить их вставку (из руководства ):

Emacs обычно использует обе вкладки и пробелы до отступов. Если вы предпочитаете, все отступы могут быть сделаны из только пробелы. Чтобы запросить это, установите indent-tabs-mode - nil. Это per-buffer, поэтому изменение переменная влияет только на текущую буфера, но есть значение по умолчанию которые вы также можете изменить. Вы также можете изменить.

Однако, чтобы указать уровни отступов, вам также нужно будет установить переменную c-basic-offset:

(add-hook 'html-mode-hook 
      '(lambda() 
        (setq c-basic-offset 4)
        (setq indent-tabs-mode nil))

В вашем случае вам может понадобиться только c-basic-offset, но попробуйте несколько комбинаций и посмотрите, что лучше всего работает.

Ответ 3

js-mode использует js-indent-level, поэтому поместите (setq js-indent-level 4) в ваш ~/.emacs(не обязательно должен быть на крючке, даже если вы задаетесь вопросом, это js-mode-hook, а не javascript -mode-крюк).

Если установка ширины табуляции не изменяет уровень отступов для определенного режима, часто проще просто открыть источник для этого режима. Я нашел эту переменную, выполнив C-h f js-mode, щелкнув ссылку "js.el", затем выполнив поиск "indent", второй удар сверху.


Однако, если вы много сотрудничаете с другими людьми, часто лучше поместить файл cookie в начало файла. Я обычно делаю // -*- tab-width: 8 -*- в файле, а затем у меня есть такие вещи в моем ~/.emacs:

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
(defvaralias 'perl-indent-level 'tab-width)
(defvaralias 'js-indent-level 'tab-width)

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

Ответ 4

Если вы используете ELPA css-mode.el с emacs 23.1.1, вы можете параметризовать глобальные настройки ширины табуляции для файлов CSS для ширины табуляции, выполнив следующие действия: 1) Тип M-x customize-variable, 2) Затем введите css-indent-level, 3) Затем, после того как вы измените переменную по своему вкусу, вы выполните "Сохранить для будущих сеансов".

Ответ 5

Для HTML и erb: если вы используете web-mode (режим, предоставляемый Spacemacs), это может быть просто:

(setq-default web-mode-code-indent-offset 2 web-mode-markup-indent-offset 2)

где markup-indent-offset относится к фактическим тегам, а code-indent-offset относится к встроенному Ruby в ERB и т.д.