使用 snippet 的时候想插入一个代码片段,但是又不知道默认的 snippet里面是不是已经有了这个片段,有没有一个办法可以通过搜索片段的内容,找到这个片段的关键字呢。
github上的readme里有一个链接指向ivy 那个也可以
我用的是 helm-c-yasnippet
, ivy 应该也有对应的包。
也可以自行手动解析:
(let ((yas-ht
(yas--table-hash (car (yas--get-snippet-tables 'example-mode)))))
...TODO...)
yas-ht
是一个嵌套的哈希表:
#s(hashtable
("key1" #s(hastable ("name1" . template) ("name2" . template) ...))
("key2" #s(hastable ("name1" . template) ("name2" . template) ...))
...)
之所以需要嵌套哈希表,是因为一个 key 可以对应多个 template。以 python 为例,假如已存在 for 定义如下:
# -*- mode: snippet -*-
# name: for ... in ... : ...
# key: for
# group : control structure
# --
for ${var} in ${collection}:
$0
你还可以再定一个展开形式为 [... for ... in ...]
的 for:
(ht-get yas-ht "for")
;; =>
;; #s(hashtable ("for ... in ... : ..." . template)
;; ("[... for ... in ...]" . template))
把 key 和 name 抓出来就是了。