快速创建文件夹笔记 Folder Note

请仔细说明自己遇到的问题,以下是参考模板。这里不要求非得按模板发帖,但内容中包含相关要素能让大家更好地帮助你。


遇到的问题

找不到新建文件夹功能,之前是能搜到的

预期的效果

我的需求比较简单:
按下quickadd快捷键后,出现一个输入框,然后输入任意文本比如【测试符】然后按下确定键后,OB就会帮我创建一个文件夹和一篇笔记,文件名都是【测试符】并且笔记在文件夹里面,并打开这篇笔记。

2 个赞

js脚本应该可以做到,问问GPT

1 个赞

这样不行耶

1 个赞

1. 先安装Shell commands插件,第三方插件市场搜索即可

2. 插件里新建命令,如图

3. 上图中,_create_file_name变量怎么创建的?

首先,点击上图工具条的”齿轮“按钮进入下图,并选择create a new prompt

然后,点击New prompt field,展开下图界面

然后,Target variable选择Create a new custom variable

然后,进入如下界面,按需要填写好变量名即可

4. 上面设置好后,编写shell脚本或cmd脚本即可

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"

5. 效果

image

1 个赞

Obsidian API 给这个包装了一下,在 console 里直接打 app.vault.adapter.mkdir('test') 就可以了

app 对象对于 Obsidian 插件是全局的,可以直接调用,不知 QuickAdd 支不支持

2 个赞

第二种方法:

  1. 安装RunJS插件

  2. 随便新建个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+"已创建并打开!");
```
  1. 点击侧边栏JS按钮,弹窗选择Create File即可

  1. 效果

image

2 个赞

按楼主要求写 QuickAdd 里了,用 Ob API 偷点懒。

基本配置参 QuickAdd JS & Templater JS 简介及相互修改“QuickAdd Capture 加载内部代码”。

效果 GIF,点击展开

20240304_121548

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}/ 删除。

为了让同名文档在文件夹置顶我在文档命名前加了 !,不想要可把 ! 删除。

2 个赞