我发现 vscode 几乎每个操作都有对应的命令,可以绑定到键上,而且when
表达式更是强大,可以让相同的键绑定在不同的界面中拥有不同的功能,比如a
在编辑器界面是在当前字符后插入的意思,在文件浏览器界面就可以是新建文件的意思,大大增加了可用性。
只需要极其简单的设置,vscode 的键绑定就可以和 neovim 大佬们精心调配的一样好用,有了这个还用啥 neovim ,跟完全看不懂的 lua 说拜拜吧!
下面是我正在使用的键绑定设置,主要参考对象是AstroNvim,但并不完全一样,比如在 AstroNvim 里,代码动作的键绑定是<leader>la
,vscode 里自带了ctrl+.
,我觉得 vscode 自带的这个就很好用,所以就不改了。
下文中的
<leader>
键指的是空格键
gd
gr
gi
<leader>lf
<leader>lr
K
ctrl+.
vscode 自带ctrl+shift+m
vscode 自带<leader>ff
<leader>fw
ctrl+l
ctrl+f
vscode 自带<leader>w
<leader>c
<leader>q
H
L
ctrl+h
ctrl+l
<leader>gc
<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 文件里的内容手动复制出来,手动粘贴到你自己的配置文件里,一保存,好用的键绑定立刻就拥有了。
1
thedrwu 2022-10-24 23:39:42 +08:00 via Android
inconsistent 劝退 vscode 的 vim 模式,尤其是 ctrl+w 开头的组合
|
2
gouflv 2022-10-25 00:17:24 +08:00 via iPhone
几个问题 至今还没有看到解决的希望
1 、文件目录:跳父级或同级 2 、搜索结果,git 提交等 tool window ,内部列表是不支持 vim 做文件导航,甚至快捷键都是缺失的 3 、不小心关掉最后一个文件,ff fw 失效 |
3
gouflv 2022-10-25 00:26:38 +08:00 via iPhone
另外,用 keybindings 实现的部分,我都不太愿意称之为 vim mode ,看起来像而已
|
4
enchilada2020 2022-10-25 00:29:37 +08:00 via Android
歪个楼 JB 家的 IDE 对 vim mode 的支持咋样
|
5
v2defy OP @gouflv 本身就是不同的工具,没必要一模一样,只要能用键盘操作大部分功能就行。
git 提交等操作虽然没有快捷键,但是可以自己绑定,打开键盘快捷方式页,一搜 git ,所有相关命令全出来了,随便改。 这些工具窗口里 vim 插件肯定是管不了的,用 vscode 自己的键绑定就行了。 确实没办法做到 100%完美,每个工具都有自己的问题。 |
6
v2defy OP @enchilada2020 支持的也挺不错的,可以通过 .ideavimrc 配置
|
7
desstiony 2022-10-25 08:22:08 +08:00
怎么关掉执行 ctrl c ,只复制,不进入命令模式?
|
8
v2defy OP |
9
gouflv 2022-10-25 10:34:51 +08:00 via iPhone
@enchilada2020 ideavim 也在用,区别不大,但 idea 的 tool window 对键盘操作更友好
|
10
gouflv 2022-10-25 10:41:17 +08:00 via iPhone
https://www.v2ex.com/t/850744
scm 的摆烂操作,应该足够劝退键盘党了 |
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/) 这个文章写的真心不错,有兴趣的同学可以研究一下。 |
16
donatello 2022-11-17 12:10:11 +08:00
我使用了你的 keybindings.json ,没办法在文件浏览器或者搜索界面的时候,没有办法通过 escape 来回到编辑器,不知道是不是只有我有这样的问题?
|
19
v2defy OP @cxykhaos 其实我也是自己尝试出来的,在我的系统上好用,可能不同系统的设置会有一点点差异,你们可以这样尝试一下:
按 ctrl + shift + p ,搜索“键盘快捷方式”,选择“首选项:打开键盘快捷方式”,然后搜索“编辑器”。 所有与编辑器相关的可以设置的快捷键就都出来了。 经过我的粗略观察,“查看:专注上述编辑器组”,“查看:专注以下编辑器组”,“查看: 聚焦于第一个编辑器组”,都可以做到从文件浏览器或搜索界面回到编辑器的功能。 我用的是“查看:专注上述编辑器组”,在你们那里不适用的话,我觉得可以换成“查看: 聚焦于第一个编辑器组”试试,在这个选项上右键,选择复制命令 ID ,是“workbench.action.focusFirstEditorGroup”,然后用这个命令替换 keybindings.json 里相应条目的命令。 如果这样也不行的话,那可能是“when”字段的设置出错了,这个字段是设置什么时候这个快捷键设置生效,我没有尝试去搞的太清楚,可能设置的不大对,你们可以自己多尝试一下。 或者直接使用 vscode 自带的快捷键,按 ctrl+1 ,直接回到编辑器界面,免去自定义烦恼。 |