开发环境建设指南
程序开发工具环境的一些理解
程序开发是一项工程,搭建开发环境则是工程的第一步。好的代码注重简洁性,一个好的开发环境与此类似。通过简要操作来方便的对程序进行修改验证及调试,避免繁琐操作打断思考的连续性。
开发环境的建设是一个权衡过程,我们需要在精力花费与效率提升中取得一个较好的平衡。颠倒工具与目的主次,将大量时间花费在工具上是不值得的,但从长期而言,开发人员有大量时间与工具打交道,因此也完全有充足的理由把工具打造得顺手。
开发环境的建设是一个迭代过程,我们需要不断修正它以适应新的开发需求。一般通用开发环境都会提供拓展的功能,将外部的操作抽象成内部的一个对象,使之纳入到通用开发环境的范畴中,从而提供一致性的操作方式,并与范畴中其他对象相互协作。
下面是个人配置环境的一些做法与想法,自己也算一个新手入门,寻找效率工具同时对美化也有一定追求,毕竟爱美之心人皆有之。以此作为分享供各位参考与讨论:
终端环境
尽可能的使用键盘是提升效率的一种方法。图形界面往往需要在像素级的渲染上通过鼠标选择指定来进来操作,并且为了形象直观,通常会排列常用选项选择操作。而命令行程序对键盘操作更加友好,通过指定各种参数选项可以统一准确的对我们的目的进行描述,让程序严格去执行。命令行程序之间还可以通过 Shell 相互协作,图形程序则缺少这样的环境,也没有这样的传统。所以 Shell 是我们需要调教的第一步,通常来说,我们需要命令提示、命令补全、更方便的目录跳转来方便使用,实际上网上已经有很多成品方案,只需要安装然后个性化配置即可。
PowerShell 7
Windows 自带的 cmd 太难用了,因此选择 PowerShell 作为主要的终端,默认自带的 PowerShell 是 v5.x 的,于是一步到位升级到了 v7。
PowerShell 中常使用 Cmdlet 命令,通常以动词-名词的组合命名名称,同时以.NET对象作为管道传输的信息载体。
PowerShell 需要先设置安全策略才能才能执行批处理脚本,这点相比 bat 即点即用对小白很不友好。
1 | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine |
然后安装一些模组:
1 | Install-Module posh-git -Scope CurrentUser |
使用 VScode 编辑下 PowerShell 每次启动都会执行的脚本:
1 | code $profile |
粘贴下面的配置到文件中:
1 | Import-Module posh-git |
重启 PowerShell 就配置完成了,z 命令可以用来快速跳转目录,也有命令提示和命令补全。
Zsh
Linux 下使用 Zsh 作为默认 Shell。使用 Zsh、Oh My Zsh、PowerLevel10k 三件套,然后安装 zsh-autosuggestions、zsh-syntax-highlighting 两个插件,即可获得比较好的体验。
Linux Shell 环境下一般使用 Vim 作为编辑器。Vim 使用不同模式,以及按键串行表达语义获取编辑效率上的提升。如果想让 Vim 功能丰富,需要装很多拓展以及配置文件。对于小白来说,命令式的 Shell 环境加上 Vim 的陌生,劝退效果是极佳的。如果想使用 Vim 作为开发环境,首先需要熟悉 Vim 常用操作,然后建议使用其他人配置好的 Vim 配置文件(像 vim-init、SpaceVim),慢慢在别人的基础上做一些修改,等熟悉了 Vim 的脚本语言以及配置项再做针对自己定制化的改进。
Linux 下还有 tmux 提升使用体验,带来 Windows 下 Window(窗口)一样的体验,同时执行一些前台任务也不会因为终端掉线而直接终止,保存云端的工作环境。
编辑器环境
编辑器和 IDE 之间的关系,其实是互补的。对于开发特定种类的项目,如果没有特殊需求,IDE 往往是开箱即用,并提供一整套完善的项目开发辅助解决方案,无论是静态代码检查、代码重构乃至是团队协作、超大型项目分析构建,其背后有一整个团队来提供专业支持。像是 JetBrains 的 Rider 可以很好的处理 UE 的反射宏,针对 UE 的特性做特别的提示。而编辑器想要获得这些功能,一般需要装很多插件,需要自己做一些针对性的配置;有些功能可能是基于文本实现的,可能没有 IDE 基于语义实现的效果要好;还有些功能比较冷僻,可能相关插件无人维护甚至是根本没有;即使有插件提供这些功能,功能之间的集成度上可能也没有 IDE 那么高。
相较于 IDE 这种偏科生,编辑器更像是一位全科生,它的全能来自于高度可拓展。功能上的高度可拓展,给予开发上一致的体验;配置上的高自由度,给与用户将开发环境打造舒适的能力。开放的拓展生态、广泛的功能覆盖、用户配置高自由度,这些是单独团队维护主体功能的 IDE 所难以比拟的。由于瞄准的目标是通用编程,所以有些概念也会变得抽象一些,对用户理解配置的能力也会有要求。比如,作为小白,很难理解为什么 VScode 编写调试一个 C++ 文件需要配置 tasks.json 还有 launch.json 这么复杂,配置不对一个红红的 Error 弹出,体验直接不如 Dev c++。
VScode
VScode 是个人目前主要使用的编辑器,它有丰富的插件生态、Remote Development、高自由度的用户配置,并且开源免费 。在付出一点时间调教之后,可以用的很舒服。
想要让计算机按预期运行,必须得在合适的上下文中,无歧义的指明想要进行的操作。对于编辑器来说,容易存在歧义的问题,键盘上大部分按键都是被作为输入字符处理的,所以想要进行编辑以外的操作,就显得不那么方便。一般来说,有以下几种比较主流的解决方式:
- 组合键,也叫快捷键,通过 Ctrl Shift 等控制字符和普通字符一起按下表明在需要进行非键入操作。优点是方便易理解、系统级的支持,一般软件大量采用这种设计,然而全局快捷键冲突也十分常见,最典型的莫过于系统中文输入法 Ctrl + Space 切换中英文,而VScode拿此当手动触发智能提示补全的快捷键。
- Vim 模式,类似硬件层面上的 Capslock,在不同的模式下,按键被赋予不同的含义。通常模式下,普通字符具有跳转翻页光标移动的功能,只有当进入到编辑模式,才能像一般编辑器那样进行字符输入。
- Leader 键,避免快捷键冲突的最好方法,就是自己再造一个软件层面的键,它就是 Leader 键。类似大部分编程语言中字符串中转义符号
\
,紧跟在 Leader 键之后的输入将被认为是另一种含义。Ctrl + K 一般作为 VScode 中的 Leader 键存在,连续输入 Ctrl+K、Ctrl+S,将打开 VScode 快捷键 UI 界面。 - 命令面板,对于常用的功能,向上面一样绑定一个快捷键很方便,但对于那些冷僻的功能,可能连绑定的快捷键都忘了。而命令面板可以通过输入描述或是关键字来筛选你需要的功能,类似一个 Google Search,同时能兼备很多终端命令行下的特点。在 VScode 下可以按 Ctrl+Shift+P 唤出命令面板,可以搜索需要的命令,前缀
>
代表现在要查找命令,而删除前缀进入的是文件名称查找。
VScode 比较难受的是快捷键映射,因为需要兼容大部分 Win 默认的快捷键设置习惯,所以使用体验并不是很好。Alt 默认聚焦到桌面应用的菜单选项栏中,绑定一堆展示菜单栏选项,直接禁了然后绑定到一些类似:选择配置debug、选择tasks运行这样的比较方便。
VScode 支持使用 CSS 属性来调节字体特性,配合Iosevka这样特性丰富的开源字体,可以很好满足需要。斜体、粗体、语义着色,这些所见即所得的提示,有时候也能帮助理解代码。
最后推荐一些通用插件:BookMarks、Bracket Select、Error Lens、CodeSnap、Git File History、jumpy