vscode vim 键绑定设置

2022-10-24 22:30:17 +08:00
 v2defy

vscode vim 键绑定设置

我发现 vscode 几乎每个操作都有对应的命令,可以绑定到键上,而且when表达式更是强大,可以让相同的键绑定在不同的界面中拥有不同的功能,比如a在编辑器界面是在当前字符后插入的意思,在文件浏览器界面就可以是新建文件的意思,大大增加了可用性。

只需要极其简单的设置,vscode 的键绑定就可以和 neovim 大佬们精心调配的一样好用,有了这个还用啥 neovim ,跟完全看不懂的 lua 说拜拜吧!

下面是我正在使用的键绑定设置,主要参考对象是AstroNvim,但并不完全一样,比如在 AstroNvim 里,代码动作的键绑定是<leader>la,vscode 里自带了ctrl+.,我觉得 vscode 自带的这个就很好用,所以就不改了。

下文中的<leader>键指的是空格键

  1. 代码跳转
    1. 转到定义 gd
    2. 转到引用 gr
    3. 转到实现 gi
  2. lsp
    1. 代码格式化 <leader>lf
    2. 变量重命名 <leader>lr
    3. 定义速览 K
    4. 代码动作 ctrl+. vscode 自带
    5. 代码诊断 ctrl+shift+m vscode 自带
  3. 搜索
    1. 全局搜索文件 <leader>ff
    2. 全局搜索文字 <leader>fw
    3. 全局搜索后聚焦到结果列表 ctrl+l
    4. 普通搜索 ctrl+f vscode 自带
  4. 当前编辑器
    1. 保存 <leader>w
    2. 关闭 <leader>c
    3. 退出 vscode <leader>q
  5. 编辑器组
    1. 上一个标签页 H
    2. 下一个标签页 L
    3. 上一个标签组 ctrl+h
    4. 下一个标签组 ctrl+l
    5. 关闭组内所有标签 <leader>gc
  6. 文件操作
    1. 打开文件浏览器 <leader>e
    2. 关闭文件浏览器 ctrl+b vscode 自带
    3. 在文件浏览器里上下浏览 j k
    4. 打开文件 oenter
    5. 在新标签组打开文件 O
    6. 新建文件 a
    7. 新建文件夹 A
    8. 删除 d
    9. 复制 y
    10. 剪切 x
    11. 粘贴 p
    12. 重命名 r
    13. 刷新文件浏览器 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 文件里的内容手动复制出来,手动粘贴到你自己的配置文件里,一保存,好用的键绑定立刻就拥有了。

代码仓库: https://github.com/jlvihv/vscode-vim-keybindings

2346 次点击
所在节点    程序员
19 条回复
thedrwu
2022-10-24 23:39:42 +08:00
inconsistent 劝退 vscode 的 vim 模式,尤其是 ctrl+w 开头的组合
gouflv
2022-10-25 00:17:24 +08:00
几个问题 至今还没有看到解决的希望
1 、文件目录:跳父级或同级
2 、搜索结果,git 提交等 tool window ,内部列表是不支持 vim 做文件导航,甚至快捷键都是缺失的
3 、不小心关掉最后一个文件,ff fw 失效
gouflv
2022-10-25 00:26:38 +08:00
另外,用 keybindings 实现的部分,我都不太愿意称之为 vim mode ,看起来像而已
enchilada2020
2022-10-25 00:29:37 +08:00
歪个楼 JB 家的 IDE 对 vim mode 的支持咋样
v2defy
2022-10-25 00:55:40 +08:00
@gouflv 本身就是不同的工具,没必要一模一样,只要能用键盘操作大部分功能就行。

git 提交等操作虽然没有快捷键,但是可以自己绑定,打开键盘快捷方式页,一搜 git ,所有相关命令全出来了,随便改。

这些工具窗口里 vim 插件肯定是管不了的,用 vscode 自己的键绑定就行了。

确实没办法做到 100%完美,每个工具都有自己的问题。
v2defy
2022-10-25 00:57:42 +08:00
@enchilada2020 支持的也挺不错的,可以通过 .ideavimrc 配置
desstiony
2022-10-25 08:22:08 +08:00
怎么关掉执行 ctrl c ,只复制,不进入命令模式?
v2defy
2022-10-25 08:54:41 +08:00
@desstiony
    // 不使用 ctrl 键
    "vim.useCtrlKeys": false,
gouflv
2022-10-25 10:34:51 +08:00
@enchilada2020 ideavim 也在用,区别不大,但 idea 的 tool window 对键盘操作更友好
gouflv
2022-10-25 10:41:17 +08:00
https://www.v2ex.com/t/850744
scm 的摆烂操作,应该足够劝退键盘党了
Rooger
2022-10-25 12:09:30 +08:00
真的长见识了,之前都没有发现 Leader ,仿佛开启了新世界的大门。

不过楼主的文本描述可以再改进一下,看后续我有没有时间,可以提个 PR 修改一下。

[elevating-your-worflow-with-custom-mappings]( https://www.barbarianmeetscoding.com/boost-your-coding-fu-with-vscode-and-vim/elevating-your-worflow-with-custom-mappings/) 这个文章写的真心不错,有兴趣的同学可以研究一下。
v2defy
2022-10-25 13:41:19 +08:00
@gouflv 这里好像可以用 jk 上下移动,用 o 打开文件
desstiony
2022-10-28 13:56:16 +08:00
@v2defy vscode 有配置可以禁用,IDEA 怎么关掉执行 ctrl c ,只复制,不进入命令模式?
v2defy
2022-10-28 14:29:40 +08:00
@desstiony 在设置里搜 vim, 在 Editor > Vim 下, 可以看到快捷键设置
desstiony
2022-10-28 15:13:08 +08:00
@v2defy 设置里绑定了 ide ,但是退出插入模式还是会生效
donatello
2022-11-17 12:10:11 +08:00
我使用了你的 keybindings.json ,没办法在文件浏览器或者搜索界面的时候,没有办法通过 escape 来回到编辑器,不知道是不是只有我有这样的问题?
v2defy
2022-11-17 12:45:25 +08:00
@donatello 有点奇怪,我这里是没有问题的呀
cxykhaos
2022-11-23 18:25:04 +08:00
@donatello 我也有这个问题
v2defy
2022-11-24 10:32:52 +08:00
@cxykhaos 其实我也是自己尝试出来的,在我的系统上好用,可能不同系统的设置会有一点点差异,你们可以这样尝试一下:

按 ctrl + shift + p ,搜索“键盘快捷方式”,选择“首选项:打开键盘快捷方式”,然后搜索“编辑器”。

所有与编辑器相关的可以设置的快捷键就都出来了。

经过我的粗略观察,“查看:专注上述编辑器组”,“查看:专注以下编辑器组”,“查看: 聚焦于第一个编辑器组”,都可以做到从文件浏览器或搜索界面回到编辑器的功能。

我用的是“查看:专注上述编辑器组”,在你们那里不适用的话,我觉得可以换成“查看: 聚焦于第一个编辑器组”试试,在这个选项上右键,选择复制命令 ID ,是“workbench.action.focusFirstEditorGroup”,然后用这个命令替换 keybindings.json 里相应条目的命令。

如果这样也不行的话,那可能是“when”字段的设置出错了,这个字段是设置什么时候这个快捷键设置生效,我没有尝试去搞的太清楚,可能设置的不大对,你们可以自己多尝试一下。

或者直接使用 vscode 自带的快捷键,按 ctrl+1 ,直接回到编辑器界面,免去自定义烦恼。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/889526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX