yasnippet:文字列からスニペットを展開し、フィールドを認識させる方法は?
Q:yasnippet elispコード内から(スニペットフィールドを認識して)テキスト文字列を正しく展開するにはどうすればよいですか? 非常に単純なスニペットは、いくつかの制御文字が混在した単なる文字列です。elispフォームを使用してよりリッチなスニペットを作成することもできますが、それらを適切に展開する方法がわかりません。 これは問題を捉えた簡単な例です。のorg-modeようなリンクスケルトンを挿入するスニペットを作成しています[[source][description]]。次の簡単なスニペットは、「ソースフィールドで開始し、説明フィールドで終了する」という望ましい動作を生成します。 [[$1][$0]] elispコードをスニペット( `sでラップ)に混在させることができます。ifは単に[[$1][$0]]文字列として評価されるため、次のコードは単純なバージョンとまったく同じ動作を生成すると考えていました。 `(if t "[[$1][$0]]")` ただし、そうはしません。代わりに、$0and $1フィールドがフィールドではないかのように機能し、スニペットを終了し、最後のの後にポイントを配置し]ます。それで、elispフォームがyasnippetフィールドに埋め込まれたテキスト文字列に評価されるときに、どのようにして望ましい動作を得るのでしょうか? 編集:要求されたとおり、ここに質問を引き起こした特定のユースケースがあります。XクリップボードにURLリンクが含まれている場合は、組織リンクのソースフィールド([[ source ] [description]])を入力し、リンク先フィールドをそのままにしておきます。dan-xclipboard-link-p存在する場合はURLを返すヘルパー関数()を使用しますnil。私には次のようなことができるはずです: `(let ((link (dan-xclipboard-link-p))) (if link (concat "[[" link "][$0]]") "[[$1][$0]]"))` 実際、以前のバージョンのyasnippetでは、このコードのバージョンは意図したとおりに機能しました。 編集2:興味深いことに、このスニペットは、Xクリップボードにリンクがある場合は機能しますが、ない場合は失敗します(つまり、$1フィールドとして認識されません)。 [[`(or (dan-xclipboard-link-p) "$1")`][$0]]