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, по-видимому.)

6
задан jameshfisher 2 July 2010 в 12:09
поделиться

3 ответа

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

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

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

  • c-tab-always-indent
  • c-syntactic-indentation
  • indent-tabs-mode

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

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

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

7
ответ дан 9 December 2019 в 20:39
поделиться
;; * Inserted "tabs" to be expanded into two spaces. Emacs stubbornly
;;   sticks to eight, no matter what I do.

;; * Tabs (i.e. real \t characters) to be represented on screen by two
;;   spaces.

(setq-default tab-width 2)


;; * Pressing TAB should insert a tab at the cursor rather than indent
;;   the entire line. Currently, I press TAB anywhere and Emacs
;;   destroys all whitespace at the start of the line; this is the
;;   most infuriating thing so far.

(setq-default indent-tabs-mode t)

(mapcar (lambda (hooksym)
          (add-hook hooksym
                    (lambda ()
                      (kill-local-variable 'indent-tabs-mode)
                      (kill-local-variable 'tab-width)
                      (local-set-key (kbd "TAB") 'self-insert-command))))

        '(
          c-mode-common-hook

          ;; add other hook functions here, one for each mode you use :-(
          ))

;; How to know the name of the hook function?  Well ... visit a file
;; in that mode, and then type C-h v major-mode RET.  You'll see the
;; mode's name in the *Help* buffer (probably on the second line).

;; Then type (e.g.) C-h f python-mode; you'll see blather about the
;; mode, and (hopefully) somewhere in there you'll see (again e.g.)
;; "This mode runs the hook `python-mode-hook', as the final step
;; during initialization."
4
ответ дан 9 December 2019 в 20:39
поделиться

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

(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)
1
ответ дан 9 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: