Files
obsidian-notes/InBox/obsidian右键扩展.md
2025-06-11 18:37:23 +08:00

260 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

在Obsidian中右键菜单上下文菜单可以通过插件进行扩展。如果你想要在文本格式的右键菜单中添加自定义操作你需要编写一个Obsidian插件。以下是一个简单的步骤指南帮助你开始
### 步骤1: 创建插件项目
1. 打开Obsidian进入设置 -> 社区插件 -> 浏览然后搜索并安装“Obsidian Plugin DevTools”插件如果尚未安装
2. 使用该插件可以快速生成插件模板在命令面板中运行“Create new plugin”命令。
### 步骤2: 理解插件结构
生成的插件项目包含以下关键文件:
- `main.ts`: 插件的入口文件。
- `manifest.json`: 插件的元数据如ID、名称、版本等。
### 步骤3: 添加上下文菜单项
`main.ts`中,你可以使用`registerEvent`来监听编辑器上下文菜单事件,并添加自定义菜单项。
以下是一个示例代码,展示如何在右键菜单中添加一个自定义菜单项:
```typescript
import { App, Editor, Menu, Plugin, PluginManifest } from 'obsidian';
export default class MyPlugin extends Plugin {
constructor(app: App, manifest: PluginManifest) {
super(app, manifest);
}
async onload() {
// 注册编辑器上下文菜单
this.registerEvent(
this.app.workspace.on('editor-menu', (menu: Menu, editor: Editor, view: any) => {
// 添加一个菜单项
menu.addItem((item) => {
item
.setTitle("我的操作")
.setIcon("document") // 可选:设置图标
.onClick(async () => {
// 当点击菜单项时执行的操作
const selectedText = editor.getSelection();
// 示例:将选中的文本转换为大写
if (selectedText) {
editor.replaceSelection(selectedText.toUpperCase());
} else {
// 如果没有选中文本,可以在光标处插入文本
editor.replaceRange("Hello World!", editor.getCursor());
}
});
});
})
);
}
onunload() {
// 清理工作
}
}
```
### 步骤4: 测试插件
1. 将你的插件文件夹放在`.obsidian/plugins/`目录下(如果没有该目录,可以手动创建)。
2. 在Obsidian的设置 -> 社区插件中,启用你的插件。
3. 打开一个笔记,选中一些文本,然后右键单击,你应该能看到“我的操作”菜单项。点击它,选中的文本应该会变成大写。
### 步骤5: 完善功能
根据你的需求你可以修改点击事件的处理逻辑。例如你可以添加更复杂的文本操作如插入特定格式的文本、调用外部API等。
### 步骤6: 发布插件(可选)
如果你希望分享你的插件可以将其发布到Obsidian的社区插件市场。你需要将代码托管在GitHub上并按照Obsidian的发布指南操作。
### 注意事项:
- Obsidian的API可能会随着版本更新而变化请关注官方文档https://obsidian.md/developers
- 在编写插件时,请确保处理各种边界情况(如没有选中文本的情况)。
如果你需要更复杂的操作,比如添加多个菜单项,或者根据条件显示不同的菜单项,可以在`editor-menu`事件回调中添加多个`menu.addItem`调用,并在回调函数中编写相应的逻辑。
希望这能帮助你在Obsidian中添加自定义的右键菜单操作
要在 Obsidian 的右键菜单中添加自定义文本操作,可以通过以下两种主要方法实现(推荐使用插件开发):
---
### 方法 1使用现成插件推荐新手
安装以下社区插件可快速添加文本操作:
1. **QuickAdd**
- 创建自定义脚本/命令并绑定到右键菜单
2. **cMenu**
- 直接添加格式化按钮到右键菜单
3. **Context Menu Extended**
- 扩展右键菜单选项
**操作步骤**
1. 设置 → 社区插件 → 浏览 → 搜索插件名 → 安装并启用
2. 根据插件文档配置自定义操作(如用 QuickAdd 添加脚本)
---
### 方法 2开发自定义插件高阶
若需深度自定义,可创建自己的插件:
#### 步骤 1创建插件项目
1. 安装 **Obsidian Plugin DevTools**
2. 命令面板执行 `> Create new plugin` 生成模板
#### 步骤 2修改代码示例
在 `main.ts` 中添加以下代码:
typescript
复制
下载
import { App, Editor, Menu, Plugin } from "obsidian";
export default class TextActionsPlugin extends Plugin {
async onload() {
// 注册右键菜单
this.registerEvent(
this.app.workspace.on("editor-menu", (menu: Menu, editor: Editor) => {
// 添加自定义操作 1
menu.addItem((item) =>
item
.setTitle("转换为大写")
.setIcon("uppercase")
.onClick(() => {
const sel = editor.getSelection();
editor.replaceSelection(sel.toUpperCase());
})
);
// 添加自定义操作 2
menu.addItem((item) =>
item
.setTitle("插入时间戳")
.setIcon("clock")
.onClick(() => {
const cursor = editor.getCursor();
editor.replaceRange(new Date().toLocaleString(), cursor);
})
);
})
);
}
}
#### 步骤 3启用插件
1. 将插件文件夹放入 `.obsidian/plugins/`
2. 设置 → 社区插件 → 启用你的插件
#### 效果:
右键文本时会出现新选项:
- **转换为大写**:选中的文本变为大写
- **插入时间戳**:在光标处插入当前时间
---
### 自定义操作示例(可扩展)
在插件代码中可添加更多操作:
typescript
复制
下载
// 添加删除线
menu.addItem((item) => item
.setTitle("添加删除线")
.onClick(() => {
const sel = editor.getSelection();
editor.replaceSelection(`~~${sel}~~`);
})
);
// 复制为Markdown链接
menu.addItem((item) => item
.setTitle("复制为链接")
.onClick(() => {
const sel = editor.getSelection();
navigator.clipboard.writeText(`[${sel}](https://)`);
})
);
---
### 调试提示
1. 按 `Ctrl/Cmd + Shift + I` 打开开发者工具
2. 在控制台查看插件日志
3. 修改代码后重新加载 Obsidian`Ctrl/Cmd + R`
通过以上方法,你可以为 Obsidian 的右键菜单添加任意文本操作,从简单的格式转换到复杂的自定义逻辑均可实现。开发插件需要 TypeScript 基础,但 Obsidian 提供了完善的 [API 文档](https://docs.obsidian.md/Reference/TypeScript+API/Editor) 和社区支持。