目前仅知 aya-create
可以创建代码片, 然后 aya-expand
可以加载出来.
但是如何去弄多个代码块… 试了半天也没弄明白aya-persist-snippet
是干啥的
网上据说这玩意可以创建不同语言文件的时候直接显示不同的模板.
求大神教怎么玩~
貌似 aya-create
只是让创建临时代码片段更方便了些
aya-persist-snippet
是保存临时代码片段?
据我所知是这样。
感觉上aya-persist-snippet
只是方便创建snippet,原来我创建snippet时都是手动编辑 snippet文件的……
测试了一下,确实是这样,只是帮助你创建snippet的
使用方法就是调用了 aya-create
后调用 aya-persist-snippet
,它会问你存成什么名字(的文件),然后打开这个snippet的文件,让你填入 key (也就是你按tab之前需要打的关键字),随后 C-c C-l
你在原来的mode里就可以填入 key 然后 tab 展开你刚保存的 snippet 了
可是我自己写了, tab键的时候不好使, 请问你那个C-c C-l
是调用的哪个方法?
我用的是spacemacs, C-c C-l
是 yas-load-snippet-buffer
, 语义上看起来没错…
是这样, 主要是不知道咋回事保存后代码, 我按TAB不出来~
那你persist之后有提示保存吗?
按照abo-abo自己的说法,可能还要跑一下 yas/reload-all
Save the current auto-snippet to a user snippets folder (this defaults to ~/.emacs.d/snippets/.) The current major-mode name will be used to determine the snippets sub-directory to store the snippet. For example when working in js2-mode the snippet will be saved to (by default) ~/.emacs.d/snippets/js2-mode/.
You will be prompted for the snippet name. The appropriate file will be opened but not saved, with the point on the key: parameter of the snippet. If you wish to proceed, fill in the key, save the buffer and call C-c C-l (yas-load-snippet-buffer). Otherwise, simply kill the buffer - there will be no side effects.
You can customize aya-persist-snippets-dir to use a different folder for storing auto-snippets.
You will need to run yas/reload-all before using the new snippet with its key trigger.
保存了.
# -*- mode: snippet -*-
# contributor: Mzy
# name: log
# key: log
# --
console.log("$1", $2);
我怀疑是否因为我用的spacemacs的原因, 因为我记得之前有次报错, 说我.spacemacs.d下面没有snippet文件夹, 我自己创建了一个后好了, 但是我把.emacs.d下的snippet复制过去也不行… 真是捉急~
spacemacs啊……你改过 aya-persist-snippets-dir
吗,把这个变量改成原本spacemacs用的snippet文件夹看看?
还是不行
'(aya-persist-snippets-dir "/Users/Mzy/.spacemacs.d/snippets/" t)
它的路径是正确的, 但是我发现我保存的时候那个路径还是.emacs.d/xxx..
的那个.
真是个大坑… 我把 aya-persist-snippets-dir
设置为 .emacs.d/xxx
那个也不行… 这玩意既不是加载的路径也不是保存的路径么…
是这样子设置路径的嘛……?试试 (setq aya-persist-snippets-dir "/Users/Mzy/.spacemacs.d/snippets/")
?
或者根据 C-h v
aya-persist-snippets-dir
确定了这个变量是对的再尝试?
之前设置这个变量是用的 customize-variable
不生效.
现在用 setq
写在 user-config
生效了. 保存的路径是 .spacemacs/snippets/
了
但是敲出代码 key
按 TAB
还是不生效呢, 我查看了下 TAB
绑定的是 indent-for-tab-command
.
这个有关系么?
你先试试写完 key
之后调用 M-x yas-expand
(或者 M-j
) 看看, 我试了试 indent-for-tab-command
这个命令确实不会展开snippet, tab 展开应该是我自己绑定的,默认好像是 M-j
确实是, M-x yas-expand
好使, 弹出了选项.
但是官网上说的貌似默认就是绑定的 TAB
.
我在 user-config
方法里绑定了快捷键 TAB
也可以达到效果了. web-mode
使用还是不行, 这个无所谓了
不过效果略差. 还弹个确认框出来
弹框应该是同一个key绑定了多个snippet, 你去文件夹里看看是不是之前测试设置时的重复了, web-mode
里M-j
绑定了 emmet
功能,应该是冲突了, tab
的问题估计和spacemacs的配置有关系,坐等子龙山人或者其他开发者来说明一下?
没错, 是因为绑定了多个, 不过我觉得这个可能是缓存, 因为我把之前的删了它还在… 这样已经能用了. Thank you very much!
唔,那可以重启一下emacs或者 yas/reload-all
一下~
不好使, 这个确实原因不明, .emacs.d/xxx
的那些我已经完全删掉了, 而.spacemacs.d
里面没有那个代码块…
不过我换了个key
, 暂时可以不用理会了. 有了这个就好多了
哈哈好的。也许等你对emacs的配置文件再熟悉一点就能找出原因啦~加油
慢慢来吧, 共勉!
小tip:yas/reload-all
的帮助里面说This function is obsolete since yasnippet 0.8; use yas-reload-all instead.