2012-05-17 17 views
7

で複数文字の括弧を定義しますが、コードのこのような言葉「開始」と「終了」の間にブロックを囲みますチェック・パンレンなどを使用して、一致していないものを見つけることができますか?はVerilogでのEmacs

...

(modify-syntax-entry ?begin "(end") 
(modify-syntax-entry ?end ")begin") 

おかげで私は私の〜/の.emacsにファイルを、この(とのバリエーション)を追加しようとしましたが、それはそれが好きではありません。

+0

このようなことは、通常、インデントエンジンによって処理されます。例えば、バッファ全体をマークし、 'indent-region'を実行するなどして、構文をチェックするのに使用できます。ファイルの終わりが間違ってインデントされていると、開始/終了の不一致が発生します。 – Lindydancer

+0

@Lindydancerありがとうございましたが、私は一度に複数の人が編集しているコードに取り組んでいます。これらはすべて異なるエディタを使用しているため、コードのさまざまな部分が異なる方法でインデントされることがよくあります。また、ファイルのいくつかは非常に長くなる傾向があり、すべての 'indent-region'を選択すると時間がかかることがあります... – kiteflyingmonkey

+0

その場合は、一致する開始/終了のペアを見つけるカスタムパッケージを簡単に記述します。それは自明ではありませんが、もしあなたが新しいものであれば、それはelispの良い練習になると思います。 – Lindydancer

答えて

2

悲しいことに、Emacsの括弧にマッチするインフラストラクチャでは、マルチキャラクタトークンの多くを理解できません。 Emacs-23.4で追加された新しいライブラリSMIEの一部は、この問題に対処することを意図しています。これは、主要なモードが(非常に限られた種類の文法で)言語の構文を記述することを可能にします。その後、C-M-fやC-M-bのようなものは論理要素を飛び越える方法を知ります。 beginから一致するendにスキップしてください。 LindyDancerが指摘しているように、インデントには通常このようなことが必要であり、実際にSMIEの主な動機はジェネリックインデントエンジンを提供することでした。

VerilogはSMIEを使用しませんが、同様のナビゲーションコマンドを実装しています。それは予期しない現時点では、バッファの末尾にバンプ場合verilog-forward-sexpはあなたに適切な警告/エラーを与えるのであれば、あなたはおそらく、私にはわからない

(defun sm-verilog-check-parens() 
    (save-excursion 
    (goto-char (point-min)) 
    (while (not (eobp)) 
     (verilog-forward-sexp)))) 

カントーのような何かを試みることができます。