Отступ Emacs с использованием вкладок


8

Есть ли способ сделать Emacs отступ кода, используя только глобальные вкладки, а не пробелы. Я знаю команду tabify. Я бы предпочел, чтобы автоматизированный отступ использовал вкладки, а не смесь вкладок и пробелов, как в конфигурации по умолчанию.

Ответы:


7

Что ж, чтобы сделать отступ для вкладок, вы должны убедиться, что indent-tabs-modeэто t(значение по умолчанию). Но чтобы получить только вкладки, вам нужно настроить режим, в котором выполняется отступ, таким образом, чтобы каждая строка имела отступ, кратный вашей tab-width(по умолчанию 8). Например, в режиме C вы можете попробовать установить c-basic-offsetзначение 8.

Или вы можете уменьшить значение tab-widthдо меньшего, чтобы Emacs не использовал пробелы для достижения каждого уровня отступа. Но если вы сделаете это, все остальные, кто должен работать над вашим кодом (и использует стандартные 8-символьные табуляции), будут раздражены.

Я призываю вас пересмотреть. Лично я нахожу работу над кодом с отступом от вкладок раздражающей, особенно если они не кажутся 8 пробелами. (Самым худшим является код, в котором некоторые строки используют пробелы, некоторые строки используют вкладки, и это явно не 8 пробелов.) Сделайте нам всем одолжение и справедливость (setq indent-tabs-mode nil).


Я хотел бы отметить этот вопрос для второй ширины вкладок настроек параграфа, а в комментарии не смешивать табуляции и пробелы. Но если ширина вашей вкладки установлена, редактирование отступов намного проще с вкладкой для каждого уровня, а не с несколькими пробелами
user151019

Я думаю, что ваш третий абзац в целом полезен, но часто мы не можем контролировать стиль отступа оригинального автора, например, кому мы отправляем запросы на извлечение / объединение. У меня есть свои предпочтения, у них есть свои. Я думаю, что уважительно использовать их стиль отступов до разумного уровня, поэтому иногда выбор не за нами .
r2evans

7

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))))

1

Вкладки раздражают меня, но мне пришлось выяснить, как заставить emacs использовать только вкладки для отступа, чтобы я мог работать над чужим кодом. Вот что сработало для меня:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Я заметил, что, прежде чем связываться с чем-либо, когда я нажимал клавишу табуляции, он автоматически сдвигался на 2 столбца. Установка «ширины табуляции» в соответствии со смещением в 2 столбца позволила emacs использовать вкладки при автоформатировании. Я работал в режиме NXML, но я думаю, что это должно работать для любого режима.


Ницца. Это беспокоило меня тоже. Это не интуитивно понятно, чтобы установить ширину вкладки, чтобы соответствовать смещению столбца. Хорошая работа. Я использовал эту идею в режиме c ++
Шон Линч
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.