Улучшенная вкладка в Emacs
-
19-08-2019 - |
Вопрос
Я хочу переопределить неверную схему вкладок по умолчанию в emacs, чтобы она работала, как и большинство других редакторов (eclipse, notepad ++). Я хочу установить его так, чтобы независимо от режима вкладка вставляла вкладку, а нажатие клавиши ввода сохранит мою текущую глубину вкладки.
Я пробовал это, но это ничего не делает:
(global-set-key (kbd "TAB") 'tab-to-tab-stop)
(setq default-tab-width 4) ;; 8 is way too many
Решение
Чтобы клавиша Enter перенесла вас на следующую строку и сделал отступ автоматически, вы можете поставить
(global-set-key (kbd "RET") 'newline-and-indent)
в вашем .emacs
. [Или вы можете нажать C-j
вместо Enter.] Когда у вас есть это, вам никогда не нужно будет вставлять вкладки вручную, потому что Emacs автоматически делает отступ новой строки на дополнительную глубину после открывающей скобки и т. Д. Если вы хотите изменив отступ, вы можете нажимать клавишу TAB до тех пор, пока она не приведет вас к нужному отступу, а затем начать печатать оттуда. [И когда вы набираете закрывающую скобку, Emacs достаточно умен, чтобы перевести эту скобку на один уровень отступа назад.]
Вы должны удалить (global-set-key (kbd "TAB") 'tab-to-tab-stop)
, чтобы это работало.
Другие советы
Многие основные режимы переопределяют привязку TAB
, например, cc-mode привязывает 'c-indent-to-column
к 'global-set-key
.
Предложенное 'pabbrev
ничего не делает, поскольку почти все основные режимы переопределяют <=>.
Один из приемов, который может вам пригодиться, - это скопировать подход, который использует <=>, и определить глобальный второстепенный режим с ограничением <=>. Вы можете сделать это так:
(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode")
(define-minor-mode just-tab-mode
"Just want the TAB key to be a TAB"
:global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap
(define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command))
Однако это отключает все <=> завершение. Вы, вероятно, получите наилучшие результаты, переопределив каждый из основных режимов один за другим (чтобы избежать размышлений <=> завершения).
Я думаю, что ответ Трея Джексона, вероятно, то, что вы хотите, за исключением, возможно, использовать 'self-insert-command
вместо 'indent-for-tab-command
. Лично я предпочитаю поведение по умолчанию в emacs, но self-insert-command
делает то, что говорит, вместо того, чтобы пытаться сделать что-то необычное, например, убедиться, что ваш код хорошо отформатирован.
Несколько раз я хочу вставить вкладку (без отступа), нажимаю M-i.
Вас может заинтересовать этот второстепенный режим, который я создал на http://github.com/vohrta/regtab а>. р>
Это делается для того, чтобы при нажатии клавиши табуляции в этой точке помещались либо символы табуляции (если indent-tabs-mod не nil), либо пробелы ширины табуляции. Режим также способен обрабатывать то, что вы можете считать обычным поведением в области выделенного текста, и сдвигать табуляции для удаления вкладок в начале строки (или набора строк). Вы можете включить или отключить его в любое время, нажав M-x regtab-mode.
Меня это тоже раздражало, когда я впервые начал использовать Emacs. Я полюбил это, хотя. Если я хочу сделать отступ соответствующим образом, я нажимаю <tab>;
, если я хочу вставить буквенную вкладку, я нажимаю M-i
(Meta and 'i' или & Lt; Alt & Gt; - & Lt; я > в некоторых словах), который связан с tab-to-tab-stop
.
C-j
выполняет функцию перехода на новую строку + отступ, которую вы хотите, нажав Enter.