1

しばらくの間、Emacs を使用して Verilog コードを作成および変更してきました。ただし、Verilog モードでは、emacs コマンドを使用して「if」ステートメントを挿入しようとすると、小さな問題に直面しています。

C-c C-t ?

以下は、上記のシナリオでステートメントを作成する方法の例です。

if (a<b) begin
// the rest of the code

ただし、以下に示すように、次の行に「開始」を挿入するには、emacs が必要です。

if (a<b)
begin
//rest of the code

Verilog Indent Begin After If利用可能な Verilog カスタマイズ オプションを掘り下げた後、上記の効果を生み出すと思われる名前のオプションを 1 つ見つけまし た。ただし、このオプションを切り替えても、目に見える変更はありませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

3

コードを見ると、関数が次のようになっていることがわかります。

(define-skeleton verilog-sk-if
  "Insert a skeleton if statement."
  > "if (" '(verilog-sk-prompt-condition) & ")" " begin" \n
  > _ \n
  > (- verilog-indent-level-behavioral) "end " \n )

実際にスケルトンを定義します。コピーして貼り付け、別の改行を追加するだけです。

(define-skeleton my-verilog-sk-if
  "Insert a skeleton if statement."
  > "if (" '(verilog-sk-prompt-condition) & ")" \n " begin" \n
  > _ \n
  > (- verilog-indent-level-behavioral) "end " \n )

verilog モードで古い関数にフックする必要があるだけです。

(add-hook 'verilog-mode-hook
          '(lambda ()
             ;; this is quite the hack because we don't respect
             ;; the usual prefix of verilog-mode but sufficient for us
             (define-key verilog-mode-map "\C-c\C-t?"
                         'my-verilog-sk-if)))
于 2012-08-07T13:01:42.957 に答える