MarkText Windows 快捷键完全指南:默认键位总表与 keybindings.json 自定义配置

发布时间:2026/9/18 20:32:44
MarkText Windows 快捷键完全指南:默认键位总表与 keybindings.json 自定义配置 MarkText Windows 快捷键完全指南默认键位总表与 keybindings.json 自定义配置【免费下载链接】marktextA simple and elegant markdown editor, available for Linux, macOS and Windows.项目地址: https://gitcode.com/gh_mirrors/ma/marktextMarkText 为 Windows、Linux、macOS 三平台分别内置了独立的默认键位表本文聚焦 Windows 平台完整整理官方文档列出的全部菜单级快捷键File / Edit / Paragraph / Format / Window / View 六大菜单以及标签页操作并深入讲解如何通过keybindings.json覆盖默认键位、Windows 平台特有的AltGr/CtrlAlt陷阱以及快捷键从配置到注册执行的底层实现链路。读完本文你将能快速查阅任意功能的默认快捷键并能安全、无冲突地定制属于自己的键位方案。一、Windows 键位在 MarkText 中的定位MarkText 的桌面端packages/desktop在启动时会根据当前操作系统选择一份默认键位表macOS 使用 keybindingsDarwin.tsLinux 使用 keybindingsLinux.tsWindows 则使用 keybindingsWindows.ts。平台判断逻辑位于 shortcutHandler.ts 的getDefaultKeybindings()方法中getDefaultKeybindings(): Mapstring, string { if (isOsx) { return keybindingsDarwin } else if (isLinux) { return keybindingsLinux } return keybindingsWindows }每一条键位都由一个id命令标识与一个acceleratorElectron 加速键字符串组成。命令 id 是全局唯一的定义在 constants.ts 中例如file.save、paragraph.table、view.source-code-mode。键位表本身就是一个Mapstring, string其中键为命令 id值为加速键字符串空字符串表示该命令默认不绑定任何快捷键。下文各表即官方文档 KEYBINDINGS_WINDOWS.md 中 Windows 平台的完整默认键位按菜单分组列出-表示该命令默认没有快捷键可通过自定义键位绑定。二、File 菜单文件Id默认快捷键说明file.new-windowCtrlN新建窗口file.new-tabCtrlT新建标签页file.open-fileCtrlO打开 Markdown 文件file.open-folderCtrlShiftO打开文件夹file.saveCtrlS保存file.save-asCtrlShiftS另存为file.export-file.pdfCtrlAltE导出为 PDFfile.move-file-移动当前文件到其他位置file.rename-file-重命名当前文件file.print-打印当前标签页file.preferencesCtrl,打开设置窗口file.close-tabCtrlW关闭标签页file.close-windowCtrlShiftW关闭窗口file.quitCtrlQ退出 MarkText三、Edit 菜单编辑Id默认快捷键说明edit.undoCtrlZ撤销上一步操作edit.redoCtrlShiftZ重做上一步操作edit.cutCtrlX剪切选中文本edit.copyCtrlC复制选中文本edit.pasteCtrlV粘贴文本edit.copy-as-richCtrlShiftC以 Markdown 形式复制选中文本edit.copy-as-html-以 HTML 形式复制选中文本edit.paste-as-plaintextCtrlShiftV以纯文本形式粘贴edit.select-allCtrlA全选文档内容edit.duplicateCtrlAltP复制当前段落edit.create-paragraphCtrlShiftN在当前段落后新建段落edit.delete-paragraphCtrlShiftD删除当前段落edit.findCtrlF在文档中查找edit.find-nextF3继续查找下一个匹配项edit.find-previousShiftF3继续查找上一个匹配项edit.replaceCtrlR替换内容edit.find-in-folderCtrlShiftF在当前打开的文件夹中查找包含关键词的文件四、Paragraph 菜单段落Id默认快捷键说明paragraph.heading-1CtrlShift1将当前行设为一级标题paragraph.heading-2CtrlShift2将当前行设为二级标题paragraph.heading-3CtrlShift3将当前行设为三级标题paragraph.heading-4CtrlShift4将当前行设为四级标题paragraph.heading-5CtrlShift5将当前行设为五级标题paragraph.heading-6CtrlShift6将当前行设为六级标题paragraph.upgrade-headingCtrlPlus提升标题级别paragraph.degrade-headingCtrl-降低标题级别paragraph.tableCtrlShiftT插入表格paragraph.code-fenceCtrlShiftK插入代码块paragraph.quote-blockCtrlShiftQ插入引用块paragraph.math-formulaCtrlAltN插入数学公式块paragraph.html-blockCtrlAltH插入 HTML 块paragraph.order-listCtrlG插入有序列表paragraph.bullet-listCtrlH插入无序列表paragraph.task-listCtrlAltX插入任务列表paragraph.loose-list-itemCtrlAltL将列表项转换为宽松列表项paragraph.paragraphCtrlShift0将标题转换为普通段落paragraph.horizontal-lineCtrlShiftU插入水平分割线paragraph.front-matterCtrlAltY插入 YAML frontmatter 块五、Format 菜单格式Id默认快捷键说明format.strongCtrlB将选中文本设为粗体format.emphasisCtrlI将选中文本设为斜体format.underlineCtrlU将选中文本设为下划线format.superscript-将选中文本设为上标format.subscript-将选中文本设为下标format.highlightCtrlShiftH使用mark标签高亮选中文本format.inline-codeCtrl将选中文本设为行内代码format.inline-mathCtrlShiftM将选中文本设为行内数学公式format.strikeCtrlD为选中文本添加删除线format.hyperlinkCtrlL插入超链接format.imageCtrlShiftI插入图片format.clear-formatCtrlShiftR清除选中文本的格式六、Window 菜单窗口Id默认快捷键说明window.minimizeCtrlM最小化窗口window.toggle-always-on-top-切换窗口置顶window.zoomIn-放大window.zoomOut-缩小window.toggle-full-screenF11切换全屏模式七、View 菜单视图Id默认快捷键说明view.command-paletteCtrlShiftP打开命令面板view.source-code-modeCtrlE切换到源码模式view.typewriter-modeCtrlShiftG启用打字机模式view.focus-modeCtrlShiftJ启用专注模式view.toggle-sidebarCtrlJ切换侧边栏view.toggle-tabbarCtrlShiftB切换标签栏view.toggle-tocCtrlK切换目录view.toggle-dev-toolsCtrlAltI切换开发者工具仅调试模式view.dev-reloadCtrlF5重载窗口仅调试模式view.reload-imagesF5重载图片八、标签页操作与快捷打开标签页快捷键不在应用菜单中展示但仍然可以通过自定义键位覆盖对应实现位于 keybindingsWindows.ts 中「Not included in application menu」分组Id默认快捷键说明tabs.cycle-forwardCtrlTab在标签页之间正向循环切换tabs.cycle-backwardCtrlShiftTab在标签页之间反向循环切换tabs.switchToleftCtrlPageUp切换到左侧标签页tabs.switchTorightCtrlPageDown切换到右侧标签页tabs.switchTofirstCtrl1切换到第 1 个标签页tabs.switchTosecondCtrl2切换到第 2 个标签页tabs.switchTothirdCtrl3切换到第 3 个标签页tabs.switchTofourthCtrl4切换到第 4 个标签页tabs.switchTofifthCtrl5切换到第 5 个标签页tabs.switchTosixthCtrl6切换到第 6 个标签页tabs.switchToseventhCtrl7切换到第 7 个标签页tabs.switchToeighthCtrl8切换到第 8 个标签页tabs.switchToninthCtrl9切换到第 9 个标签页tabs.switchTotenthCtrl0切换到第 10 个标签页file.quick-openCtrlP打开快速打开对话框九、自定义键位keybindings.json 完全配置指南上文表格中的全部默认键位都可以通过用户级配置文件覆盖覆盖方式详见通用文档 KEYBINDINGS.md。配置文件名为keybindings.json位于应用数据目录下各平台位置参见 APPLICATION_DATA_DIRECTORY.mdWindows%APPDATA%\marktext\keybindings.jsonLinux$XDG_CONFIG_HOME/marktext/keybindings.json未设置时是~/.config/marktextmacOS~/Library/Application Support/marktext/keybindings.json启用便携模式portable mode时目录位置变为--user-data-dir参数指定的目录或marktext-user-data目录详见 PORTABLE.md。文件内容是id/accelerator键值对的 JSON 对象例如{ file.save: CmdOrCtrlShiftS, file.save-as: CmdOrCtrlS }上面的示例把「保存」与「另存为」的默认键位对调。CmdOrCtrl在 Windows 上解析为Ctrl——在 common/keybinding/index.ts 的_normalizeAccelerator中cmdorctrl、commandorcontrol会被规范化为平台对应的cmdmacOS或ctrl其他平台。可用修饰键macOS 上的CmdmacOS 上的OptionCtrlShiftAlt在 macOS 上等同于Option注意请勿绑定AltGr改用CtrlAlt代替。可用按键0-9、A-Z、F1-F24以及/、#等标点符号Plus、Space、Tab、Backspace、Delete、Insert、Return/Enter、Esc、Home、End、PrintScreenUp、Down、Left、RightPageUp、PageDown空字符串用于取消某个快捷键的绑定例如想取消file.quit的默认快捷键并改绑到CtrlF4{ file.quit: , file.close-window: CtrlF4 }配置的加载与校验规则从源码 shortcutHandler.ts 的_loadLocalKeybindings()可以看出配置并非无脑覆盖而是有一套严格校验逻辑仅识别已存在的命令 idkeybindings.json中的键若不在默认键位表this.keys中会被直接忽略只有this.keys.has(key)为 true 的条目才会被采用。加速键合法性校验字符串值必须通过isValidElectronAccelerator(value)校验非法值会在控制台打印[WARNING] xxx is not a valid accelerator.并被丢弃。空字符串 取消绑定值为表示解绑该命令。用户配置内部的重复检测如果用户给两个不同命令绑定了相同加速键会输出Invalid keybindings.json configuration: Duplicate value for xxx and yyy!并整体放弃加载保证不会有歧义键位生效。与默认键位的冲突处理当用户把某个加速键绑定到新命令时该加速键原来所属的默认命令会被自动置空unset避免同一加速键同时触发两个命令。安全模式豁免当程序以MARKTEXT_SAFE_MODE全局标志运行时用户自定义键位不会加载全部回退到默认键位。修改配置后无需重启即可生效_reloadKeybindings()会先从所有窗口注销旧加速键再重新读取默认表与用户配置合并最后重新注册对应测试见 keybinding-reload.spec.ts。另外设置窗口Preferences中也提供了图形化的键位配置界面渲染层实现位于 prefComponents/keybindings与keybindings.json读写同一份数据。十、Windows 平台特有注意点AltGr 与标题级别键位阅读 keybindingsWindows.ts 顶部的注释能发现 Windows 键位表最特殊的设计约束AvoidCtrlAltandAltGrshortcuts on Windows because these are used to produce alternative characters. Unlike Linux,CtrlAltis an alias toAltGron Windows and will produce alternative characters too.翻译过来即在 Windows 上CtrlAlt会被系统当作AltGr的别名用于输入特殊字符因此在 Windows 上应尽量避免CtrlAlt组合键同时应尽量少用Alt修饰键。这也是为什么默认键位表中paragraph.heading-1到paragraph.heading-6、format.superscript、format.subscript、file.move-file、file.rename-file、file.print等条目在源码中被显式设置为空字符串的原因——源码注释特别说明由于CtrlShift1在 Windows 上会被映射为底层字符无法为标题级别设置可靠的默认值。注意官方文档表格中仍将paragraph.heading-1paragraph.heading-6标注为CtrlShift16将file.print标注为无默认、edit.duplicate标注为CtrlAltP而当前仓库的 keybindingsWindows.ts 中标题键位已全部置空、file.print为CtrlP、edit.duplicate为CtrlAltD。文档与源码存在少量出入实际生效值以源码为准。若你的环境需要标题快捷键建议在keybindings.json中显式绑定例如{ paragraph.heading-1: CtrlShift1, paragraph.heading-2: CtrlShift2 }另外mt.hide、mt.hide-othersmacOS 专属应用菜单、edit.screenshotmacOS 专属等条目在 Windows 表中也存在但默认值为空不参与 Windows 平台的实际调度。十一、底层实现快捷键如何注册、分发与适配键盘布局理解默认表之后再看快捷键的完整生命周期有助于在遇到键位不生效时快速定位问题。注册与分发MarkText 没有使用 Chromium 原生菜单来承载快捷键而是在每个 BrowserWindow 上通过hfelix/electron-localshortcut注册本地快捷键registerEditorKeyHandlers→registerAcceleratorregisterAccelerator(win: BrowserWindow, accelerator: string, callback: ShortcutCallback): void { // Register shortcuts on the BrowserWindow instead of using Chromiums native menu. // This makes it possible to receive key down events before Chromium/Electron and we // can handle reserved Chromium shortcuts. Afterwards prevent the default action of // the event so the native menu is not triggered. electronLocalshortcut.register(win, accelerator, () { callback(win) return true // prevent default action }) }回调最终调用this.commandManager.execute(id, win)即通过命令管理器执行对应命令命令 id 全集见 constants.ts。之所以在窗口级注册是为了能先于 Chromium/Electron 捕获按键事件从而接管CtrlW、F5这类浏览器保留快捷键并通过return true阻止默认行为、避免原生菜单被同时触发。此外开发模式下程序会遍历所有默认键位并检查对应的命令 id 是否真实存在不存在时打印[DEBUG] Command with id... isnt available ...用于发现键位表与命令注册表不同步的问题。加速键的规范化比较用户配置与默认键位做冲突检测时使用 common/keybinding/index.ts 的isEqualAccelerator。该函数先把加速键统一小写并把CommandOrControl/CmdOrCtrl/Control/Meta/Command/Option等别名归一化为ctrl/cmd/alt再拆分后的各个部件做集合比较不区分部件书写顺序。因此CmdOrCtrlS与CtrlS会被判定为同一个加速键从而正确触发冲突解绑逻辑。非美式键盘与键盘布局监控针对非美式键盘如德语键盘键位错乱的问题keyboard/index.ts 通过native-keymap读取当前键盘布局getCurrentKeyboardLayoutgetKeyMap并调用electronLocalshortcut.setKeyboardLayout(layout, keymap)更新键位映射。同时KeyboardLayoutMonitor订阅系统键盘布局变化事件经 150ms 防抖后重新加载布局并通知快捷键处理器。这些能力通过两个 IPC 通道暴露给渲染进程mt::keybinding-get-keyboard-info获取当前布局信息mt::keybinding-debug-dump-keyboard-info会把布局信息以 JSON 写入系统临时目录的marktext_keyboard_info.json并打开供调试非美式键盘问题使用。菜单与键位的一致性应用菜单会依据当前生效的键位动态重建保证菜单上显示的加速键与真实生效的键位始终一致默认键位与用户覆盖合并后通过getAccelerator(id)供菜单模板查询这一行为由 keybinding-menu-rebuild.spec.ts 等单元测试覆盖。若你在菜单中看到的键位与文档不符优先检查keybindings.json中是否绑定了同名命令或是否触发了上文第 5 条的冲突自动解绑。十二、总结与速查建议MarkText 在 Windows 平台提供了一套贴近系统习惯的默认键位文件操作用CtrlN/O/S编辑操作沿用CtrlC/V/Z段落与格式操作则集中在CtrlShift组合上。实际使用时建议留意三点其一Windows 上CtrlAlt与AltGr等价自定义键位时应优先避开避免与特殊字符输入冲突其二标题 16 级在 Windows 源码默认表中并未绑定快捷键若文档表格中的组合键不生效请通过%APPDATA%\marktext\keybindings.json显式绑定其三任何自定义键位都要保证加速键格式合法、命令 id 存在于默认键位表中否则配置会被静默忽略。相关平台键位对照可进一步查阅 KEYBINDINGS_LINUX.md 与 KEYBINDINGS_OSX.md。【免费下载链接】marktextA simple and elegant markdown editor, available for Linux, macOS and Windows.项目地址: https://gitcode.com/gh_mirrors/ma/marktext创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考