OneNote Clipper for VSCode
一个功能强大的VSCode扩展,可以方便地将代码、文件、图片发送到Microsoft OneNote。
✨ 功能特性
核心功能
- ✅ 发送选中代码片段 - 选中代码后一键发送
- ✅ 发送整个文件 - 发送完整文件内容
- ✅ 批量发送多个文件 - 一次性发送多个文件
- ✅ 发送Markdown - 将Markdown渲染为HTML后发送
- ✅ 自定义页面标题 - 为每个页面设置标题
- ✅ 标签支持 - 为页面添加彩色标签
- ✅ 记住最近目标 - 自动记住上次使用的笔记本/分区
高级功能
- ✅ 批量发送模式 - 合并到一个页面或分开多个页面
- ✅ 代码高亮主题 - 6种代码高亮主题可选
- ✅ 最近目标快速选择 - 默认使用上次的笔记本/分区
- ✅ Markdown渲染 - 支持基础Markdown语法
- ✅ OAuth2认证 - 安全的Microsoft账户登录
- ✅ 完全本地运行 - 不经过任何中间服务器
🚀 快速开始
安装
- 在VSCode中按
F5 启动扩展开发主机进行测试
- 或者打包安装:
npm install
npm run compile
vsce package
然后在VSCode中安装生成的 .vsix 文件
首次使用
登录Microsoft账户
- 按
Ctrl+Shift+P 打开命令面板
- 输入 "OneNote" 并选择 "登录Microsoft账户"
- 在浏览器中完成授权
发送内容到OneNote
- 选中代码:选中代码后按
Ctrl+Alt+O
- 整个文件:按
Ctrl+Shift+Alt+O
- 批量文件:按
Ctrl+Shift+Alt+M
- Markdown文件:打开.md文件 → 右键 → "发送Markdown到OneNote"
⌨️ 快捷键
| 功能 |
Windows/Linux |
Mac |
说明 |
| 发送选中代码 |
Ctrl+Alt+O |
Cmd+Alt+O |
需要选中代码 |
| 发送整个文件 |
Ctrl+Shift+Alt+O |
Cmd+Shift+Alt+O |
发送当前文件 |
| 批量发送文件 |
Ctrl+Shift+Alt+M |
Cmd+Shift+Alt+M |
选择多个文件发送 |
| 发送Markdown |
Ctrl+Shift+Alt+I |
Cmd+Shift+Alt+I |
发送Markdown文件 |
📖 详细使用指南
发送代码片段
- 在编辑器中选中要发送的代码
- 按
Ctrl+Alt+O 或右键选择 "发送选中内容到OneNote"
- 输入页面标题(可选)
- 输入标签(用逗号分隔,可选)
- 选择笔记本和分区
- 完成!代码已发送到OneNote
发送整个文件
- 打开要发送的文件
- 按
Ctrl+Shift+Alt+O 或右键选择 "发送整个文件到OneNote"
- 输入页面标题(可选)
- 输入标签(可选)
- 选择笔记本和分区
- 完成!文件已发送到OneNote
批量发送多个文件
- 按
Ctrl+Shift+Alt+M 或从命令面板选择 "批量发送文件到OneNote"
- 在弹出的文件选择对话框中选择多个文件(按住Ctrl或Shift多选)
- 输入批量标题前缀(可选)
- 选择发送方式:
- 合并到一个页面:所有文件内容合并到一个OneNote页面
- 分开多个页面:每个文件创建一个独立的OneNote页面
- 选择笔记本和分区
- 完成!文件已批量发送到OneNote
发送Markdown文件
将Markdown文件渲染为HTML后发送到OneNote,保持格式和样式。使用强大的 markdown-it 渲染引擎,支持完整的Markdown语法。
方式1:右键菜单(推荐)
- 打开要发送的Markdown文件(.md 或 .markdown)
- 在编辑器中右键点击
- 选择 "发送Markdown到OneNote"
- 输入页面标题(可选,默认为文件名)
- 输入标签(可选,用逗号分隔)
- 选择笔记本和分区
- 完成!Markdown已渲染并发送到OneNote
方式2:命令面板
- 打开Markdown文件
- 按
Ctrl+Shift+P 打开命令面板
- 输入 "OneNote" 并选择 "发送Markdown到OneNote"
- 输入页面标题(可选)
- 输入标签(可选)
- 选择笔记本和分区
- 完成!
方式3:快捷键
- 打开Markdown文件
- 按
Ctrl+Shift+Alt+I
- 输入页面标题(可选)
- 输入标签(可选)
- 选择笔记本和分区
- 完成!
支持的Markdown语法(使用markdown-it渲染引擎):
- ✅ 标题(#、##、###,支持多级)
- ✅ 粗体(text)和斜体(text)
- ✅ 行内代码(
code)和代码块(code,支持语法高亮)
- ✅ 链接(text)和图片(
)
- ✅ 列表(* item、- item、1. item,支持嵌套)
- ✅ 引用块(> quote)
- ✅ 水平线(---)
- ✅ 表格(| Header | Header |)
- ✅ 删除线(~~text~~)
- ✅ 任务列表(- [x] task)
- ✅ 所有HTML标签(如果启用)
渲染特性:
- 符合CommonMark规范
- 支持表格、任务列表等扩展语法
- 代码块支持语法高亮
- 自动转换URL为链接
- 智能排版(引号、连字符等)
添加标签
在发送内容时,可以在输入框中输入标签(用逗号分隔),例如:
重要,待办,代码片段,API文档
标签会以彩色样式显示在OneNote页面的底部,方便分类和查找。
使用最近的目标
扩展会自动记住你上次使用的笔记本和分区:
- 当你发送内容时,会显示 "最近使用: 笔记本名 > 分区名" 的选项
- 直接按 Enter 或点击该选项,即可快速使用上次的目标
- 按 ESC 或选择 "选择新的目标",可以重新选择
这个功能可以大大提高效率,避免重复选择相同的笔记本和分区。
代码高亮主题
在VSCode设置中配置代码高亮主题:
{
"onenote.codeHighlightTheme": "monokai"
}
可选主题:
default - 默认主题
github - GitHub风格
monokai - Monokai深色主题
vs-dark - VS Code深色主题
vs-light - VS Code浅色主题
atom-one-dark - Atom One Dark主题
⚙️ 配置选项
在VSCode设置中搜索 "OneNote" 进行配置:
| 配置项 |
类型 |
默认值 |
说明 |
onenote.clientId |
string |
公共Client ID |
Azure应用Client ID(通常不需要修改) |
onenote.defaultNotebook |
string |
"" |
默认笔记本名称 |
onenote.defaultSection |
string |
"" |
默认分区名称 |
onenote.codeHighlightTheme |
string |
"default" |
代码高亮主题 |
onenote.enableTags |
boolean |
true |
发送时是否启用标签输入(如果禁用,将跳过标签输入步骤) |
onenote.createNewPage |
boolean |
true |
是否创建新页面 |
🔒 隐私与安全
- 完全本地运行:所有数据直接传输到Microsoft OneNote,不经过任何第三方服务器
- OAuth2认证:使用安全的PKCE认证流程,不需要client_secret
- 无数据收集:不收集任何用户数据或遥测信息
- 令牌自动刷新:访问令牌过期后自动刷新,无需重复登录
🛠️ 开发说明
创建Azure应用(开发者)
如果你要自己构建和发布这个扩展,需要在Azure Portal创建应用:
- 访问 Azure Portal
- 注册新应用:
- Name:
OneNote Clipper Public
- Supported account types:
Accounts in any organizational directory and personal Microsoft accounts
- Redirect URI:
Mobile and desktop applications → http://localhost:8080/callback
- 在 "Authentication" 中启用 "Allow public client flows"
- 在 "API permissions" 中添加:
Notes.ReadWrite
offline_access
- 复制 "Application (client) ID" 并更新到
src/config.ts
编译
npm install
npm run compile
打包
npm install -g @vscode/vsce
vsce package
📄 许可证
MIT License
🤝 贡献
欢迎提交Issue和Pull Request!
🐛 故障排除
登录失败
问题:AADSTS70002: The provided request must include a 'client_secret'
原因:Azure应用没有正确配置为公共客户端
解决:
- 在Azure Portal中打开应用
- 进入 "Authentication"
- 勾选 "Allow public client flows"
- 确保 "Platform configurations" 中有 "Mobile and desktop applications"
- 等待2-3分钟后重试
获取笔记本失败
问题:Could not find a property named 'name'
原因:OneNote API使用 displayName 而不是 name
解决:更新到最新版本
图片发送失败
问题:无法读取图片文件
原因:图片文件路径错误或文件损坏
解决:确保图片文件存在且格式正确
📞 支持
如有问题,请在GitHub提交Issue。
享受使用 OneNote Clipper 吧! 🎉