2010-07-02 17 views
5

Estoy intentando cambiar de Vim a Emacs, pero estoy rasgando mi pelo a cabo tratando de configurarlo para tratar pestañas cómo me gustaría. Requiero:Emacs configuración global de pestañas

  • Insertado "pestañas" para expandirse en dos espacios. Emacs obstinadamente se queda con ocho, no importa lo que haga.
  • Pestañas (es decir, \t caracteres reales) que se representarán en la pantalla dos espacios.
  • Al presionar 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 me han tratado sin fin de configuraciones sugeridas desde la web, ninguno de los cuales han hecho lo que dijeron que lo harían. (¿La API de cambiar constantemente? Estoy usando GNU Emacs 23.1.1, al parecer.)

Respuesta

7

Emacs tiene soporte muy flexible para el manejo de la sangría. En general, el modo en que son dictados cómo funcionan - por lo que si usted está trabajando en un archivo de C, entonces la forma en que las obras urgentes de la ficha serán diferentes que si está trabajando en un archivo de Python.

Por lo tanto, no depende del modo 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, parece que desea desactivar todas las funciones de indentación agradables a NIL :

  • c-tab-siempre-guión
  • c-sintáctico-muesca
  • indent-tabs-mode

te sugieren establece éstos a través de la interfaz de personalización. Si usa "M-x personalizar-grupo RET C", entonces puede ver las diversas configuraciones para el modo C.

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

Quizás Emacs es en el modo incorrecto para su archivo. Podría intentar hacer "M-x fundamental-mode" para ver si prefiere el comportamiento allí.

1

Esto debe conseguir que la mayor parte de lo que desea. 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) 
3
;; * 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." 
Cuestiones relacionadas