Как настроить параметры вкладки Emacs по типу файла? - PullRequest
20 голосов
/ 24 октября 2010

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

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

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

;; 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, поэтомумои знания о конфигурации довольно низки.

Ответы [ 5 ]

28 голосов
/ 24 октября 2010

В 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 самостоятельно :). Выучи какой-то шут.

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

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

7 голосов
/ 24 октября 2010

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

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

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

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

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

6 голосов
/ 20 марта 2012

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

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


Однако, если вы много сотрудничаете с другимилюди, часто лучше поместить файл 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)

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

0 голосов
/ 16 мая 2017

Для 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 и т. Д.

0 голосов
/ 12 марта 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...