ohroy / blog

A super blog lite -- just one page. use vue with github api !
https://blog.6h.work
Do What The F*ck You Want To Public License
148 stars 15 forks source link

vs2022 with vsvim2022 #64

Open ohroy opened 1 year ago

ohroy commented 1 year ago

故事开始了

近日来经济拮据,以前用的挺顺手的Jetbrans 系列也用不起了,迫于经济压力,决定重回宇宙第一编辑器——visual studio,我对它的印象就是巨大且硬,像一坨翔一样,根本难以直视,但如今没有办法,只有捏着鼻子用了。

我是一个vim的忠实粉丝,即使在VisualStudio里也不例外,好在visual studio 也有社区提供了类似于ideavim 的插件,但社区毕竟是社区,基本上用爱发电,怎么可能比得过有专门预算的ideavim 团队呢。我已经可以想象到里面的巨坑。

配置vsvim

正如ideavim.ideavimrc 一样,vsvim 也有自己的.vsvimrc ,这很好。同样地,正如ideavim:action xxxx <cr> 可以调用IDE的命令一样,vsvim 也可以通过:vsc xxxx <cr> 调用vs的命令。这非常好。那么下一步就是获取指定的 vs command,but how to do it?

获取 vs commnad

https://github.com/JetBrains/ideavim#finding-action-ids 在ideavim里就做的很好,它内置了一个功能--track action ids。显然, 想在vs里实现同样的功能,我不知道是否自带了这样的功能,反正我是没找到。但我找到了这个 https://learn.microsoft.com/en-us/visualstudio/ide/default-keyboard-shortcuts-in-visual-studio?view=vs-2022#bkmk_edit-popular-shortcuts 后来我突然想到会不会有个一个插件来实现类似的事情呢,经过一番查找,我找到了这个https://marketplace.visualstudio.com/items?itemName=MadsKristensen.LearntheShortcut 但遗憾的是,它不支持我所使用的vs2022,经过查看它的代码https://github.com/madskristensen/ShowTheShortcut,已经三年没有更新了。。

经过一番思想挣扎,理智战胜了懒惰,我决定重写它。

一边看巨硬的文档,一遍各种摸索,花费一天半的事件,终于完成了类似ideavim的track action id的功能,我给它取名Command Tracker 上架到了微软的插件商店里,至此终于可以安心的配置个各种奇怪的快捷键了。

快捷键冲突

造完上述的轮子,我满以为可以快捷的coding了,事实证明我还是太年轻了,由于历史原因,vs 的快捷键成千上万,复杂无比,而这其中,甚至有奇葩的组合快捷键,就比如 Ctrl+K 、Ctrl+C 是用来注释的,诸如此类的快捷键盘不胜枚举,那就会造成一个问题,vim的快捷键怎么办,vim里也有许多重要的ctrl系列快捷键,比如Ctrl+R 的redo,Ctrl+W 的分屏系列,Ctrl+D Ctrl+U 这种翻页的,那我可怎么用?

vim文档中关于键盘疑难解答 的描述,用手动去一个个删除这些快捷键,我去看了下,尼玛,一个Ctrl+R下都有几十个各种scope的的快捷键,这他妈要一个个删完,不把人累死了?

偷懒,又去插件市场上看看有没有类似能一键删除某个快捷的所有绑定的插件,一番寻找后,答案是——没有!这个时候又突发奇想,能不能把快捷键的配置文件导出,然后对吧,批量删除,然后再导入进去!我都为自己这个机智的想法感到自豪!一番寻找,找到了一个能导出键盘配置的插件justcla/VSShortcutsManager ,它刚好具备了导出&导入的功能。

直到我看到了最终导出的结果,我才觉得有点儿不对劲,这什么鬼?

这里面竟然有RemoveShortcut 这说明了什么呢,这说明了在vs里,有些快捷键是默认定义的,一开始就是有默认的快捷键,后来的配置如果想要定义自己的快捷键,需要先取消掉原来的,这是什么天才设计!

这意味着哪怕我把这个配置文件全删了,导入后应该还是有快捷键的,一番试验过后发现果然如此,并且这个RemoveShortcut 校验还挺严格,里面的Command或者Scope不对,还删不了,这尼玛,还没有我去设置里手动删除快呢!!

没办法,又花费了两天时间,给上面的justcla/VSShortcutsManager 改造了改造了,重新添加了几个功能

其中,最重要的是

能根据某个快捷键搜索到对应所有的对应的命令,并且可以批量删除

把指定的快捷键都删除了之后,终于可以愉快的使用起来vim的快捷键了。

故事完了没有

后面还有没有坑,我还不知道,我现在心里并不踏实。。不过,艺多不压身,这两天造了很多 vs插件得轮子(以上得两个是造成功得,还有很多夭折的,主要是vs的插件很多地方都要靠摸索),希望别有什么我解决不了的问题吧。

ohroy commented 1 year ago
快捷键 handle by n i
Ctrl+B vs Edit.GoToDefinition Ctrl+B Text Editor
Ctrl+A vs Edit.SelectAll
Ctrl+C vs Edit.Copy
Ctrl+D vim 向下滚动 Vim: scroll.txt (vimhelp.org) imap :vsc Edit.Duplicate
Ctrl+E vim map :vsc ReSharper.ReSharper_GotoRecentEdits
Ctrl+F vim map :vsc Edit.Find
Ctrl+G vs
Ctrl+H
Ctrl+I vim n:前进
Ctrl+K
Ctrl+L
Ctrl+M
Ctrl+N
Ctrl+O vim n:后退 返回normal
Ctrl+P
Ctrl+Q
Ctrl+R vim redo
Ctrl+S
Ctrl+T
Ctrl+U
Ctrl+V
Ctrl+W
Ctrl+X
Ctrl+Y
Ctrl+Z