1

私は現在、yasnippets の定義を学んでいますが、使い方がわからないユースケースがあるようです。たとえば、キー 'def' を標準の関数定義に展開する ruby​​ スニペットを定義したいとします。これは非常に簡単ですが、生成された関数のパラメーターの数をキーに依存させたいとします。たとえば、キー 'def> n ' を展開すると、 n個のパラメーターを持つ関数定義が必要になります。どうすればこれを達成できますか?

編集

基本的には、HTML プラグイン Emmet が持つ動作を持つダイナミクス スニペットを作成したいと考えています。Emmet を使用した次の略語 'p*3>div*2' が、それぞれに 2 つの div ペアを持つ p タグの 3 つのペアを作成する方法と同様に、'def*3>2' を作成して 3 を生成できるようにしたいと考えています。それぞれ 2 つの引数を持つ関数定義。これは単なる例ですが、基本的には量指定子とネスト プロパティが必要です。

4

1 に答える 1

1

助けようとするために、あなたが話していたhtmlの機能を実行するスニペットを作成しました。あなたはそれを編集してあなたが望むように変更できるはずですが、すべての作業があなたのために行われた場合、それはあまり楽しいものではありません;)。

私が最初にしたことは、からの変換を行う関数を定義することでした

"p*3>div*2"

<p>
<div>
</div>
<div>
</div>
</p>
<p>
<div>
</div>
<div>
</div>
</p>
<p>
<div>
</div>
<div>
</div>
</p>

その機能は次のとおりです。

(defun crushlist (my-list)
  (if my-list
      (let* ((elem (car my-list))
             (char (first (split-string elem "*")))
             (num (string-to-int(second (split-string elem "*")))))
        (apply 'concat
               (cl-loop for i from 1 to num
                        collect (concat "<" char ">
" (crushlist (cdr my-list)) "</" char ">
"))))
    ""))

スニペットは次のとおりです。

${1:$$(when yas-moving-away-p (move-beginning-of-line nil) (kill-line) (insert (crushlist (split-string yas-text ">"))))}

スニペットは次のようにすべきだと思います:

${1:$$(when yas-moving-away-p (crushlist (split-string yas-text ">")))}

しかし、それは何らかの理由でうまくいきませんでした(見つけたら教えてください!)

実際のスニペットの実装方法について質問がある場合は、コメントを残してください。お手伝いします。

于 2016-04-22T20:07:35.733 に答える