3

私は常に次のプリプロセッサコードをヘッダーファイルに追加しています。

#ifdef _HELLO_H_
#define _HELLO_H_

#endif

これを自動的に(つまり、ヘッダーファイルを初めてロードするときに、emacsがコードを追加するだけで)、または手動で(つまり、Mx SOMETHINGを持っている)行う方法はありますか?

存在しない場合、どうすればelispコードをこれにプログラムできますか?

  • #ifdefが定義されていないか確認してください。
  • ヘッダーファイルの名前から_HELLO_H_という名前を作成します。
4

7 に答える 7

8

私はYaSnippetを使用していますが、うまく機能します。デフォルトでは、C ++だけでなく、さまざまな言語やモードのスニペットが多数用意されています。さらに、独自のテンプレート(スニペット)を作成し、その中でLispを使用することもできます(つまり、現在の年を含む著作権情報を含むファイルヘッダーを生成します)。優れたドキュメントもあります。

これは、「once」と入力してccモードで「tab」ボタンを押すと展開される「once」スニペットの例です。

#name : #ifndef XXX; #define XXX; #endif
# --
#ifndef ${1:_`(upcase (file-name-nondirectory (file-name-sans-extension (buffer-file-name))))`_H_}
#define $1

$0

#endif

そして、これが現在の年の著作権情報を追加するc++モードの私の「ライセンス」スニペットです。

#name : C++ source file license
# --
//
// Copyright (C) `(format-time-string "%Y" (current-time))` Bueller? Bueller?
//
// $Id$
//
于 2010-09-01T21:28:04.150 に答える
7

スケルトンモードを見てみましょう。

于 2010-09-01T20:32:03.540 に答える
3

Emacs 23.2を使用している場合、またはCEDETがインストールされている場合は、SRecodeを使用できます。global-srecode-minor-modeがオンになっている場合は、を使用C-c / /して、事前定義されたテンプレートの1つを挿入できます。デフォルトでは、空の.hファイルでは、上記のように空のテンプレートとテキストが挿入されます。SRecodeには階層型テンプレートがあるため、メニューからすぐに[テンプレートの編集]を選択しmytemplates.srt、ディレクトリ内のテンプレートファイル(など)にコピーすることで、SRecodeの機能を簡単に上書きできます~/.srecode。上記と同じ空のテンプレート挿入手法を使用して、新しいテンプレートファイルを開始します。

SRecodeは、テンプレートを組み合わせて再利用するための豊富な言語を備えているため、挿入したい複雑なコードパターンがある場合に便利です。これにより、Semanticのタグを使用してコードを生成したり、コード生成アプリケーションを構築したりできます。

if {}ブロックをすばやく挿入するなど、コーディングパターンとしてテンプレートを挿入する場合は、より優れたUIを備えたyasnippetをお勧めします。

于 2010-09-01T23:16:58.100 に答える
2

ステンシルを使用してから、グローバル置換テキストを使用します。

#ifndef STENCIL_HPP
#define STENCIL_HPP

class Stencil
{
};

#endif // STENCIL_HPP

EmacsとXemacsにはスマートなテキスト置換があるため、「Stencil」は「SQUARE」ではなく「Square」に置き換えられます。

于 2010-09-01T21:22:41.930 に答える
0

最新のコンパイラのほとんどはをサポート#pragma onceしていますが、YMMVです。コンパイラで試してみてください(emacsを使用しているので、gccであると推測しています。これは、少なくともバージョン2.95の時点では、おそらく以前に、かなり長い間サポートされています)。

Visual Studioも間違いなくサポートしています。コンベンションを始めたのは、MSだったと思います。

于 2010-09-01T20:30:12.187 に答える
0

YASnippetはかっこいいです、そして私はそれを使います、しかしそれはこの仕事のために間違ったツールです。

この質問の解決策は、テンプレートフレームワークを使用することです。emacsにはいくつかあります。defaultcontent.elを設定する前に評価したすべてのテンプレートシステムを覚えていません。これは基本的に、ThomasMatthewsのアプローチを実行する自動化された方法です。

SkeletonModeを試しましたが、テンプレートパッケージにはテンプレート性が低すぎると感じました。defaultcontent.elを使用して、テンプレートファイルで各ファイルタイプのテンプレートを定義します。elispは必要ありません。

そしてYASnippet?これは、コードのスニペット(モジュールに1-n回出現するもの)を埋め込むためのものです。例:forループ、メソッド定義、クラス定義、caseステートメント。対照的に、ファイルテンプレートには、すべてのファイルに毎回入るものが含まれています。スニペットは、コーディング要件に応じて、ファイルに追加するかどうかを選択するものです。

于 2010-10-25T02:24:29.687 に答える
0

M-x auto-insert

あなたが求めることを正確に行い、標準としてemacsに組み込まれています

ヘッダーファイルを開いてコマンドを実行するだけです

于 2016-02-22T13:42:19.763 に答える