2011-12-12 14 views
8

Io uso il male, che ha ottenutoimpostare la larghezza dello spostamento del male per il rientro del buffer locale in emacs

(defcustom evil-shift-width 4 
    "The offset used by \\<evil-normal-state-map>\\[evil-shift-right] \ 
and \\[evil-shift-left]." 
    :type 'integer 
    :group 'evil) 

mi piacerebbe impostare il male-shift larghezza alla larghezza trattino buffer locale (la variabile indent).

(add-hook 'after-change-major-mode-hook 
     (function (lambda() 
        (setq evil-shift-width indent)))) 

Cosa mi sono perso?

+1

Mancano una coppia di parentesi attorno alla forma '(setq ...)' e un chiarimento su ciò che si desidera o si aspetta che il 'indent' sia. – tripleee

+0

@ triple spero che aiuti. – Reactormonk

+1

Cosa succede e cosa ti aspetti che accada? Da dove viene il 'indent' e quando viene impostato? – nschum

risposta

17

Senza ulteriori informazioni, Credo di capire il problema di essere che il desiderio è per evil-shift-width da impostare a 4 in python-mode e 2 in ruby-mode (per fare due esempi), ma è sempre impostato su 2.

Il problema in questo caso deriva dal fatto che indent non è definito globalmente in Emacs e certamente non in python-mode. In python-mode c'è una variabile python-indent, che è impostata su 4, e quella è la variabile da utilizzare.

Mentre fastidioso dover utilizzare le variabili personalizzate per ciascuno dei principali modi, questo è quello che ciascuno dei modi in realtà usano, e questo è probabilmente la soluzione che effettivamente funzionare:

(add-hook 'python-mode-hook 
    (function (lambda() 
      (setq evil-shift-width python-indent)))) 
(add-hook 'ruby-mode-hook 
    (function (lambda() 
      (setq evil-shift-width ruby-indent-level)))) 

Aggiunta di una nuova per ciascuna modalità principale che si desidera supportare.

Problemi correlati