我有几个主要模式(比如:Yaml和NXML),我不想要电动缩进模式(我希望它用于C语言),但是如果关闭我就无法转动。要启用我:
(electric-indent-mode 1)
来自文档(对于变量电动缩进模式)
如果启用电气缩进模式,则为非零。 请参阅命令
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
轻松自定义') 或者调用函数`electric-indent-mode'。
和功能
切换动态重新注册(电子缩进模式)。带前缀 参数ARG,如果ARG为正,则启用电子缩进模式 否则禁用它。如果从Lisp调用,则在ARG启用时启用该模式 省略或无。
所以我试着把它关掉:
(add-hook 'yaml-mode-hook (lambda ()
(electric-indent-mode -1)))
(Actualy我使用after-change-major-mode-hook并检查(memql major-mode '(yaml-mode python-mode nxml-mode))
我可以在列表中添加更多模式。)
但它不起作用,我也试过:
(set (make-local-variable 'electric-indent-mode) nil)
没有快乐。但是当我从.emacs文件中评估(electric-indent-mode -1)
时,它可以正常工作。
答案 0 :(得分:12)
使用最近的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)))
答案 1 :(得分:4)
electric-indent-mode
。要在本地关闭它,您将能够使用lunaryorn提到的electric-indent-local-mode
。但是要在24.3中将其关闭,你可以这样做:
(add-hook 'foo-mode-hook
(lambda () (set (make-local-variable 'electric-indent-mode) nil)))
你提到第一种表格对你不起作用,但它应该(如果没有,那是因为其他一些问题)。
答案 2 :(得分:2)
至少在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)