coffee-mode
RET
绑定coffee-newline-and-indent
,效果正常。
我还使用evil-mode
进行Vim仿真。 evil-mode
使用标准newline-and-indent
,因此某些vim命令(例如o
或O
)的缩进不正确。
将newline-and-indent
重新绑定到coffee-newline-and-indent
的最佳方式是什么?
我仍然是ELisp的新手并试过下面的一行,但它不起作用。
(add-hook 'coffee-mode-hook
(lambda ()
(setq newline-and-indent '(funcall coffee-newline-and-indent))))
答案 0 :(得分:1)
这是我的尝试。它应该工作,但我不喜欢它。
(add-hook
'coffee-mode-hook
(lambda ()
(defalias
'newline-and-indent
(lambda()
(interactive)
(if (eq major-mode 'coffee-mode)
(coffee-newline-and-indent)
(delete-horizontal-space t)
(newline)
(indent-according-to-mode))))))
我希望我能用更优雅的东西来复制源码
newline-and-indent
的{{1}},但make-variable-buffer-local
不适用于此情况,
我无法获得symbol-function
的深层副本。
我很高兴看到更好的方法。
答案 1 :(得分:1)
完成你似乎要求的标准方法是
(autoload 'coffee-newline-and-indent "coffee-mode") ; (or whatever)
(define-key evil-mode-map (kbd "RET") 'coffee-newline-and-indent)
编辑:仅在coffee-newline-and-indent
中启用coffee-mode
:
(define-key evil-mode-map (kbd "RET")
(lambda ()
(interactive)
(if (eq major-mode 'coffee-mode)
(coffee-newline-and-indent)
(newline-and-indent))))
答案 2 :(得分:0)
尝试以下方法:
(define-key evil-mode-map (kbd "RET") nil)
我知道它看起来过于简单,但如果邪恶模式按照我认为的方式工作那么它应该有效。
答案 3 :(得分:0)
我找到了解决方案。
邪恶模式实际上使用coffee-indent-line
。问题来自coffee-indent-line
,它没有正确缩进。在将其修改为coffee-newline-and-indent
之后,邪恶模式可以正常工作:
(defadvice coffee-indent-line (after wants-indent activate)
(let ((tabs-needed (- (/ (coffee-previous-indent) coffee-tab-width) 1)))
(when (> tabs-needed 0)
(insert-tab tabs-needed)))
(when(coffee-line-wants-indent)
(insert-tab)))
答案 4 :(得分:0)
如果要重新映射func,但仅限于某些主要模式处于活动状态 - 创建一个定义别名的func 并运行功能(A) - 另一个函数(B)调用(A) - 最后,主模式可以建议功能A设置正确 FUNC。它必须测试主要模式。
让我们说A是define-my-indent-f 然后它说(defalias my-indent' newline-and-indent) func b运行A然后运行命令my-indent。 最后coffe模式确实消除了A说 (如果eq主要模式咖啡defalais my-indent' coffe-newline-and-indent)
当然这是非常重要的定义,但随后 - 每个主要模式都可以添加它的作品 - 只有加载主要模式的建议