11

(//)一時的なコメントを行または行のブロックに完全に左揃えにしたい場合があります/* */。ただし、CC Mode2 番目のキーの入力時に自動インデントすることでこれをオーバーライドします。一般に、キーワードなどの自動インデントが好きですが、コメントでは無効にしたいと思います。(更新:つまり、コメントのインデントがc-electric -key-bindingsによってトリガーされる方法を無効にしたいのですが、コメントは通常どおりインデントする必要があります)

これらの行を に入れてみました.emacsが、動作を妨げません。

(c-electric-slash nil)
(c-electric-star nil)
4

2 に答える 2

9

簡潔な答え:

(eval-after-load 'cc-mode
  '(progn
     (define-key c-mode-base-map "/" 'self-insert-command)
     (define-key c-mode-base-map "*" 'self-insert-command)))

これが私がそれについて行く方法です:

にバインドされている関数を見つけます/C-h k /

「/ は、'cc-cmds.el' でインタラクティブにコンパイルされた Lisp 関数であるコマンド c-electric-slash を実行します」と表示されます。

(へのリンクが表示cc-cmds.elされない場合は、elisp ソースがインストールされていません。Windows を使用していないと仮定すると、システムのパッケージ マネージャーを使用してemacs-elパッケージをインストールし、再試行できます。)

そのリンクをたどって を開きcc-cmds.elます。を検索しc-electric-slashても関数定義以外は見つからないため、キーはこのファイルにバインドされていません。このディレクトリから検索するとcc-mode.el、次のことがわかります。

(define-key c-mode-base-map "/" 'c-electric-slash)

これで、キーバインディングをオーバーライドする「キーマップ」の名前がわかりました/

次のようなものを init ファイルに追加すると、起動時にエラーが発生する可能性があります。

(define-key c-mode-base-map "/" 'self-insert-command)

... init ファイルが cc-mode.el の前にロードされ、c-mode-base-map未定義であるためです。だから私たちはeval-after-load(私の答えの一番上にあるように)使用します。最初の引数 は、 cc-mode.el の最後にあるステートメント'cc-modeと一致する必要があります。意味provideがわからない場合は、 を実行してください。prognC-h f progn

このスタイルの Emacs の学習/発見が気に入った場合は、私の「Emacs の学習方法」を読むことを検討してください。

于 2012-06-16T20:29:41.393 に答える
0

c-indent-comment-alist&c-indent-comments-syntactically-p変数を見ることをお勧めします。詳細については、この変数のヘルプ ( ) と、CC モード マニュアルの「インデントのカスタマイズ」および「スタイル変数C-h v」のセクションを参照してください。

于 2012-06-16T12:06:56.530 に答える