Reor代码块功能详解:程序员的AI笔记利器
引言:代码笔记的痛点与Reor的解决方案
你是否还在为这些代码笔记问题烦恼?手动格式化代码块浪费时间、粘贴的代码丢失语法高亮、不同语言切换繁琐、无法与AI助手联动分析代码?作为一款本地运行的自组织AI笔记应用(Self-organizing AI note-taking app),Reor通过深度整合的代码块功能,为程序员提供了一站式代码笔记解决方案。本文将系统剖析Reor代码块的核心功能、技术实现与高级用法,帮助开发者充分利用这一利器提升笔记效率。
读完本文你将掌握:
- Reor代码块的10+核心功能与快捷键操作
- 多语言语法高亮与智能识别技巧
- 与AI写作助手的无缝协作方法
- 代码块高级操作(折叠/展开、复制、格式化)
- 自定义代码块行为的配置指南
核心功能解析:超越普通编辑器的代码体验
1. 多语言语法高亮与自动识别
Reor代码块支持超过30种编程语言的语法高亮,涵盖主流开发语言及专业领域语言。通过tiptap-extension-code-block模块实现,核心代码位于code-block.ts和code-block-view.tsx中。
语言选择器实现:
const languages = [
'Arduino', 'Bash', 'C', 'CPP', 'Csharp', 'Css', 'Diff', 'Go',
'Graphql', 'Ini', 'Java', 'javascript', 'Json', 'Kotlin', 'Less',
'Lua', 'Makefile', 'Markdown', 'Objectivec', 'Perl', 'Php',
'Php-template', 'Plaintext', 'Python', 'Python-repl', 'R', 'Ruby',
'Rust', 'Scss', 'Shell', 'Sql', 'Swift', 'Typescript', 'Vbnet', 'Wasm', 'XML', 'YAML'
]
使用方法:
- 输入
+语言名称(如javascript)自动创建对应语言代码块 - 通过代码块右上角语言选择器切换语言
- 粘贴VS Code复制的代码时自动识别语言类型(通过
vscode-editor-data剪贴板数据)
2. 智能代码块创建与快捷键体系
Reor提供三种便捷创建代码块的方式,满足不同使用场景:
| 创建方式 | 操作步骤 | 适用场景 |
|---|---|---|
| 语法触发 | 输入```+语言名+回车 | 已知语言类型时 |
| 快捷键 | Mod-Alt-c | 快速切换代码/普通段落 |
| 工具栏插入 | 格式工具栏>代码块图标 | 鼠标操作偏好者 |
核心快捷键一览:
| 操作 | Windows/Linux | Mac | 功能描述 |
|---|---|---|---|
| 创建/切换代码块 | Ctrl+Alt+c | Cmd+Alt+c | 在代码块与普通段落间切换 |
| 代码块内换行 | Shift+Enter | Shift+Enter | 保持代码块格式的换行 |
| 退出代码块 | Enter(行尾) | Enter(行尾) | 在代码块末尾创建新段落 |
| 增加缩进 | Tab | Tab | 选中行增加缩进(2空格) |
| 减少缩进 | Shift+Tab | Shift+Tab | 选中行减少缩进(2空格) |
| 代码块拆分 | Ctrl+Enter | Cmd+Enter | 在光标处拆分代码块 |
提示:所有快捷键可在
code-block.ts的addKeyboardShortcuts方法中查看或自定义
3. 与AI写作助手的深度整合
作为AI笔记应用,Reor代码块最强大的特性是与内置AI助手的无缝协作。通过WritingAssistant组件,可直接对代码块内容进行:
- 代码解释与注释生成
- 潜在bug分析与修复建议
- 代码优化与重构建议
- 相关技术文档查询
- 跨语言代码转换
AI交互流程:
技术实现:代码块功能的底层架构
1. 基于Tiptap的自定义代码块节点
Reor代码块基于Tiptap编辑器框架实现,通过自定义Node扩展CodeBlock实现核心功能。其定义位于src/lib/tiptap-extension-code-block/code-block.ts,核心结构如下:
export const CodeBlock = Node.create<CodeBlockOptions>({
name: 'code-block',
content: 'text*',
marks: '',
group: 'blockContent',
code: true,
defining: true,
addAttributes() {
return {
language: {
default: '',
parseHTML: (element) => {
// 从class中提取语言信息
const classNames = [...element.classList, ...(element.firstElementChild?.classList || [])]
const languages = classNames
.filter(cn => cn.startsWith(languageClassPrefix))
.map(cn => cn.replace(languageClassPrefix, ''))
return languages[0] || ''
}
}
}
},
// 渲染HTML结构
renderHTML({ HTMLAttributes, node }) {
return [
'pre',
mergeAttributes(HTMLAttributes, {
class: mergeCSSClasses(styles.blockContent, node.attrs.language ? `${languageClassPrefix}${node.attrs.language}` : ''),
'data-language': node.attrs.language
}),
['code', { class: styles.inlineContent }, 0]
]
},
// 输入规则:```触发代码块
addInputRules() {
return [
textblockTypeInputRule({
find: backtickInputRegex, // /^```([a-z]+)?[\s\n]$/
type: this.type,
getAttributes: (match) => ({ language: match[1] })
}),
textblockTypeInputRule({ find: tildeInputRegex, type: this.type })
]
}
})
2. 自定义节点视图与交互界面
代码块的UI渲染通过CodeBlockView组件实现(code-block-view.tsx),采用Tamagui组件库构建现代化界面:
const CodeBlockView = ({ props }: { props: NodeViewProps }) => {
const { node, updateAttributes } = props
const [language, setLanguage] = useState(node.attrs.language || 'Plaintext')
return (
<YStack onHoverIn={() => setHovered(true)} onHoverOut={() => setHovered(false)}>
{/* 语言选择器 */}
<XStack position="absolute" top={24} right={0} opacity={hovered ? 1 : 0}>
<Popover>
<Popover.Trigger asChild>
<Button size={20} fontSize={12}>{language} <ChevronDown size={12} /></Button>
</Popover.Trigger>
<Popover.Content>
<ScrollView maxHeight={200}>
{languages.map(lang => (
<XStack key={lang} onPress={() => updateAttributes({ language: lang })}>
<SizableText>{lang}</SizableText>
</XStack>
))}
</ScrollView>
</Popover.Content>
</Popover>
</XStack>
{/* 代码内容区域 */}
<pre>
<code className={`language-${language}`}>
<NodeViewContent />
</code>
</pre>
</YStack>
)
}
3. VS Code代码粘贴识别技术
Reor实现了VS Code代码粘贴的特殊处理,通过监听剪贴板数据中的vscode-editor-data格式,自动识别语言类型并创建对应代码块:
addProseMirrorPlugins() {
return [
new Plugin({
key: new PluginKey('codeBlockVSCodeHandler'),
props: {
handlePaste: (view, event) => {
const vscode = event.clipboardData.getData('vscode-editor-data')
const vscodeData = vscode ? JSON.parse(vscode) : undefined
const language = vscodeData?.mode
if (language) {
// 创建对应语言的代码块并插入内容
tr.replaceWith($from.before($from.depth), $to.pos, this.type.create({ language }))
tr.insertText(text.replace(/\r\n?/g, '\n'))
view.dispatch(tr)
return true
}
return false
}
}
})
]
}
高级使用技巧:提升效率的专业方法
1. 代码块批量操作与管理
Reor支持多代码块的批量操作,通过组合快捷键可大幅提升效率:
- 批量缩进:选中多行代码后使用Tab/Shift+Tab统一调整缩进
- 代码块拆分:Ctrl+Enter在光标处拆分代码块
- 语言统一:选中多个代码块后通过语言选择器统一设置语言
- 格式清除:选中代码块后使用Ctrl+Shift+V粘贴纯文本
2. 与向量数据库的代码知识管理
Reor会自动将代码块内容嵌入到向量数据库(Vector Database),实现语义化代码搜索和关联推荐:
技术细节:向量嵌入通过
electron/main/vector-database/embeddings.ts实现,默认使用Sentence-BERT模型将代码转换为768维向量
3. 自定义代码块行为
高级用户可通过修改配置文件自定义代码块行为:
- 缩进大小调整:修改
code-block.ts中的tabSpace变量(默认2空格) - 语言列表扩展:编辑
code-block-view.tsx中的languages数组添加新语言 - 快捷键自定义:修改
addKeyboardShortcuts方法中的快捷键绑定
配置指南:打造个性化代码笔记环境
1. 代码块主题切换
Reor支持明暗两种代码块主题,可通过设置界面切换:
// 在settings.ts中配置
{
"editor": {
"codeBlock": {
"theme": "dark", // 或 "light"
"fontSize": 14,
"lineNumbers": true
}
}
}
2. 默认语言与代码风格设置
在设置界面的"编辑器"选项卡中,可配置:
- 默认代码语言(新建代码块时自动使用)
- 代码缩进方式(空格/制表符)
- 自动换行设置
- 语法高亮强度
结语:重新定义程序员的笔记体验
Reor的代码块功能通过深度整合编辑器技术与AI能力,为程序员提供了超越传统笔记应用的代码记录体验。从多语言高亮到AI代码分析,从VS Code无缝粘贴到向量语义搜索,每一个细节设计都旨在解决开发者的实际痛点。
随着本地AI模型能力的增强,Reor代码块将实现更高级的功能:实时代码错误检查、自动化单元测试生成、跨语言代码翻译等。作为自组织笔记应用,Reor正在通过代码块这一核心功能,重新定义程序员与知识管理的关系。
立即访问仓库体验:https://gitcode.com/GitHub_Trending/re/reor
提示:所有代码示例均来自Reor开源项目源码,可通过仓库中的
src/lib/tiptap-extension-code-block目录查看完整实现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



