Emacs глобальная конфигурация вкладок

Я пытаюсь переключиться с Vim на Emacs, но я рву волосы, пытаясь настроить его так, чтобы вкладки обрабатывались так, как я хочу. Я требую:

  • Вставленные "вкладки" должны быть расширены до двух пробелов. Emacs упорно придерживается восьми, что бы я ни делал.
  • Табуляторы (т.е. реальные \t символы) должны быть представлены на экране двумя пробелами.
  • Нажатие клавиши TAB должно вставить табуляцию под курсором, а не сдвигать всю строку. Сейчас я нажимаю TAB в любом месте, и Emacs уничтожает все пробелы в начале строки; это самая раздражающая вещь на данный момент.

Мои текущие ~/.emacs чтения

(setq standard-indent 2)
(setq-default indent-tabs-mode nil)

но я пробовал бесконечное количество предложенных конфигураций из Интернета, ни одна из которых не сделала того, что они обещали. (API постоянно меняется? Я использую GNU Emacs 23.1.1, видимо.)


person jameshfisher    schedule 02.07.2010    source источник


Ответы (2)


Emacs имеет чрезвычайно гибкую поддержку обработки отступов. Как правило, режим, в котором вы находитесь, определяет, как они работают, поэтому, если вы работаете с файлом C, то способ, которым работает нажатие вкладки, будет отличаться от того, если вы работаете с файлом Python.

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

Чтобы изменить способ отображения вкладок, вам необходимо установить для ширины табуляции значение 2. Если вы редактируете код в стиле Java или C, то это звучит так, как будто вы хотите отключить все приятные функции отступа с их помощью на NIL:

  • c-tab-always-indent
  • c-синтаксический отступ
  • indent-tabs-mode

Я предлагаю вам установить их через интерфейс настройки. Если вы используете «M-x customize-group RET C», вы можете увидеть различные настройки для режима C.

Если вы редактируете файлы разных типов, инструкции будут другими.

Возможно, emacs находится в неправильном режиме для вашего файла. Вы можете попробовать выполнить «основной режим M-x», чтобы увидеть, предпочитаете ли вы такое поведение.

person Damyan    schedule 02.07.2010

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

(defun insert-tab ()
  "self-insert-command doesn't seem to work for tab"
  (interactive)
  (insert "\t"))
(setq indent-line-function 'insert-tab)  ;# for many modes
(define-key c-mode-base-map [tab] 'insert-tab) ;# for c/c++/java/etc.
(setq-default tab-width 2)
person Trey Jackson    schedule 02.07.2010