我使用 TAB 从 yasnippet 扩展片段,当它不扩展片段时,它通常会退回到缩进(绑定到 TAB 的默认命令),这由 yasnippets 自定义变量引用,yas-fallback-behavior
它只能是call-other-command
or return-nil
。
我想要的功能是在点击 TAB 时:
- 尝试完成片段、成功或静默失败。
- 检查我们是否处于 PHP 模式,并
php-complete-function
静默调用、成功或失败。 - 默认为其当前的缩进命令 (
indent-for-tab-command
)。
它目前完美地执行 1,然后是 3。yas--fallback
但是,通过使用这段代码提供建议,我能够使其大部分工作:
(defadvice yas--fallback (before try-php-expand (&optional arg from-trigger-key-p) activate)
(when (string-equal mode-name "PHP")
(php-complete-function)))
剩下的唯一主要问题是,当尝试使用 TAB 缩进任何内容时,php-complete-function
不会静默失败,而是会向 minibuffer 发送垃圾邮件,其中包含来自 PHP 完成的多次检查的消息。
那么有没有办法在这种情况下禁止来自该函数的消息传递,而无需进行所有相同的检查,它实际上是在我的建议中重新编程该函数?或者,有没有更好的方法来使用 yasnippet 来开始我所缺少的?