将邪恶的移位宽度设置为emacs中的缓冲区本地缩进

Rea*_*onk 8 emacs elisp evil-mode

我使用邪恶,得到了

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

我想将evil-shift-width设置为缓冲区局部缩进宽度(变量indent).

(add-hook 'after-change-major-mode-hook
      (function (lambda ()
                  (setq evil-shift-width indent))))
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Tre*_*son 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))))
Run Code Online (Sandbox Code Playgroud)

为您想要支持的每种主要模式添加一个新模式.