SMIEは、構造的なナビゲーションや、コードの構文構造に依存する各種機能(特に自動インデント)をワンストップで提供することを目的としています。主なエントリポイントはsmie-setupであり、これは通常、メジャーモードの設定時に呼び出される関数です。
SMIEのナビゲーションとインデントを設定します。grammarはsmie-prec2->grammarによって生成された文法テーブルです。rules-functionはsmie-rules-functionで使用するインデントルールのセットです。keywordsは追加の引数であり、以下のキーワードを含めることができます:
:forward-token fun:
使用するフォワードレクサーを指定します。
:backward-token fun:
使用する逆方向レクサーを指定します。
この関数を呼び出すだけで、forward-sexp、backward-sexp、transpose-sexps
といったコマンドが、構文テーブルで既に処理されている対になった括弧以外の構造要素も適切に扱えるようになります。例えば、提供された文法が十分に精緻であれば、transpose-sexps は言語の優先順位規則を考慮して、+ 演算子の2つの引数を正しく転置することができます。
smie-setup を呼び出すだけでも、TAB
のインデントが期待通りに動作し、blink-matching-paren を拡張して begin...end
のような要素にも適用できるほか、メジャーモードのキーマップにバインド可能なコマンドもいくつか提供されます。
このコマンドは、直近で開いた(まだ閉じていない)ブロックを閉じます。
このコマンドは down-list と同様ですが、begin...end のように括弧以外のトークンの入れ子構造にも対応しています。