Установите 4 пробела в Emacs в текстовом режиме
Мне не удалось заставить Emacs переключаться с 8 пробелов на 4 пробела при нажатии TAB в буферах с основным режимом text-mode
. Я добавил следующее к .emacs
:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)
Независимо от того, как я изменяю свой файл .emacs
(или локальные переменные моего буфера), кнопка TAB всегда делает то же самое.
- Если текст отсутствует, отступ 8 пробелов
- Если в предыдущей строке есть текст, отступ к началу второго слова
Насколько мне нравится Emacs, это раздражает. Есть ли способ сделать Emacs по крайней мере с отступом 4, если в предыдущей строке нет текста?
Ответы
Ответ 1
(customize-variable (quote tab-stop-list))
или добавьте запись tab-stop-list в custom-set-variables в файле .emacs:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))
Ответ 2
Краткий ответ:
Ключевым моментом является указание emacs вставить все, что вы хотите, при отступе, это делается путем изменения функции отступа строки. Легче изменить его, чтобы вставить вкладку, а затем изменить вкладки на 4 пробела, чем изменить его, чтобы вставить 4 пробела. Следующая конфигурация решит вашу проблему:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
Объяснение:
От Отступ, контролируемый основным режимом @emacs manual:
Важная функция каждого крупного режим - настроить ключ для надлежащим образом отступом для языка, являющегося изм.
[...]
Переменная функции indent-line функцию, которая будет использоваться (и различные команды, например, при вызове indent-region), чтобы отстутнуть текущий линия. Команда режим indent-to-mode больше не работает чем вызов этой функции.
[...]
Значение по умолчанию относительное относительное для многих режимов.
Из руководства по относительным относительным @emacs:
Отступ-относительное пространство до следующего точка отступа в предыдущей непустой строке.
[...]
Если предыдущая непустая строка не имеет точки отступа за точкой столбца начинается с "tab-to-tab-stop" вместо этого.
Просто измените значение функции indent-line на функцию insert-tab и вставьте вкладку вкладки в виде 4 пробелов.
Ответ 3
Мне всегда немного больно видеть такие вещи, как (setq tab-stop-list 4 8 12 ................)
, когда там сидит функция number-sequence
, ожидающая использования.
(setq tab-stop-list (number-sequence 4 200 4))
или
(defun my-generate-tab-stops (&optional width max)
"Return a sequence suitable for `tab-stop-list'."
(let* ((max-column (or max 200))
(tab-width (or width tab-width))
(count (/ max-column tab-width)))
(number-sequence tab-width (* tab-width count) tab-width)))
(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))
Ответ 4
Вам может быть проще настроить свои вкладки следующим образом:
M-x customize-group
В приглашении Customize group:
введите indent
.
Вы увидите экран, на котором вы можете установить все параметры отступов и установить их для текущего сеанса или сохранить их для всех будущих сеансов.
Если вы сделаете это так, вы захотите настроить файл настроек.
Ответ 5
(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
Ответ 6
(defun my-custom-settings-fn ()
(setq indent-tabs-mode t)
(setq tab-stop-list (number-sequence 2 200 2))
(setq tab-width 2)
(setq indent-line-function 'insert-tab))
(add-hook 'text-mode-hook 'my-custom-settings-fn)
Ответ 7
Эта проблема не вызвана отсутствием табуляторов; это то, что emacs имеет (tab?) метод табуляции, называемый отступ-относительный, который, похоже, предназначен для выстраивания табличных данных. Клавиша TAB сопоставляется с методом indent-for-tab-command, который вызывает любой метод, для которого задана функция indent-line-функции, которая является относительным методом отступа для текстового режима. Я не нашел хороший способ переопределить переменную indent-line-function (текстовый режим не работает, возможно, он получает reset после запуска режима-перехвата), но один простой способ избавиться из этого поведения заключается в том, чтобы просто вытолкнуть метод "замысел-для-tab-command", установив TAB в более простой метод "tab-to-tab-stop":
(define-key text-mode-map (kbd "TAB" ) 'tab-to-tab-stop)
Ответ 8
Попробуйте следующее:
(add-hook 'text-mode-hook
(function
(lambda ()
(setq tab-width 4)
(define-key text-mode-map "\C-i" 'self-insert-command)
)))
Это заставит TAB всегда вставлять буквенный символ TAB с табуляторами каждые 4 символа (но только в текстовом режиме). Если это не то, о чем вы просите, пожалуйста, опишите поведение, которое вы хотели бы видеть.
Ответ 9
Вы можете добавить эти строки кода в ваш файл .emacs.
Он добавляет крючок для текстового режима, чтобы использовать insert-tab вместо относительного отступа.
(custom-set-variables
'(indent-line-function 'insert-tab)
'(indent-tabs-mode t)
'(tab-width 4))
(add-hook 'text-mode-hook
(lambda() (setq indent-line-function 'insert-tab)))
Надеюсь, это поможет.
Ответ 10
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(c-set-offset 'comment-intro 0)
это работает для кода на С++ и комментария внутри тоже
Ответ 11
Для меня было достаточно изменить стиль с помощью c-set-style.
Ответ 12
Добавьте это в файл .emacs:
Это установит ширину, чтобы вкладка отображалась на 2 символа (измените номер 2 на то, что вы хотите)
(setq default-tab-width 2)
Чтобы убедиться, что emacs на самом деле использует вкладки вместо пробелов:
(global-set-key (kbd "TAB") 'self-insert-command)
В качестве альтернативы, по умолчанию для emacs при обратном перемещении по вкладке нужно преобразовать его в пробелы, а затем удалить пробел. Это может раздражать. Если вы хотите просто удалить вкладку, вы можете сделать это:
(setq c-backspace-function 'backward-delete-char)
Наслаждайтесь!
Ответ 13
Лучшие ответы не помогли, пока я не написал это в файле .emacs:
(global-set-key (kbd "TAB") 'self-insert-command)
Ответ 14
Это единственное решение, которое сохраняет вкладку от когда-либо вставленной для меня, без последовательности или преобразования вкладок в пробелы. Оба они казались адекватными, но расточительными:
(setq-default
indent-tabs-mode nil
tab-width 4
tab-stop-list (quote (4 8))
)
Обратите внимание, что для quote
нужны два числа (но не более!).
Кроме того, в большинстве основных режимов (например, Python
) в Emacs автоматически создается отступ. Если вам нужно отступать от автоматического отступа, используйте:
M - i
Ответ 15
Настройки могут теневое (setq tab width 4)
, поэтому либо используйте setq-default
, либо пусть Customize знает, что вы делаете. У меня также были проблемы, похожие на OP, и исправляли их только одним, не нужно было настраивать tab-stop-list
или любые функции insert
:
(custom-set-variables
'(tab-width 4 't)
)
Было полезно добавить это сразу после (отзыв от emacsWiki):
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
Ответ 16
Вы пробовали
(setq tab-width 4)
Ответ 17
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
Ответ 18
Кстати, для C-mode я добавляю (setq-default c-basic-offset 4)
в .emacs. Подробнее см. http://www.emacswiki.org/emacs/IndentingC.
Ответ 19
Из моего файла инициализации разные, потому что мне нужны пробелы вместо вкладок:
(add-hook 'sql-mode-hook
(lambda ()
(progn
(setq-default tab-width 4)
(setq indent-tabs-mode nil)
(setq indent-line-function 'tab-to-tab-stop)
(modify-syntax-entry ?_ "w") ; now '_' is not considered a word-delimiter
(modify-syntax-entry ?- "w") ; now '-' is not considered a word-delimiter
)))