Ответы:
Что ж, чтобы сделать отступ для вкладок, вы должны убедиться, что indent-tabs-modeэто t(значение по умолчанию). Но чтобы получить только вкладки, вам нужно настроить режим, в котором выполняется отступ, таким образом, чтобы каждая строка имела отступ, кратный вашей tab-width(по умолчанию 8). Например, в режиме C вы можете попробовать установить c-basic-offsetзначение 8.
Или вы можете уменьшить значение tab-widthдо меньшего, чтобы Emacs не использовал пробелы для достижения каждого уровня отступа. Но если вы сделаете это, все остальные, кто должен работать над вашим кодом (и использует стандартные 8-символьные табуляции), будут раздражены.
Я призываю вас пересмотреть. Лично я нахожу работу над кодом с отступом от вкладок раздражающей, особенно если они не кажутся 8 пробелами. (Самым худшим является код, в котором некоторые строки используют пробелы, некоторые строки используют вкладки, и это явно не 8 пробелов.) Сделайте нам всем одолжение и справедливость (setq indent-tabs-mode nil).
Emacs поставляется с несколькими предопределенными стилями для отступов Си, или вы можете написать свой собственный, если ни один из них не соответствует вашим потребностям. Из стандартных стилей кажется, что вы ищете linux(стиль, используемый в исходном коде ядра Linux), который имеет отступы в 8 столбцов и использует символы табуляции шириной 8.
Вы можете сделать эти настройки вашим стилем по умолчанию для C, добавив их в .emacs:
(setq c-default-style "linux")
(defun my-c-mode-hook ()
(setq indent-tabs-mode t)
(setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)
Убедитесь, что вы не используете эти настройки при совместной работе с другими людьми с другими предпочтениями. В частности, использование вкладок сделает вас енемин. Если определенный файл должен храниться в определенном стиле, вы можете использовать файловые переменные, чтобы гарантировать, что каждый, кто редактирует файл в Emacs, использует одинаковые настройки:
/*
* Local Variables:
* c-file-style: "linux"
* indent-tabs-mode: t
* tab-width: 8
* End:
*/
Если у вас есть целый проект с файлами C с одинаковыми отступами, используйте переменные каталога, а не загрязняйте каждый файл. Создайте файл .dir-locals.elс содержимым, подобным следующему:
((c-mode . ((c-file-style . "linux")
(indent-tabs-mode . t)
(tab-width . 8))))
Вкладки раздражают меня, но мне пришлось выяснить, как заставить emacs использовать только вкладки для отступа, чтобы я мог работать над чужим кодом. Вот что сработало для меня:
(defun tmp/change-indent ()
(interactive)
(setq indent-tabs-mode t)
(setq tab-width 2))
Я заметил, что, прежде чем связываться с чем-либо, когда я нажимал клавишу табуляции, он автоматически сдвигался на 2 столбца. Установка «ширины табуляции» в соответствии со смещением в 2 столбца позволила emacs использовать вкладки при автоформатировании. Я работал в режиме NXML, но я думаю, что это должно работать для любого режима.