我发现 vscode 几乎每个操作都有对应的命令,可以绑定到键上,而且when
表达式更是强大,可以让相同的键绑定在不同的界面中拥有不同的功能,比如a
在编辑器界面是在当前字符后插入的意思,在文件浏览器界面就可以是新建文件的意思,大大增加了可用性。
只需要极其简单的设置,vscode 的键绑定就可以和 neovim 大佬们精心调配的一样好用,有了这个还用啥 neovim,跟完全看不懂的 lua 说拜拜吧!
下面是我正在使用的键绑定设置,主要参考对象是AstroNvim,但并不完全一样,比如在 AstroNvim 里,代码动作的键绑定是<leader>la
,vscode 里自带了ctrl+.
,我觉得 vscode 自带的这个就很好用,所以就不改了。
下文中的
<leader>
键指的是空格键
- 代码跳转
- 转到定义
gd
- 转到引用
gr
- 转到实现
gi
- 回退到上一个位置
gb
- 转到定义
- lsp
- 代码格式化
<leader>lf
- 变量重命名
<leader>lr
- 定义速览
K
- 代码动作
ctrl+.
vscode 自带 - 代码诊断
ctrl+shift+m
vscode 自带 - 代码折叠
zc
vim 插件自带 - 代码展开
zo
vim 插件自带 - 代码全部折叠
<leader>zc
- 代码全部展开
<leader>zo
- 代码格式化
- 搜索
- 全局搜索文件
<leader>ff
- 全局搜索文字
<leader>fw
- 全局搜索后聚焦到结果列表
enter
- 从搜索结果列表回到搜索输入框
esc
- 从搜索输入框回到编辑器
esc
- 普通搜索
ctrl+f
vscode 自带
- 全局搜索文件
- 当前编辑器
- 保存
<leader>w
- 关闭
<leader>c
- 退出 vscode
<leader>q
- 保存
- 编辑器组
- 上一个标签页
H
- 下一个标签页
L
- 上一个标签组
ctrl+h
- 下一个标签组
ctrl+l
- 移动到上一个标签组
<leader>H
- 移动到下一个标签组
<leader>L
- 关闭组内所有标签
<leader>gc
- 缩小
ctrl+left
- 扩大
ctrl+right
- 上一个标签页
- 文件操作
- 打开文件浏览器
<leader>e
- 关闭文件浏览器
ctrl+b
vscode 自带 - 在文件浏览器里上下浏览
j
k
- 打开文件
o
或enter
- 在新标签组打开文件
O
- 新建文件
a
- 新建文件夹
A
- 删除
d
- 复制
y
- 剪切
x
- 粘贴
p
- 重命名
r
- 刷新文件浏览器
R
- 打开文件浏览器
要应用这些键绑定只需要两个 json 文件,都是 vscode 自带的,一个是settings.json
,另一个是keybindings.json
。
在 vscode 里按ctrl+shift+p
,搜索打开用户设置
,选中首选项:打开用户设置 (JSON)
,就会打开settings.json
文件。
在 vscode 里按ctrl+shift+p
,搜索打开键盘快捷方式
,选中首选项:打开键盘快捷方式 (JSON)
,就会打开keybindings.json
文件。
在做代码跳转或切换标签页等操作时,我们都是在编辑器界面的 vim 插件里,所以这些键绑定由 vim 插件管理,配置写在settings.json
里。
而在文件浏览器界面或搜索结果界面时,我们不是在 vim 插件里,vim 就管不了这里了,这些键绑定由 vscode 自身管理,配置写在keybindings.json
里。
你可以将我提供的 json 文件里的内容手动复制出来,手动粘贴到你自己的配置文件里,一保存,好用的键绑定立刻就拥有了。