1

Я люблю Emacs, но мои возможности настройки слабы, и я был бы признателен за любую помощь в этом.

Мои настройки по умолчанию - никогда не использовать буквальные табуляции (indent-tabs-mode nil). Тем не менее, для одного конкретного проекта мне нужно использовать табуляции, и мне нужно отображать табуляции с интервалом 4 (не по умолчанию 8), и я хочу, чтобы tab-stop-list был 4, 8, 12, ... ,

Теперь вопрос: как я могу определить (в моем ~/.emacs.d) одну функцию, которую я могу вызвать M-x из любого режима, в котором я уже мог быть, чтобы эти конкретные настройки были переопределены для этих требований? В качестве альтернативы, как я могу сделать эти настройки второстепенным режимом, который я могу при желании активировать в данном основном режиме (скажем, в некотором вымышленном PHP-режиме (который я еще не нашел))?

3 ответа3

5
(setq-default 
          tab-width 4                                     ; Set tab stops
          tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44
                            48 52 56 60 64 68 72 76 80 84)
          )

поместите это в ваш .emacs.d/init.el и используйте M-i чтобы перейти к следующей позиции вкладки

ОБНОВИТЬ:

(defun my-tab-width ()
  "set tab-width as local variable"
  (interactive)
  (progn
    (set (make-local-variable 'tab-width) 4)
     (set (make-local-variable 'tab-stop-list)
     '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84))))

итеративно вызывайте эту функцию с помощью M-x или устанавливайте желаемый режим для автоматической загрузки

(add-hook 'php-mode-hook 'my-tab-width)
2

Вам, вероятно, не нужно создавать режим. Вам нужно только установить переменные (indent-tabs-mode , tab-width и tab-stop-list) для одного или нескольких файлов.

Это также было задано в этом вопросе переполнения стека.

Мое предложение: создайте файл ".dir-locals.el" в каталоге этого проекта со следующим содержимым:

((nil . ((tab-width . 4)
         (indent-tabs-mode . t)
         (tab-stop-list . (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84)))))

Это установит эти три переменные для всех файлов в этой папке.

Но вам нужно убедиться, что ваши ловушки mode/file также не устанавливают эти переменные. Установка их таким образом всегда будет иметь приоритет независимо от того, что вы настраиваете.

И помните, что эти переменные влияют только на чистый текст. Режимы программирования обычно имеют свои собственные переменные для отступа (например, c-basic-offset).

0

Я не эксперт по eLISP, но вы могли бы добавить что-то вроде

(add-hook 'your-minor-mode '(set-variable 'tab-width 4))

к вашему .emacs

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .