V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
v2defy
V2EX  ›  程序员

vscode vim 键绑定设置

  •  
  •   v2defy · 2022-10-24 22:30:17 +08:00 · 2681 次点击
    这是一个创建于 786 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

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

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

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

    确实没办法做到 100%完美,每个工具都有自己的问题。
    v2defy
        6
    v2defy  
    OP
       2022-10-25 00:57:42 +08:00
    @enchilada2020 支持的也挺不错的,可以通过 .ideavimrc 配置
    desstiony
        7
    desstiony  
       2022-10-25 08:22:08 +08:00
    怎么关掉执行 ctrl c ,只复制,不进入命令模式?
    v2defy
        8
    v2defy  
    OP
       2022-10-25 08:54:41 +08:00 via Android   ❤️ 1
    @desstiony
        // 不使用 ctrl 键
        "vim.useCtrlKeys": false,
    gouflv
        9
    gouflv  
       2022-10-25 10:34:51 +08:00 via iPhone
    @enchilada2020 ideavim 也在用,区别不大,但 idea 的 tool window 对键盘操作更友好
    gouflv
        10
    gouflv  
       2022-10-25 10:41:17 +08:00 via iPhone
    https://www.v2ex.com/t/850744
    scm 的摆烂操作,应该足够劝退键盘党了
    Rooger
        11
    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
        12
    v2defy  
    OP
       2022-10-25 13:41:19 +08:00
    @gouflv 这里好像可以用 jk 上下移动,用 o 打开文件
    desstiony
        13
    desstiony  
       2022-10-28 13:56:16 +08:00
    @v2defy vscode 有配置可以禁用,IDEA 怎么关掉执行 ctrl c ,只复制,不进入命令模式?
    v2defy
        14
    v2defy  
    OP
       2022-10-28 14:29:40 +08:00
    @desstiony 在设置里搜 vim, 在 Editor > Vim 下, 可以看到快捷键设置
    desstiony
        15
    desstiony  
       2022-10-28 15:13:08 +08:00
    @v2defy 设置里绑定了 ide ,但是退出插入模式还是会生效
    donatello
        16
    donatello  
       2022-11-17 12:10:11 +08:00
    我使用了你的 keybindings.json ,没办法在文件浏览器或者搜索界面的时候,没有办法通过 escape 来回到编辑器,不知道是不是只有我有这样的问题?
    v2defy
        17
    v2defy  
    OP
       2022-11-17 12:45:25 +08:00
    @donatello 有点奇怪,我这里是没有问题的呀
    cxykhaos
        18
    cxykhaos  
       2022-11-23 18:25:04 +08:00
    @donatello 我也有这个问题
    v2defy
        19
    v2defy  
    OP
       2022-11-24 10:32:52 +08:00
    @cxykhaos 其实我也是自己尝试出来的,在我的系统上好用,可能不同系统的设置会有一点点差异,你们可以这样尝试一下:

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

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

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

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

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

    或者直接使用 vscode 自带的快捷键,按 ctrl+1 ,直接回到编辑器界面,免去自定义烦恼。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 09:31 · PVG 17:31 · LAX 01:31 · JFK 04:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.