установить ширину злого смещения для отступа в буфере в emacs - PullRequest
8 голосов
/ 12 декабря 2011

Я использую зло, которое получило

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

Я хотел бы установить evil-shift-width равным ширине отступа локального буфера (переменная indent).

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

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

1 Ответ

17 голосов
/ 20 декабря 2011

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

Проблема в этом случае возникает из-за того, что indent не определен глобально в Emacs и, конечно, не в python-modepython-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))))

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

...