Как мне настроить html-режим Emacs так, чтобы он вел себя как стандартный HTML-пакет TextMate? - PullRequest
3 голосов
/ 18 июня 2009

Мой друг рассматривает возможность перехода на Emacs из TextMate. Он используется для стандартного режима редактирования HTML в TextMate, в котором имеется 4 пробела для табуляции и вставляются символы табуляции (то есть по умолчанию он не имеет автоматического отступа). Это также позволяет завершать открытые теги HTML с "Cmd-Shift->". Есть идеи?

Ответы [ 2 ]

9 голосов
/ 18 июня 2009

Я думаю, что эти настройки должны помочь:

(defun my-html-mode-hook ()
  (setq tab-width 4)
  (setq indent-tabs-mode t)
  (define-key html-mode-map (kbd "<tab>") 'my-insert-tab)
  (define-key html-mode-map (kbd "C->") 'sgml-close-tag))

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

(add-hook 'html-mode-hook 'my-html-mode-hook)

Описание настроек в 'my-html-mode-hook выглядит следующим образом:

  • установите ширину вкладки на 4
  • принудительно вставлять вкладки (в отличие от пробелов)
  • заставляет клавишу TAB вставлять вкладку (по умолчанию она должна выполнять отступ, а не просто вставку вкладок
  • 'sgml-close-tag - это команда, которая вставляет для вас закрывающий тег, и этот параметр дает вам желаемую комбинацию клавиш

Я немного замёрз в мозгу и не могу найти простой способ, чтобы ключ TAB вставлял символ TAB, поэтому я написал свой собственный. Я не знаю, почему не работает привязка к 'self-insert-command (вот к чему привязаны обычные ключи).

Последняя строка просто добавляет функцию настройки к 'html-mode-hook. Привязки клавиш действительно нужно запускать только один раз (в отличие от каждого раза, когда включен режим html), но это немного проще для чтения, чем при использовании 'eval-after-load. Его использование оставлено читателю в качестве упражнения.

2 голосов
/ 18 июня 2009

Я не знаю конкретно о режимах HTML в emacs, но могу ответить об общем редактировании:

  • по умолчанию Emacs не выполняет автоиндентирование, поэтому здесь ничего не нужно делать.

  • Emacs сохраняет символы табуляции, если вы явно не попросите их изменить (проверьте tabify и untabify). Их ширина определяется локальной буферной переменной tab-width. M-x set-variable, (setq...), настроить по желанию.

  • вы сможете получить желаемое поведение с помощью клавиши табуляции, установив indent-line-function на tab-to-tab-stop, установив tab-stop-list на (4 8 12 16...) и indent-tabs-mode на t.

Установка indent-tabs-mode позволяет Emacs вставлять символы табуляции при отступе. tab-to-tab-stop - это форма отступа, которая идет только к определенным позициям в строке, которые мы устанавливаем для соответствия ожидаемому поведению символов табуляции, устанавливая tab-stop-list в кратных 4.

О завершении, единственное, что мне говорит моя мышечная память, это "C-c C-e", но я точно не помню, с каким основным режимом он должен идти. Самое близкое, что я вижу в списке, это sgml-close-tag, привязанное к C-c /

Немного политики: не используйте символы табуляции, особенно если вы используете ширину, не равную 8. Это приводит только к непредсказуемым результатам

...