基于缓冲区/文件名的YASnippet条件激活

问题描述

在单一模式下,我有一堆yasnippet,有时很难在主列表中找到要查找的代码段。

预期的行为:

我的目标是在所有文件/缓冲区中激活名称为“ model”的代码段(例如app / models / my_model.rb)

# that's ruby-mode/model-foo:

# -*- mode: snippet -*-
# name: model - foo activation name
# condition: (string-match-p (regexp-quote "models") (buffer-file-name (window-buffer (minibuffer-selected-window))))
# --
model_foo

文件/缓冲区中的文件名带有“ controller”(例如app / controllers / another_model.rb或test / controllers / another_model.rb等)

# that's ruby-mode/controller-foo:

# -*- mode: snippet -*-
# name: controller - foo activation name
# condition: (string-match-p (regexp-quote "controllers") (buffer-file-name (window-buffer (minibuffer-selected-window))))
# --
controller_foo

实际行为:

在Ruby模式下,所有文件中的两个代码段均已激活(可供选择)。看来condition: 被完全忽略了。我什至尝试将其设置为“#condition:false”,并且代码片段仍在工作/可见。

什么可能导致此问题?

pkg-info-package-version  yasnippet
20191222.2206

解决方法

我还没有解决这个问题的方法,但是我只是不小心弄清楚了是什么原因造成的。

仅在使用SPC i s的Spacemacs spacemacs/helm-yas的默认快捷方式中出现问题,该快捷方式似乎完全忽略了YASnippet的# condition: 系统。 作为(临时?)解决方法,您可以只使用yas-insert-snippet,其工作原理与spacemacs/helm-yas非常相似,但是条件系统运行正常。

Github Issue