如何关闭特定主要模式的电动缩进模式



我有几个主要模式(如:Yaml 和 NXML),我不想要电缩进模式(我想要它用于 C 类语言),但如果关闭我无法关闭。要启用我,我有:

(electric-indent-mode 1)

来自文档(用于可变电动缩进模式)

如果启用了电缩进模式,则为非 nil。 请参阅命令electric-indent-mode' for a description of this minor mode. Setting this variable directly does not take effect; either customize it (see the info node轻松自定义') 或调用函数"电动缩进模式"。

和函数

切换即时缩进(电动缩进模式)。带前缀 参数 ARG,如果 ARG 为正,则启用电缩进模式,以及 否则禁用它。 如果从 Lisp 调用,如果 ARG 为 省略或为零。

所以我尝试在钩子中关闭它:

(add-hook 'yaml-mode-hook (lambda ()                        
                             (electric-indent-mode -1)))

(实际上我使用更改后的主要模式钩子并检查(memql major-mode '(yaml-mode python-mode nxml-mode))我可以向列表中添加更多模式的位置)。

但它不起作用,我也尝试过:

(set (make-local-variable 'electric-indent-mode) nil)

没有快乐。但是当我从 .emacs 文件中评估(electric-indent-mode -1)时它可以工作。

使用最近的 Emacs(可能只有 Emacs 快照),您可以使用 electric-indent-local-mode ,例如:

(add-hook 'yaml-mode-hook (lambda () (electric-indent-local-mode -1)))

如果你的Emacs缺少这个功能,你仍然可以通过electric-indent-functions来禁用该模式,例如

(add-hook 'yaml-mode-hook
          (lambda ()
             (add-hook 'electric-indent-functions
                            (lambda () 'no-indent) nil 'local)))

在任何一种情况下,您可能都可能希望通过以下方式恢复C-j

(add-hook 'yaml-mode-hook 
          (lambda () (local-set-key (kbd "C-j") #'newline-and-indent)))

electric-indent-mode将在 24.4 中默认启用。 要在本地关闭它,您将能够使用 lunaryorn 提到的electric-indent-local-mode。 但是要在 24.3 中本地关闭它,您可以执行以下操作:

(add-hook 'foo-mode-hook
          (lambda () (set (make-local-variable 'electric-indent-mode) nil)))

提到第一种形式对你不起作用,但它应该(即,如果它不起作用,那是因为其他一些问题)。

至少在 emacs 24.3 上,您无法在本地禁用电动缩进模式,因为它是一个global-mode。无论如何,yaml-mode的问题在于内置了electric-indent功能,即即使没有electric-indent-mode,它也将被启用。该软件包没有提供关闭此行为的方法,也许您应该在其 github 存储库上提交问题。

尝试此操作以禁用yaml-mode中的电缩进功能

(define-key yaml-mode-map "|" nil)
(define-key yaml-mode-map ">" nil)
(define-key yaml-mode-map "-" nil)
(define-key yaml-mode-map "." nil)
(define-key yaml-mode-map [backspace] nil)

要恢复之后的电缩进行为,您可以执行

(define-key yaml-mode-map "|" 'yaml-electric-bar-and-angle)
(define-key yaml-mode-map ">" 'yaml-electric-bar-and-angle)
(define-key yaml-mode-map "-" 'yaml-electric-dash-and-dot)
(define-key yaml-mode-map "." 'yaml-electric-dash-and-dot)
(define-key yaml-mode-map [backspace] 'yaml-electric-backspace)

相关内容

  • 没有找到相关文章

最新更新