4

Incoffee-mode RET绑定到coffee-newline-and-indent哪个工作正常。

我也evil-mode曾经有过 Vim 仿真。evil-mode使用标准newline-and-indent,因此对于某些 vim 命令,例如oor ,缩进是不正确的O

重新绑定的最佳方法是newline-and-indent什么coffee-newline-and-indent

我仍然是 ELisp 的新手,并尝试了下面的行,但它不起作用。

(add-hook 'coffee-mode-hook
          (lambda () 
            (setq newline-and-indent '(funcall coffee-newline-and-indent))))
4

5 回答 5

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))))
于 2013-08-19T13:39:52.183 回答
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,但make-variable-buffer-local不适用于这种情况,而且我也无法获得深层副本symbol-function。我很高兴看到更好的方法。

于 2013-08-19T13:09:18.387 回答
0

我找到了解决方案。

邪恶模式实际上使用coffee-indent-line. 问题来自coffee-indent-linewhich 没有正确缩进。Evil-mode 在修补后可以正常工作,如下所示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)))
于 2013-08-20T11:09:05.913 回答
0

尝试以下操作:

(define-key evil-mode-map (kbd "RET") nil)

我知道它看起来过于简单,但如果 evil-mode 以我认为的方式工作,那么它应该可以工作。

  1. 这将从您的 evil-mode-map 中擦除 ret 键,这将使 coffee-mode-map 的绑定发光。
  2. 在非咖啡缓冲区中, ret 键仍然有效,因为它仍然绑定在全局映射中。
于 2013-08-19T23:23:52.993 回答
0

如果你想重新映射一个 func,但前提是某些主要模式处于活动状态 - 创建一个定义别名的 func 并运行 func (A) - 另一个 func (B) 调用 (A) - 最后,主要模式可以建议func A 设置正确的函数。它必须测试主要模式。

假设 A 是 define-my-indent-f 然后它说 (defalias my-indent 'newline-and-indent) func b 运行 A 然后运行命令 my-indent。finally coffe mode 确实 defadice A 说(如果 eq major mode coffee defalais my-indent 'coffe-newline-and-indent)

当然,这定义起来非常繁重,但是 - 每个主要模式都可以添加它的部分 - 只有加载的主要模式才会提供建议

于 2017-10-15T19:59:12.160 回答