Вопрос

Я хочу переопределить неверную схему вкладок по умолчанию в 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.

Меня это тоже раздражало, когда я впервые начал использовать Emacs. Я полюбил это, хотя. Если я хочу сделать отступ соответствующим образом, я нажимаю <tab>;, если я хочу вставить буквенную вкладку, я нажимаю M-i (Meta and 'i' или & Lt; Alt & Gt; - & Lt; я > в некоторых словах), который связан с tab-to-tab-stop.

C-j выполняет функцию перехода на новую строку + отступ, которую вы хотите, нажав Enter.

scroll top