1

デバッグ中、私は通常、実行中に画面に変数を出力するために多くのトレースを書き込みます。Emacs がテンプレートを作成してくれるとよいのですが。私はEmacsでそれをプログラムする方法を知らないので、あなたの助けを求めています:)

私の考えは次のとおりです。変数の名前を要求する Mx trace-template のようなもの。次に、次のようなものがアクティブ バッファに追加されます。

// trace20130604
cout << "test.cpp variable: " << variable << endl;

コメントに追加された日付により、その日の痕跡をすばやく検索して、不要なときにそれらを削除できます。「test.cpp」はアクティブなバッファで、自動的に挿入されます。そして、「変数」は、実行時に Emacs コマンドが尋ねる変数の名前です。

これは役に立つと思いますか?実装は簡単ですか?たぶん、すでに実装されていますか?:)

理想的には、モード固有である必要があるため、使用している言語に応じて適切なテンプレートを挿入できます。

助けてくれてどうもありがとう!

よろしく。

いくつかの主要モードのソリューション

Francesco のソリューションを拡張して、2 つのメジャー モードをカバーしました。Elispで何かをしようとするのはこれが初めてで、コードは醜いと思いますが、うまくいくようです。

(defun trace-template (variable-name)
  (interactive "sVariable Name: ")
  (if (string-equal (format "%s" major-mode) "c++-mode")
      (progn
            (insert (format-time-string "// trace%Y%m%d\n"))
            (insert (format "cout << \"%s %s:\" << %s << endl;\n\n"
                  (file-name-nondirectory buffer-file-name)
                  variable-name variable-name)))
    )
  (if (string-equal (format "%s" major-mode) "fortran-mode")
      (progn
            (insert (format-time-string "! trace%Y%m%d\n"))
            (insert (format "WRITE(*,*) \"%s %s:\", %s\n\n"
                  (file-name-nondirectory buffer-file-name)
                  variable-name variable-name)))
    )
  )
4

1 に答える 1

0

最初の解決策は、yasnippet拡張機能を使用することです。これは、現在のバッファーに (潜在的にパラメーター化された) テンプレートを挿入するという、必要なことだけを行うことを目的としています。

Yasnippet は、emacs のパッケージング システムを使用して、たとえばMELPAリポジトリから簡単にインストールできます。また、そのドキュメントには、カスタム スニペットの作成方法が説明されています。テンプレートに続くスニペットは次のようになります。

#contributor : me <me@example.com>
#name : trace
# --
// `(format-time-string "%Y%m%d")`
cout << "`(file-name-nondirectory buffer-file-name)` $1:" << $1 << endl;

Yasnippet はスニペットの展開を特定のモードに制限できるので、複数の言語固有のスニペットをすべて同じ方法で簡単に定義できると思います。


別の解決策は、次のようなカスタム Emacs LISP 関数を作成することです。

(defun trace-template (variable-name)
  (interactive "sVariable Name: ")
  (insert (format-time-string "// trace%Y%m%d\n"))
  (insert (format "cout << \"%s %s:\" << %s << endl"
                  (file-name-nondirectory buffer-file-name)
                  variable-name variable-name)))
于 2013-04-06T18:26:50.107 に答える