Я согласен с 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-width
RET и также для indent-tabs-mode
, вы заметите, что они оба говорят: «Автоматически становится буферно-локальным, когда он установлен любым способом».
В качестве альтернативы уже упомянутому интерфейсу настройки вы можете использовать (set-default 'indent-tabs-mode t)
, чтобы установить значение по умолчанию для таких переменных. В отсутствие кода, который устанавливает локальное значение buffer, все ваши буферы будут использовать значение по умолчанию, что может помочь избежать необходимости писать ненужные зависания режима.
Спасибо за ответ, я попробую и посмотрю, как это работает, хотя для меня это может быть немного сложнее. – YTKColumba