Как минимизировать файл конфигурации .emacs? - PullRequest
5 голосов
/ 28 января 2011

Мне было интересно, может ли кто-нибудь помочь мне с минимизацией моего файла .emacs.

В настоящее время он настроен так, что у каждого языка, который я использую, есть настраиваемая вкладка, например, если у меня есть хук для Java, это будет выглядеть так

;; Java Hook
(defun e-java-mode-hook ()
    (setq tab-width 4)
    (setq indent-tabs-mode t)
    (define-key java-mode-map (kbd "") 'java-insert-tab))
(defun java-insert-tab (&optional arg)
    (interactive "P")
    (insert-tab arg))
(add-hook 'java-mode-hook 'e-java-mode-hook)

И если бы я добавил другой язык, такой как CSS или JavaScript, я бы добавил еще один хук для CSS и еще один хук для JavaScript. Поэтому мне было интересно, существует ли глобальный способ его настройки, чтобы он применим ко всем языкам?

В настоящее время я использую GNU Emacs 23.2.1 в Windows 7.

Ответы [ 3 ]

5 голосов
/ 29 января 2011

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

Привязка клавиши табуляции к insert-tab означает, что вы полностью потеряете преимуществоподобных indent-region и любому другому интеллектуальному поведению, которое может предложить основной режим.

Чтобы ответить на ваши конкретные вопросы независимо, однако:

1) Если вы определяете (java-insert-tab)и (css-insert-tab) и (javascript-insert-tab) и т. д., и все они делают одно и то же ... ну, надеюсь, вы увидите, что на самом деле вам не нужно больше, чем одна из этих функций.Просто дайте ему более общее имя и повторите его.

2) (local-set-key ...) делает то же самое, что и (define-key (current-local-map) ...), что означает, что вы также можете иметь одну общую функцию для переопределения привязки клавиш табуляции,независимо от основного режима.

(defun my-coding-config ()
    (setq tab-width 4)
    (setq indent-tabs-mode t)
    (local-set-key (kbd "<tab>") 'my-insert-tab))

(defun my-insert-tab (&optional arg)
    (interactive "P")
    (insert-tab arg))

Тогда вам просто нужно добавить my-coding-config к каждой применимой переменной обработчика режима.Если их много, вы можете поместить их в такой список:

;; Use my coding hook for all programming modes
(mapcar
 (lambda (language-mode-hook)
   (add-hook language-mode-hook 'my-coding-config))
 '(java-mode-hook
   javascript-mode-hook
   css-mode-hook
   ...))

3) Если вы посмотрите на Ch v tab-width RET и аналогично для indent-tabs-mode, вы заметите, что они оба говорят: «Автоматически становится локальным по отношению к буферу при любой установке.»

В качестве альтернативы уже упомянутому интерфейсу настройки вы можете использовать (set-default 'indent-tabs-mode t), чтобы установить значение по умолчанию для таких переменных.В отсутствие кода, который устанавливает локальное значение буфера, все ваши буферы будут использовать значение по умолчанию, что может помочь вам избежать написания ненужных перехватчиков режима.

2 голосов
/ 28 января 2011

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

M-x customize-variable tab-width <ret>

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

Если у вас есть разные настройки, которые вы хотите применить к разным режимам, вам обязательно нужно будет иметь код, специфичный для каждого режима в вашем .emacs.

В целом, похоже, что вы пытаетесь создать свои собственные команды вставки вкладок - разве встроенный отступ не делает то, что вам нужно?Я думаю, что будет проще настроить параметры отступов в Emacs, чем вставлять вкладки туда, где вы хотите.

Если вы этого еще не сделали, взгляните на раздел руководства по отступам и посмотрите, сможете ли выбыть в состоянии сделать то, что вам нужно, без большого количества дополнительных хуков:

Ch rm Отступ

(то есть: h -elp, r - руководство по эксплуатации, м - пункт меню отступ )

или:

(info "(emacs)Indentation")
1 голос
/ 28 января 2011

espect.el делает именно то, что вы хотите.

Из документов:Этот режим позволяет легко настраивать параметры для отдельных буферов с помощью краткого и расширяемого мини-языка.Он абстрагирует общие задачи выбора конфигурации, такие как проверка режима или имени файла, в простой декларативный синтаксис.Объявить условия;запустить функцию, когда новый буфер соответствует им.Это позволяет легко делать такие вещи, как включение flyspell-prog-mode для ваших любимых языков программирования или делать все буферы текстового режима, заканчивающиеся на .mkn, специальными свойствами.

...