2011-11-14 11 views
2

Emacsでソースコードを編集していて、<のタブ>にヒットしました。 Emacsは行をn個のスペースにインデントします。私はその種の行のインデント量を変更したいと思います。どのようなルールがemacsがn行分の行をインデントするために適用したのか分かりますか?emacsが一定量インデントされた理由を特定するにはどうすればよいですか?

I nは変更したいが、私はEmacsはちょうど使用される多くのインデント関連の変数のどれを把握する必要があります。

+1

おそらく最良の方法ではありませんが、Ch k を実行して、タブを押したときのモードでどの機能が呼び出されているかを確認し、そこから変数を取得できるかどうか確認してください。 – spike

+0

答えはありません。 'Mx apropos RET RET'を試してみてください。 'offset'キーワードを見てみることをお勧めします。私はそれがすべての主要なモードごとに一つの変数であると思う。 – desudesudesu

+0

この質問に答えるには、ファイルがどのモードにあるかを指定する必要があります(C++、perl、Tcl、Java、R、テキストなどなど)。 @spikeは良い一歩を踏み出しましたが、 ''キー(一般的な字下げ機能の場合)にどの機能がバインドされているかをさらに詳しく調べることができます。 –

答えて

4

ccモード(cモード、C++モード、javaモードなど)に基づいたモードを使用している場合、Cc Csをヒットすると、どのような構文カテゴリラインはです。変更したい場合は、C-c C-oと打ってください。その手順がわかります。詳細については、カスタマイズのCCモードのドキュメントをチェックアウト:https://www.gnu.org/s/emacs/manual/html_node/ccmode/Customizing-Indentation.html

4

一般的な答えは困難です。いくつかのモードでは他のものよりもこのことが明らかになりますが、一般的なケースでは(インデントを自由に実装できるので)、私はあなたがelispを読む必要がなくなるとは思わないでしょう。

のバインディングから始めて、TABが動作しますが、インダイレクションの階層数に応じて多少時間がかかることがあります。

主要なモードが独自のインデントを実装していることがわかっている場合は、呼び出される関数の追跡を助けることができる1つの(厳密ではないが高速な)アプローチは、ELPプロファイラ。 elp-instrument-packageは、指定した接頭辞文字列引数に一致する名前を持つすべての関数のプロファイリングを行います。したがって、あなたがPHPファイルに次のような何かを行う可能性があります

のMxelp-instrument-packageRETphp-RET
はMxelp-instrument-package(PHPモードは、それがCモードに由来していることを示していますことに注意) RETc-RET
のMxelp-instrument-packageRETindentRET

は、今すぐあなたのソースコードにTABを入力して、呼び出されたそれらのインストルメント機能のかを確認するためにM-Xelp-resultsを実行します。あなたがあなた自身にしている。この時点で

- おそらく容疑者を探し、そしてコードが何をしているか見る - それは、検索をフィルタリングするための便利な方法することができます。

終了したら、さらにプロファイルを防止するためにM-xelp-restore-allを使用してください。

1

あなたの手は本当に汚れ楽しむために起こる場合は、Emacsは最大であるだけで何を伝えるためにelispのデバッガは常にあります。

はあなたがEmacsが実行されている機能を見つけることができますC-h k TABをヒットした場合(例えば、indent-for-tab-commandM-x debug-on-entry RET indent-for-tab-command RETを実行できます。今すぐにTABを押すと、デバッガがポップアップし、実行を段階的に見ることができます。

デバッグの好みに応じて、それは狂ったか啓発的な経験です。いずれにしても、完了したらM-x cancel-debug-on-entryを忘れないでください。

関連する問題