2010-07-02 8 views
5

J'essaye de passer de Vim à Emacs, mais je m'arrache les cheveux en essayant de le configurer pour traiter les onglets comme je le souhaite. Je redemanderas à être étendu à deux espaces Emacs configuration globale des onglets

  • Inséré « onglets ». Emacs s'en tient obstinément à huit, peu importe ce que je fais.
  • Onglets (c'est-à-dire réels \t caractères) devant être représentés à l'écran par deux espaces.
  • En appuyant sur TAB doit insérer une tabulation au curseur plutôt que indenter la ligne entière. Actuellement, j'appuie sur TAB n'importe où et Emacs détruit tout l'espace au début de la ligne; c'est la chose la plus exaspérante jusqu'à présent.

Mon actuelle ~/.emacs lit

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

mais j'ai essayé sans fin de configurations proposées à partir du Web, dont aucun ne l'ont fait ce qu'ils ont dit qu'ils le feraient. (L'API change-t-elle constamment? J'utilise apparemment GNU Emacs 23.1.1.)

Répondre

7

Emacs a un support extrêmement flexible pour la manipulation de l'indentation. Généralement, le mode dans lequel vous vous trouvez dicte comment ils fonctionnent - donc si vous travaillez sur un fichier C, la façon dont l'onglet de pression fonctionne sera différente de celle utilisée pour un fichier Python.

Cela dépend donc du mode dans lequel vous travaillez, ce qui limite les réponses que vous obtenez. Dans la plupart des cas, je vous recommande de ne pas vous battre contre cela - pour moi, le comportement d'indentation est l'une des meilleures caractéristiques d'emacs. Cependant, vous devez passer le temps de le personnaliser pour vous-même. Pour modifier l'affichage des onglets, vous devez définir la largeur de tabulation sur 2. Si vous modifiez le code de style Java ou C, il semble que vous souhaitiez désactiver toutes les fonctions d'indentation intéressantes :

  • c-tab-toujours-tiret
  • c-syntaxique indentation
  • indent-tabs-Mode

Je vous suggère de régler ces via l'interface de personnalisation. Si vous utilisez "M-x custom-group RET C", vous pouvez voir les différents paramètres pour le mode C.

Si vous éditez différents types de fichiers, les instructions seront différentes.

Emacs est peut-être dans le mauvais mode pour votre fichier. Vous pourriez essayer de faire "M-x basic-mode" pour voir si vous préférez le comportement là-bas.

1

Cela devrait vous permettre d'obtenir ce que vous voulez. Vous devrez probablement personnaliser d'autres modes de programmation que vous utilisez habituellement.

(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." 
Questions connexes