Умный вывод стиля отступа на странице NoTabs на EmacsWiki был очень полезен. В нем показано, как установить пробелы для большинства проектов, но переключитесь на вкладки, если в редактируемом файле больше строк, начинающихся с табуляции, чем строк, начинающихся с пробела.
Вот код:
(defun infer-indentation-style ()
;; if our source file uses tabs, we use tabs, if spaces spaces, and if
;; neither, we use the current indent-tabs-mode
(let ((space-count (how-many "^ " (point-min) (point-max)))
(tab-count (how-many "^\t" (point-min) (point-max))))
(if (> space-count tab-count) (setq indent-tabs-mode nil))
(if (> tab-count space-count) (setq indent-tabs-mode t))))
[в моей ловушке c-mode или в любом другом режиме, в котором я хочу использовать интеллектуальный отступ]
(setq indent-tabs-mode nil)
(infer-indentation-style)
Это все еще может быть проблемой при редактировании новых файлов, которые всегда должны иметь вкладки, такие как make-файлы. Для них ваш хук режима просто установит его на вкладки. Например:
(add-hook 'makefile-mode-hook
'(lambda()
(setq indent-tabs-mode t)
)
)