2011-01-28 2 views
5

Мне было интересно, может ли кто-нибудь предоставить мне какую-нибудь помощь по минифигурации моего файла .emacs.Как минимизировать конфигурационный файл .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.

ответ

1

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

Из документов:


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

+0

Спасибо за ответ, я попробую и посмотрю, как это работает, хотя для меня это может быть немного сложнее. – YTKColumba

2

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

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

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

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

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

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

Ch ет отступы

(то есть: ч -elp, г -ead инструкции, м -enu элемента отступа)

или:

(info "(emacs)Indentation") 
+0

Ну, в основном то, что я пытаюсь сделать, - это отступ с 4 пробелами, глобально. Если вы когда-либо использовали Visual Studio/DreamWeaver, я бы хотел настроить его так. – YTKColumba

+0

Как я уже говорил выше, задайте ширину табуляции в настройке и уменьшите выделение .emacs до одной строки: (setq indent-tabs-mode t). – Tyler

5

Я согласен с Tyler; хотя это немного сложно, вам будет лучше в долгосрочной перспективе, если вы попытаетесь понять и настроить функции отступов по умолчанию. В Emacs Wiki есть good resources, и есть другие relevant Q&As здесь, в Stack Overflow.

Привязка клавиши табуляции к 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 противtab-widthRET и также для indent-tabs-mode, вы заметите, что они оба говорят: «Автоматически становится буферно-локальным, когда он установлен любым способом».

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

+0

Удивительно, я дам вам попытку и дам вам знать, как это работает. – YTKColumba

Смежные вопросы