2011-12-12 2 views
8

Я использую зло, которое получилоустановить злую ширину смещения в буфере локального отступа в 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) 

Я хотел бы установить злую-Shift-ширину буферного локальной ширину отступа (переменное indent).

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

Что я пропустил?

+1

Вам не хватает пары круглых скобок вокруг формы '(setq ...)' и пояснения о том, чего вы хотите или ожидаете, 'indent'. – tripleee

+0

@ tripleee надеюсь, что это поможет. – Reactormonk

+1

Что происходит и что вы ожидаете? Откуда возникает «отступ» и когда он установлен? – nschum

ответ

17

Без дополнительной информации, я считаю, я понимаю проблему в том, что желание для evil-shift-width быть установлено до 4 python-mode и 2 в ruby-mode (для двух примеров), но она всегда имеет значение 2.

Проблема в этом случае связана с тем, что indent не определен глобально в Emacs и, конечно же, не в python-mode. В python-mode существует переменная python-indent, которая установлена ​​в 4, и это переменная, которую следует использовать.

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

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

Добавление нового для каждый основной режим, который вы хотите поддерживать.