Ответы:
Что ж, чтобы сделать отступ для вкладок, вы должны убедиться, что 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, но я думаю, что это должно работать для любого режима.