前の行ではなく、新しい行のみをインデントするように、RET(電気的インデントあり)の動作を変更します。


9

/programming/27077770/how-do-i-disable-electric-indent-on-ret-but-still-keep-other-electric-charactersは、RETを押したときに電気インデントを無効にする方法を尋ねて答えます。同様の質問はすべて、「インデントモードを無効にする」で止まるようです。

デフォルトでは、RETは前の行と新しい行をインデントします。新しい行の場合、これは、カーソルを正しい位置に表示するのに十分な空白を単に追加することを意味します。

動作の2番目の部分は好きですが、最初の部分は好きではありません。つまり、前の行をインデントしたくありません。それを変更して新しい行に十分な空白を与える方法はありますが、前の行はそのままにしておきますか?

私は実際にはほとんどの電気を必要としない/欲しくない。電気インデントモードをオフにするが、「新しい行に空白を追加する」機能を何らかの方法でアクティブにするという解決策は、私には問題ありません。

回答:


6

あなたはあなたが欲しいものを手に入れると思います

(setq-default electric-indent-inhibit t)

これはメジャーモード用の変数として(ユーザー用ではなく)意図されていましたが、ユースケースにも対応する必要があります。


素晴らしいありがとう。私はふるいにかける間にこの変数に偶然electric.el出会いましたが、そのドキュメントのためにそれを脇に置きました:「nilでない場合、再インデントはこのバッファには適切ではありません。」それについての私の解釈は、それがこのバッファの電気モードを単に無効にするだろうということでした...
AnoE

重要なのは、それがインデント、つまり新しい行のインデントではなく、既存の行のインデントを変更することについて話していることです。
Stefan

中かっこ(現在の行)を入力するときは、電気インデントモードが好きです。Enterキーを押したときに前の行が変更されないようにしながら、この動作を維持する方法はありますか?
Stanley Bak

1

私は実際にはほとんどの電気を必要としない/欲しくない。電気インデントモードをオフにするが、「新しい行に空白を追加する」機能を何らかの方法でアクティブにするという解決策は、私には問題ありません。

このアプローチは興味深いかもしれません:

プログラミングモードでは、常にRETを呼び出すindent-new-comment-lineか、そのモード固有のアナログを呼び出しますM-j。これには、常にデフォルトのバインディングがあります。これらの関数はインデントを処理し、内部にいる場合はコメントの継続もコメントします。

(defun my-coding-config ()
  ;; ...
  (local-set-key (kbd "RET") (key-binding (kbd "M-j")))
  (local-set-key (kbd "<S-return>") 'newline)
  )

(mapc
 (lambda (language-mode-hook)
   (add-hook language-mode-hook 'my-coding-config))
 '(prog-mode-hook
   ;; plus anything not derived from prog-mode:
   inferior-emacs-lisp-mode-hook
   css-mode-hook
   python-mode-hook))

(add-hook 'js-mode-hook 'my-js-mode-hook)
(defun my-js-mode-hook ()
  ;; Fix M-j behaviour in block comments in js-mode
  (setq-local comment-multi-line t)
  (local-set-key [remap indent-new-comment-line] 'c-indent-new-comment-line))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.