平常习惯了linux
的zsh+tmux+vim
组合,开发体验非常完美,最近应该工作需求不得不
在 Windows上做大量的开发,简直就是煎熬。花了一点时间折腾,最终用
nvim+powershell
的方式勉强支撑起Windows
下的开发。这篇文章总结了我尝试过的各
种方式,谈谈我对这几种方式的优缺点的看法。
visual studio + vim 插件
个人的构建工具,很久以前就从automake
切到了cmake
,所以切到Windows系统下做开发
,第一种尝试就是直接用cmake
生成sln项目,然后用visual studio
做编译和调试。我
最终弃用它作为首选方式的原因主要有下面两个:
割裂
这种方式给人一种强烈割裂感:我需要在cmd
种去执行cmake
生成项目,然后
切换到 visual studio
上做编辑。visual studio 2017
实际上集成了cmake
支持,但
是还是会有需要从cmake
模式切换到解决方案模式的情况(比如设置一些调试参数之类的
),依旧没有办法找到一种很舒适的集成环境。
文件编码
visual studio
是一个很奇怪的IDE,无比臃肿,但却没有提供设置文件默认编码格式的功
能(至少没有较简单的方式),这对于跨平台的开发来说简直就是噩梦,我不得不手动的把
每一个源文件转换成统一的UTF8格式,防止在Linux平台打开的时候出现乱码(写个脚本也
许可以稍微减轻这种痛苦)。
WSL
WSL
刚出来那会儿,个人还是有点小激动,有些人甚至开始调侃说Windows
会成为最好的
Linux
发行版本。我尝试着用了一段时间,最后还是弃了,原因主要有下面几个:
IO太慢
这点在操作GIT的时候尤其明显,经常卡到飞起。
终端太难用
WSL默认的终端太丑,连主题配置都不支持。我试过很多其他的终端,包括wsl-terminal
,hyper
,对于主题和字体的支持都不尽如人意。算起来hyper
其实是一个不错的选择,
只是没有办法很好的支持nerd fonts
。
系统上下文的切换很繁琐
WSL
像是一个内置到windows中的小虚拟机,所以这种方式和使用虚拟机一样,需要在两个
系统中不停的切换。进程的上下文切换有开销,系统切换同样也有。
比如,WSL中有python、cmake、git
,原生系统中也有python、cmake、git
。但是两套
工具在行为上并没有办法完全做到一致。
最明显的例子就是cmake
,它在Linux
上是接受 cmake_build_type
这个参数的,但是
在windows上会直接忽略掉,因为Linux
上,会为 release
和debug
生成不同的
makefile,而visual studio
只生成同一个sln
并在构建的时候动态指定 release
和
debug
。我没有办法完全在WSL
中工作,所以需要不断在两种系统上下文中切换。这种感
觉这就像是你为同一个功能写了两份代码,你不得不维护两份。为了避免这种不一致性,你
最好只装一套原生的工具集,如果你不得不安装两套,那就只能自求多福了(比如wsl,自
动Python,而你用到了一些只有在原生系统中才能用的Python脚本)
还有一个比较尴尬的地方就是两者对于HOME
目录的定义不同,我要在原生系统中找到
WSL
中的文件夹很难,这进一步加重了切换系统的成本。
nvim + powershell
这种方式是我目前比较习惯的一种方式,nvim基本兼容vim,而且内置了对于terminal的支 持,当然nvim默认的终端是cmd,你可以把它改成Powershell。
我之所以使用这种方式主要是应为下面这几个原因:
快
天下武功唯快不破,nvim
的轻巧可以碾压visual studio
好几条街,编辑的体验也比
visual studio
好太多。
美
我得承认我是一个颜控,我没有办法忍受难看的字体,更受不了无法配置主题的终端。
nvim+powershell
这种方式,可以支持nerd fonts
,可以支持主题的配置,powershell
的主题和字体设置默认随nvim
的相关设置,集成度非常的高。
原滋原味
这种方式不需要使用WSL
,没有切换系统的烦恼,也不存在两套工具之间的差异的苦恼。
模拟Linux的开发体验
Linux给开发带来的感觉如丝般顺滑,而nvim+powershell
的组合可以尽可能的模拟这种体
验。这主要归功于powershell
的插件支持,下面是我用到的一些插件。
psreadline
这个插件可以给你linux的终端命令输入体验,你可以通过ctrl-w
删除一个单词,可以用
ctrl-a
跳到行首,这些操作的便捷性远远高于原生的输入方式。psreadline
甚至支持
vi-mode
,简直完美。
psfzf
fzf,我通常只用于查找历史命令,但是这对于一个终端控来说,就这一个功能带来的效率 提升就已经无与伦比了
posh-git
让 git 的命令可以自动提示,分支可以自动显示。可惜这个插件有点慢。