emacs: хотите сделать отступ для вкладок (размер табуляции 2 или 4) с пробелами - PullRequest
0 голосов
/ 01 июня 2018

Я сейчас использую emacs и в большинстве случаев люблю его (полезно для ssh, подсветка синтаксиса, ...).

Но когда дело доходит до отступа и выравнивания (выравнивания) кода, яне понять с emacs.

Я хочу в весь мой код (SQL, C, Java, ECMAScript, HTML, PHP, CSS, ...), что нажатиеКлавиша «TAB» в действительности создает символ TAB (размер которого обычно составляет 2 пробела, но 4 или 6 тоже хороши).[Я согласен, что вкладки в коде являются злом, когда речь идет о выравнивании, но пробелы также являются злом, когда дело доходит до отступа!] Вы можете посмотреть, как я хочу, чтобы это было в моем HTML-шаблоне: https://github.com/pheek/HTMLTemplate/blob/master/template.html

С другой стороны, я всегда выравниваю по пробелам, поэтому у других программистов все знаки равенства правильно выровнены в моем коде.Это работает нормально, за исключением 2 исключений:

  1. Чтобы ввести TAB-Char, мне всегда нужно нажимать "CTRL-q TAB", что раздражает.
  2. Различные языки программированиясконфигурирован в Emacs для использования разных размеров TAB.Что касается меня, я всегда хочу вести себя как TAB размером 2 пробела.

Как я могу добиться, чтобы

a) нажатие клавиши TAB всегда вставлялоTAB-Char?

b) TAB находятся во всех режимах emacs (c, java, html, php, css, ecmascript, ...) шириной 2 символа?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

а) Установите значение indent-tabs-mode не ноль в вашем файле конфигурации emacs.(setq-default indent-tabs-mode t) должен сделать трюк.https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation.html

b) Аналогичным образом установите значение tab-width на желаемую ширину.(setq-default tab-width 2) в вашем случае.https://www.gnu.org/software/emacs/manual/html_node/efaq/Changing-the-length-of-a-Tab.html

0 голосов
/ 01 июня 2018

Как говорит @lawlist, он отличается для каждого основного режима.Каждый из них обычно имеет свой собственный indent-line-function, а такие настройки, как tab-width, являются локальными для буфера.

Есть пакет smart-tabs (https://github.com/jcsalomon/smarttabs), который мне подходит, но я его использую толькодля C-подобных режимов (что не означает, что он не работает для других, я просто не пробовал).

(use-package smart-tabs-mode
  :commands (smart-tabs-mode)
  :init
  (add-hook 'c-mode-common-hook #'smart-tabs-mode)
  :config
  (smart-tabs-advice c-indent-line     c-basic-offset)
  (smart-tabs-advice c-indent-region   c-basic-offset)
  )

tab-width должен быть установлен на вашу предпочтительную ширину в глобальном масштабе, и можетбыть изменено в основных режимах, чтобы быть отличным в некоторых режимах.

(setq-default tab-width 2)

(defun jpk/c-mode-common-hook ()
   (setq tab-width 4))
(add-hook 'c-mode-common-hook #'jpk/c-mode-common-hook)
...