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

vscode vim 键绑定设置

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

    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 ,看起来像而已
    KMpAn8Obw1QhPoEP
        4
    KMpAn8Obw1QhPoEP  
       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
    t/850744
    scm 的摆烂操作,应该足够劝退键盘党了
    Rooger
        11
    Rooger  
       2022-10-25 12:09:30 +08:00
    真的长见识了,之前都没有发现 Leader ,仿佛开启了新世界的大门。

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

    [elevating-your-worflow-with-custom-mappings]( https://www.barbarianmeetscodng.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     Solana     918 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:50 PVG 02:50 LAX 11:50 JFK 14:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86