source para mac code emacs tabs spaces expand

para - Configuración global de pestañas de Emacs



emacs para mac (3)

Intento pasar de Vim a Emacs, pero me estoy arrancando el pelo tratando de configurarlo para tratar las pestañas como me gustaría. Requiero:

  • Se insertaron "pestañas" para expandir en dos espacios. Emacs obstinadamente se queda con ocho, no importa lo que haga.
  • Pestañas (es decir, caracteres /t reales) que se representarán en pantalla por dos espacios.
  • Presionando TAB debe insertar una pestaña en el cursor en lugar de sangrar toda la línea . Actualmente, presiono TAB en cualquier lugar y Emacs destruye todos los espacios en blanco al comienzo de la línea; esto es lo más irritante hasta ahora.

Mi actual ~/.emacs lee

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

pero he intentado infinitas configuraciones sugeridas desde la web, ninguna de las cuales ha hecho lo que dijeron que harían. (¿La API cambia constantemente? Estoy usando GNU Emacs 23.1.1 , al parecer).


Emacs tiene un soporte extremadamente flexible para manejar la indentación. En general, el modo en que se encuentra dicta cómo funcionan, por lo que si está trabajando en un archivo C, la forma en que presione la pestaña funcionará será diferente a la que está trabajando en un archivo Python.

Por lo tanto, depende del modo en el que esté trabajando, lo que limitará las respuestas que obtenga. En la mayoría de los casos, recomendaría que no lucharas contra él; para mí, el comportamiento de indentación es una de las mejores características de emacs. Sin embargo, necesita pasar el tiempo para personalizarlo usted mismo.

Para cambiar la forma en que se muestran las pestañas, debe establecer el ancho de las pestañas en 2. Si está editando código de estilo Java o C, entonces parece que desea desactivar todas las características de indentación agradables de NIL:

  • c-tab-always-indent
  • c-imprenta sintáctica
  • indent-tabs-mode

Sugiero que establezcas estos a través de la interfaz de personalización. Si usa "Mx customize-group RET C", puede ver las diversas configuraciones para el modo C.

Si está editando diferentes tipos de archivos, las instrucciones serán diferentes.

Quizás emacs esté en el modo incorrecto para su archivo. Podría intentar hacer "Mx fundamental-mode" para ver si prefiere el comportamiento allí.


Esto debería darte la mayor parte de lo que quieres. Probablemente tendrá que personalizar algunos otros modos de programación que usa habitualmente.

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


;; * 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."