Улучшенная вкладка в Emacs - PullRequest
       21

Улучшенная вкладка в Emacs

5 голосов
/ 05 декабря 2008

Я хочу переопределить неверную схему вкладок по умолчанию в emacs, чтобы она работала, как и большинство других редакторов (eclipse, notepad ++). Я хочу установить его так, чтобы независимо от режима вкладка вставляла вкладку, а нажатие клавиши ввода сохранит мою текущую глубину вкладки.

Я пробовал это, но ничего не происходит:

(global-set-key (kbd "TAB") 'tab-to-tab-stop)
(setq default-tab-width 4) ;; 8 is way too many

Ответы [ 6 ]

9 голосов
/ 06 декабря 2008

Чтобы заставить клавишу 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), чтобы это работало.

7 голосов
/ 06 декабря 2008

Многие основные режимы переопределяют привязку TAB, например, cc-mode привязывает TAB к 'c-indent-to-column.

Предполагаемый 'global-set-key ничего не делает, так как почти все основные режимы переопределяют TAB.

Одна хитрость, которая может сработать для вас, - это скопировать подход, используемый 'pabbrev, и определить глобальный второстепенный режим с ограничением TAB. Вы можете сделать это так:

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

Однако, это отключает все TAB завершение. Вы, вероятно, получите лучшие результаты, переопределив каждый из основных режимов один за другим (чтобы избежать размышлений о завершении TAB).

3 голосов
/ 02 мая 2009

Я думаю, что ответ Трея Джексона, вероятно, то, что вы хотите, за исключением, возможно, используйте 'self-insert-command вместо 'indent-for-tab-command. Я лично предпочитаю поведение по умолчанию в emacs, но self-insert-command делает то, что говорит, вместо того, чтобы пытаться сделать что-то необычное, например, убедиться, что ваш код хорошо отформатирован.

Несколько раз я на самом деле хочу вставить вкладку (не отступ) Я нажимаю M-i.

2 голосов
/ 28 октября 2009

Вас может заинтересовать этот второстепенный режим, который я создал в http://github.com/vohrta/regtab.

Это делается для того, чтобы при нажатии клавиши табуляции в этой точке помещались либо символы табуляции (если indent-tabs-mod не nil), либо пробелы ширины табуляции. Режим также способен обрабатывать то, что вы можете считать обычным поведением в области выделенного текста, и сдвигать табуляции для удаления вкладок в начале строки (или набора строк).

Вы можете включить или отключить его в любое время, нажав M-x regtab-mode.

2 голосов
/ 22 декабря 2008

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

1 голос
/ 05 декабря 2008

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

...