VS Code中Jupyter Notebook全局启用Vi核心快捷键的方法咨询
VS Code中Jupyter Notebook全局启用Vi核心快捷键的方法咨询
我完全懂这种被快捷键“割裂”的难受——用惯了Vim全局操作的流畅感,突然被限制在单个代码块里,连/搜索、*匹配当前词、.跳最近编辑行这些核心操作都只能在小方块里生效,加上Esc还会跳去全局模式导致Vim命令直接失效,真的太别扭了!
下面给你几个实用的解决思路,亲测能改善大部分痛点:
1. 调整Vim扩展的核心设置,让它接管Notebook全局
打开VS Code的设置界面(Ctrl+,),搜索以下几个关键选项:
- Vim: Esc Exit Insert Mode Only:把这个选项勾选上,这样Esc只会从Vim的插入模式切换到命令模式,不会跳去Notebook的全局模式,彻底解决Esc的“跳脱”问题。
- Vim: Notebook Global Mode:如果你的Vim扩展有这个选项,直接开启,它会让Vim的命令模式在Notebook的全局范围内生效,跨代码块的操作就都能正常用了。
2. 自定义全局快捷键映射,补全缺失的Vim操作
如果上面的基础设置还满足不了所有需求,可以手动把Vim的核心快捷键映射到Notebook的全局操作:
- 打开快捷键设置界面(Ctrl+K Ctrl+S),点击右上角的
{}图标进入settings.json编辑模式。 - 添加以下配置(可以根据自己的习惯调整):
{ // 让Vim正常模式下的核心命令全局生效 "vim.normalModeKeyBindingsNonRecursive": [ // 全局搜索替代Vim的/ { "before": ["/"], "commands": ["notebook.find"] }, // 全局匹配当前单词替代Vim的* { "before": ["*"], "commands": ["editor.action.addSelectionToNextFindMatch"] }, // 跳转到最近编辑的单元格替代Vim的. { "before": ["."], "commands": ["notebook.navigateToLastEditLocation"] }, // 全局撤销替代Vim的u { "before": ["u"], "commands": ["undo"] }, // 全局重做替代Vim的Ctrl+R { "before": ["<C-r>"], "commands": ["redo"] } ], // 锁定Esc只切换Vim模式 "vim.escExitInsertModeOnly": true }
保存后重启VS Code,这些快捷键就能跨代码块生效了。
3. 退而求其次:适应VS Code原生Notebook快捷键
如果上面的方法还是有小瑕疵,也可以慢慢熟悉VS Code针对Notebook的原生快捷键,比如:
- 全局搜索:
Ctrl+F(和Vim的/功能一致) - 跳最近编辑位置:
Ctrl+Q - 全局撤销/重做:
Ctrl+Z/Ctrl+Shift+Z
虽然和Vim的习惯不一样,但用久了也能形成流畅的操作节奏。
备注:内容来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

