用yasnippet输入snippet总感觉不是太健壮。比如在latex中经常输入的\frac{a}{b}
。如果已经输入完a位置的内容,在输入b位置的内容时,发现a中有需要修改的地方,就没有办法自动跳回a位置。如果手动将光标移动到a位置进行修改的话,那修改完成后也不能再次跳到b位置了。今天发现一个新包似乎可以解决这一类问题。
大家还有什么更好的方法吗?
用yasnippet输入snippet总感觉不是太健壮。比如在latex中经常输入的\frac{a}{b}
。如果已经输入完a位置的内容,在输入b位置的内容时,发现a中有需要修改的地方,就没有办法自动跳回a位置。如果手动将光标移动到a位置进行修改的话,那修改完成后也不能再次跳到b位置了。今天发现一个新包似乎可以解决这一类问题。
大家还有什么更好的方法吗?
试试yas-prev-field
呢
输入 b 的时候,按下 S-<tab>
(shift+tab) 看看呢?
确实如楼上二位所说,用S-<tab>
可以从b位置跳回a位置。那手动移动光标到a位置后,有没有什么办法依然可以跳转呢?
手动移出当前slot就会退出yas的状态,可以看到有条message提示的。这是yas的一个缺点
按 C-/
直到 yas 的状态恢复……
原来撤销还能恢复yas的状态,长见识了。但是这又有一个问题,如果手动将光标移到a处,然后输入了一些内容,想用这种办法恢复yas的状态的话,岂不是输入的内容也会被撤销掉?
有没有可能光标停留在a或b处的时候,自动进入某种状态呢?
这就不清楚了,我对 yasnippet 也不是很熟,只会一些简单的操作……
yasnippet中用TAB
和S-TAB
切换位置没有问题
yas最烦人的一点是经常在行中按TAB调整缩进时触发了展开。最好能够判断光标只有在词尾时才触发。
可以自己手动 hack 一下
(advice-add 'yas-expand :around
(lambda (orig-func &rest _)
(if (memq (char-after) '(?\C-j ? nil))
(call-interactively orig-func)
(call-interactively #'indent-for-tab-command))))
这个包 tempel-collection 配合 tempel 不错,弥补了 tempel 默认模板的匮乏。