首页 > 解决方案 > YASnippet 基于缓冲区/文件名的条件激活

问题描述

我有一堆 YASnippet 用于单一模式,有时很难在主列表中找到我正在寻找的片段。

预期行为:

我的目标是在名称中带有“模型”的所有文件/缓冲区中激活这样的片段(例如,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

这个在文件/缓冲区中,名称中带有“控制器”(例如 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

标签: emacselispyasnippet

解决方案


我还没有解决这个问题的方法,但我只是偶然发现了导致它的原因。

该问题仅存在于 SpacemacsSPC i s中使用的默认快捷方式中,该快捷方式spacemacs/helm-yas似乎完全忽略# condition: 了 YASnippet 系统。作为一种(临时?)解决方法,您可以使用yas-insert-snippet与它非常相似spacemacs/helm-yas但条件系统运行正常的方法。

Github问题


推荐阅读