4

Incoffee-mode RETは正常に動作するものにバインドされcoffee-newline-and-indentています。

evil-modeVimエミュレーションも使用しています。evil-modeは標準を使用しているため、やnewline-and-indentなどの一部の vim コマンドではインデントが正しくありません。oO

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 に答える
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

解決策を見つけました。

Evil-mode は実際に を使用しcoffee-indent-lineます。問題は、coffee-indent-line正しくインデントしないことから発生します。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 に答える