Obsidian目前(v0.12.19)在YAML区输入标签时,无法以#标签的格式出现,不使用#,就不会自动显示标签列表供使用者选取,用了#又会造成语法错误。我汇总了3种解决方法。

#人工操作

仍然输入`#`以显示标签弹窗,选取完成後再删除`#`,或加入双号号:`"#标签"`

 

无法用`#`的原因

`#`井字号在YAML语法是注解,因此加了`#`会造成「INVALID YAML」的错误。

  1. 使用 linter 插件
  2. 撰写QuickAdd巨集replace_tags.js:限用一行式阵列写法
  3. 撰写QuickAdd巨集select_tags.js:弹出标签视窗供选取

1. Linter 插件

安装并启用Linter,勾选【Format Tags in YAML】。

title: 技巧
YAML区不能用阵列格式,也不能用列表格式。

🐞无法转换

tags: [ #tag1, #tag2 ]

tags:
    - #tag1
    - #tag2

✅ 正常转换

tags: #tag1 #tag2

tags: #tag1, #tag2

2. QuickAdd脚本删除所有#

原始码

module.exports = async function replace_tags(params) {
  const {app, quickAddApi: {suggester}} = params;

  const activeLeaf = app.workspace.activeLeaf;
  const editor = activeLeaf.view.editor;
  const lineNumber = editor.getCursor().line;
  let content = editor.getLine(lineNumber);
  content = content.replace(/#/g, "");

  editor.setLine(lineNumber, content);
}

设定步骤

  1. 在储存库里以文字编辑器建立replace_tags.js
  2. 设定→QuickAdd选项→【Manage Macros】
    • 输入巨集名称:macro_replace_tags
    • 【Add macro】→User Script选用replace_tags.js
  3. 设定→QuickAdd选项→输入「Macro: Replace Tags」
    • 选用【Macro】後点击【Add Choice】
    • Configure 「Macro: Replace Tags」:选用巨集macro_replac_tags

使用步骤

  1. 在YAML区tags右侧输入#选取标签
  2. 标签皆选用完毕後执行上述设定的QuickAdd巨集
  3. 巨集将删除tags该行所有的#

3. 弹出标签视窗以选取标签

module.exports = async function select_tags(params) {
  const {app, quickAddApi: {suggester}} = params;
  const allTags = Object.keys(app.metadataCache.getTags());
  let tag = await suggester(allTags, allTags);
  if (!tag) return;

  tag = tag.substring(1);  // skip the hash symbol
  return tag;
}

设定步骤

  1. 在储存库里以文字编辑器建立select_tags.js
  2. 设定→QuickAdd选项→Manage Macros
    • 输入巨集名称:macro_select_tags
    • Add macro,User Script选用select_tags.js
  3. 设定→QuickAdd选项→输入「Capture: Select Tags」
    • 选用【Capture】後点击【Add Choice】
    • 点击⚡以加入命令面板
    • Configure 「Capture: Select Tags」
      • 启用Capture to active file
      • 启用Capture format并输入内容:{{MACRO:macro_select_tags}}
  4. 替Capture: Select Tags设定一个快捷键

使用步骤

在YAML区tags右侧点击设定好的快捷键,在弹出视窗里选取标签

相关链接

教学視頻

##

2
0