请仔细说明自己遇到的问题,以下是参考模板。这里不要求非得按模板发帖,但内容中包含相关要素能让大家更好地帮助你。
遇到的问题
找不到新建文件夹功能,之前是能搜到的
预期的效果
我的需求比较简单:
按下quickadd快捷键后,出现一个输入框,然后输入任意文本比如【测试符】然后按下确定键后,OB就会帮我创建一个文件夹和一篇笔记,文件名都是【测试符】并且笔记在文件夹里面,并打开这篇笔记。
请仔细说明自己遇到的问题,以下是参考模板。这里不要求非得按模板发帖,但内容中包含相关要素能让大家更好地帮助你。
找不到新建文件夹功能,之前是能搜到的
我的需求比较简单:
按下quickadd快捷键后,出现一个输入框,然后输入任意文本比如【测试符】然后按下确定键后,OB就会帮我创建一个文件夹和一篇笔记,文件名都是【测试符】并且笔记在文件夹里面,并打开这篇笔记。
js脚本应该可以做到,问问GPT
首先,点击上图工具条的”齿轮“按钮进入下图,并选择create a new prompt
然后,点击New prompt field,展开下图界面
然后,Target variable选择Create a new custom variable
然后,进入如下界面,按需要填写好变量名即可
shell脚本(要给予可执行权限):
#!/bin/bash
vault=$(echo "$1" | rev | cut -d '/' -f1 | rev)
mkdir "$1/$2" && touch "$1/$2/$2.md" && open "obsidian://open?vault=$vault&file=$2/$2"
cmd脚本(windows下仅供参考,没有测试,思路对的):
for /F "tokens=* delims=/" %%A in ("%1") do set vault=%%A
mkdir "%1/%2" && type nul > "%1/%2/%2.md" && start "obsidian://open?vault=%vault%&file=%2/%2"
Obsidian API 给这个包装了一下,在 console 里直接打 app.vault.adapter.mkdir('test')
就可以了
app
对象对于 Obsidian 插件是全局的,可以直接调用,不知 QuickAdd 支不支持
安装RunJS插件
随便新建个md文档,插入以下代码
```js RunJS="Create File"
const oba = this.app.vault.adapter;
const basepath = oba.basePath;
let filename = await this.prompt("请输入文件名");
await oba.mkdir(filename);
await oba.write(`${filename}/${filename}.md`, '');
this.app.workspace.activeLeaf.openFile(this.app.vault.getAbstractFileByPath(`${filename}/${filename}.md`));
new Notice(filename+"已创建并打开!");
```
按楼主要求写 QuickAdd 里了,用 Ob API 偷点懒。
基本配置参 QuickAdd JS & Templater JS 简介及相互修改“QuickAdd Capture 加载内部代码”。
js quickadd 代码:
const title = await this.quickAddApi.inputPrompt('命名:')
, parent = `${app.workspace.getActiveFile().parent.path}/${title}`
, filePath = `${parent}/!${title}.md`; if (!title) return
await app.vault.createFolder(parent); await app.vault.create(filePath, '')
await app.workspace.getLeaf('tab').openFile(app.vault.getAbstractFileByPath(filePath))
考虑实际应用默认在当前活动文档同文件夹下创建新文件夹及文档,不想要可把 parent 前面的 ${app.workspace.getActiveFile().parent.path}/
删除。
为了让同名文档在文件夹置顶我在文档命名前加了 !,不想要可把 ! 删除。