ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Missing Semester 中文版 · 开发环境与工具实战指南:Vim 模态编辑、语言服务器与 AI 驱动开发

Missing Semester 中文版 · 开发环境与工具实战指南:Vim 模态编辑、语言服务器与 AI 驱动开发 文档教程教育【免费下载链接】missing-semester-cn.github.iothe CS missing semester Chinese version项目地址https://gitcode.com/gh_mirrors/mi/missing-semester-cn.github.io点击查看免费下载本文是对本仓库《2026 年课程讲义》中 开发环境与工具 一讲的完整技术解读。开发环境是编程效率的基石从 Vim 的模态编辑哲学到语言服务器LSP带来的代码智能再到自动补全、内联聊天与编程代理三种 AI 辅助形态。读完本文你将掌握一套可立即上手的 Vim 操作体系、为 IDE 配置语言服务器的实操方法以及如何将 AI 工具正确地嵌入日常开发流程。开发环境全景IDE 与终端工作流开发环境是一组用于开发软件的工具其核心是文本编辑功能以及配套的语法高亮、类型检查、代码格式化和自动补全等特性。围绕这些能力现实中形成了两条主流路线图形化 IDE像 VS Code 这样的集成开发环境IDE会把编辑、调试、终端、版本控制、AI 集成等功能整合进一个应用开箱即用更容易上手。基于终端的工作流把 tmux终端复用器、Vim文本编辑器、Zsh一种 Shell以及语言特定的命令行工具组合在一起例如 RuffPython 的 linter 和代码格式化工具和 MypyPython 的类型检查器。它更轻量在没有 GUI 或无法安装软件的环境里甚至可能是唯一的选择。两者各有优劣课程建议对 IDE 和终端工作流都建立基本熟悉度并至少精通其中一种如果你现在还没有偏好的 IDE建议从 VS Code 开始。这条路线的周边技能——tmux 会话管理、SSH 远程开发、Shell 定制dotfiles——在本仓库的 命令行环境讲义 中有系统讲解可以与本讲配合阅读共同构成完整的工作台。文本编辑与 Vim编程时你的大部分时间都花在代码间导航、阅读代码片段和修改代码上而不是长时间连续输入或者从头到尾线性地通读文件。Vim 正是针对这种任务分布而优化的文本编辑器。Vim 的哲学Vim 建立在一个非常优美的想法之上它的界面本身就是一种用于导航和编辑文本的编程语言。按键操作并带有助记名就是命令而这些命令是可以组合的。Vim 避免使用鼠标因为鼠标太慢了Vim 甚至避免使用方向键因为那需要太多手部移动。结果就是这个编辑器会让人感觉像在使用脑机接口一样速度能跟上你的思维。其他软件中的 Vim 支持。你不必真的使用 Vim 本体也能从它的核心思想中受益。许多涉及文本编辑的软件都支持 Vim mode要么是内建功能要么是插件。例如VS Code 有 VSCodeVim 插件Zsh 内建了 Vim 模拟支持就连 Claude Code 也内建了 Vim 编辑模式。你几乎可以认为任何涉及文本编辑的工具多少都会以某种方式支持 Vim mode。模态编辑Vim 是一个模态编辑器它针对不同类别的任务提供不同的工作模式。模式用途从正常模式进入正常模式在文件中移动和进行编辑默认模式插入模式插入文本i替换模式替换文本R可视化模式普通、行或块选择文本块v/V/C-v命令模式运行命令:在不同操作模式下按键的含义也不同。比如字母x在插入模式下只会插入字面字符x但在正常模式下它会删除光标所在字符而在可视化模式下它会删除当前选区。在默认配置下Vim 会在左下角显示当前模式。初始/默认模式是正常模式通常你会把大多数时间花在正常模式和插入模式之间切换。你可以通过按ESCEscape 键从任意模式返回正常模式使用 Vim 时你会频繁按ESC可以考虑把 Caps Lock 重映射为 Escape或者为ESC设置一个由简单按键序列触发的替代映射。基础插入文本在正常模式下按i进入插入模式。此时 Vim 的行为就和其他文本编辑器差不多直到你按下ESC返回正常模式。只要掌握这一点再加上前面提到的基础知识你就已经可以开始用 Vim 编辑文件了。当然如果你总是停留在插入模式中效率并不会特别高。Vim 的界面本身是一种编程语言Vim 的界面本身就是一种编程语言。按键操作带有助记名就是命令而这些命令是可以组合的。这让移动和编辑都能非常高效尤其是当这些命令变成肌肉记忆之后就像你熟悉了键盘布局后打字也会变得非常高效一样。移动名词你应该把大多数时间花在正常模式中使用移动命令在文件里导航。在 Vim 中移动命令也被称为 名词nouns因为它们指向的是一段文本。基础移动hjkl左、下、上、右单词w下一个单词、b单词开头、e单词结尾行0行首、^第一个非空白字符、$行尾屏幕H屏幕顶部、M屏幕中间、L屏幕底部滚动Ctrl-u向上、Ctrl-d向下文件gg文件开头、G文件结尾行号:{number}CR或{number}G第 {number} 行CR指回车 / Enter 键其他%匹配项例如括号或花括号查找f{character}、t{character}、F{character}、T{character}——在当前行内向前/向后查找或跳到 {character}使用,/;在匹配之间导航搜索/{regex}使用n/N在匹配之间导航选择可视化模式包括可视化v可视化行V可视化块Ctrl-v你可以使用移动键来扩展选择范围。编辑动词你过去用鼠标完成的事情现在都可以通过键盘上的编辑命令配合移动命令来完成。到了这里Vim 的界面就开始真正像一门编程语言了。Vim 的编辑命令也被称为 动词verbs因为动词作用于名词。i进入插入模式但如果是操作/删除文本通常你会想用比退格键更强的东西o/O在下方 / 上方插入一行d{motion}删除 {motion}例如dw删除一个单词d$删除到行尾d0删除到行首c{motion}修改 {motion}例如cw修改一个单词相当于d{motion}后接ix删除字符等价于dls替换字符等价于cl可视化模式 操作选中文本后按d删除或按c修改u撤销C-r重做y复制 / yank有些其他命令例如d也会复制p粘贴还有很多要学例如~可以切换字符大小写J可以把多行连接起来计数你可以给名词和动词加上计数从而把某个动作执行多次。3w向前移动 3 个单词5j向下移动 5 行7dw删除 7 个单词修饰符你可以使用修饰符来改变名词的含义。有些修饰符是i表示 inner 或 inside还有a表示 around。ci(修改当前这对圆括号内部的内容ci[修改当前这对方括号内部的内容da删除一个单引号字符串包括两侧的单引号综合起来看用 Vim 修复一段有问题的代码下面是一个有问题的 fizz buzz 实现def fizz_buzz(limit): for i in range(limit): if i % 3 0: print(fizz, end) if i % 5 0: print(fizz, end) if i % 3 and i % 5: print(i, end) print() def main(): fizz_buzz(20)我们从正常模式开始使用下面这一串命令来修复这些问题main从未被调用G跳到文件末尾 →o在下方 open 一个新行 → 输入if __name__ __main__: main()如果你的编辑器支持 Python 语言功能它可能会在插入模式里为你自动缩进→ESC回到正常模式从 0 开始而不是从 1 开始输入/然后键入range和CR搜索 range →ww向前移动两个 word你也可以用2w但在实践中对于较小的次数重复按键往往比使用计数功能更常见→i切换到 insert 模式并添加1,→ESC回到正常模式 →e跳到下一个单词的 end →a开始 append 文本并添加 1→ESC回到正常模式对 5 的倍数打印的是fizz:6CR跳到第 6 行 →cichange inside 这个内部的内容把它改成buzz→ESC回到正常模式注意这里ci正是前面提到的修饰符 动词 名词组合c修改作用于i当前引号内部一整套语言在几毫秒内完成了一次精准编辑。本仓库 2020 轮次的 Vim 讲义 还提供了更进阶的实操演示用%s/foo/bar/g做全局搜索替换、用:sp/:vsp分割多窗口、以及用宏q{字符}录制、{字符}重放把 XML 批量转换为 JSON适合作为本讲的深化阅读。仓库中的 Vim 配置实践课程仓库在 _2020/files/vimrc 提供了一份注释详尽的推荐初始配置修复了许多 Vim 默认行为的反直觉之处。将其保存为~/.vimrc即可生效逐项解读如下set nocompatible 关闭 Vi 兼容模式启用 Vim 增强功能 syntax on 打开语法高亮 set shortmessI 禁用默认启动信息 set number 显示行号 set relativenumber 相对行号当前行显示真实行号其余行相对编号 set laststatus2 始终显示底部状态栏 set backspaceindent,eol,start 让退格键行为更合理 set hidden 允许隐藏带未保存更改的缓冲区 set ignorecase 搜索时忽略大小写 set smartcase 但若搜索串含大写字母则区分大小写 set incsearch 输入即搜索无需回车 nmap Q Nop 禁用正常模式下 Q 进入 Ex 模式 set noerrorbells visualbell t_vb 关闭烦人的错误铃声 set mousea 启用鼠标支持但不要过度依赖 在正常模式与插入模式下把方向键重映射为提示消息强迫自己用 hjkl nnoremap Left :echoe Use hCR nnoremap Right :echoe Use lCR nnoremap Up :echoe Use kCR nnoremap Down :echoe Use jCR inoremap Left ESC:echoe Use hCR inoremap Right ESC:echoe Use lCR inoremap Up ESC:echoe Use kCR inoremap Down ESC:echoe Use jCR其中set number与set relativenumber的组合很有代表性当前行显示真实行号其余行显示相对行号让你一眼就能看出跳转所需的计数例如{count}j向下跳转。方向键重映射则呼应了本讲别总想去用鼠标或方向键的建议——直接解绑强迫自己养成更好的习惯。学习 Vim学习 Vim 最好的方式就是先掌握基础也就是我们目前讲过的这些内容然后在你使用的所有软件里都启用 Vim mode并在实践中真正去用它。别总想去用鼠标或方向键在一些编辑器里你甚至可以直接解绑方向键强迫自己养成更好的习惯。更多学习资源均在公开网络上可获得本仓库 2020 轮次的 Vim 讲义对 Vim 有更深入的讲解、随 Vim 一起安装的vimtutor装了 Vim 即可在 Shell 里直接运行、Vim Adventures 游戏、Vim Tips Wiki、Vim Advent Calendar、VimGolf一种 code golf只不过这里的编程语言是 Vim 的界面、Vi/Vim Stack Exchange、Vim Screencasts以及《Practical Vim》一书。代码智能与语言服务器IDE 通常会通过扩展提供语言特定支持而这些功能需要对代码有语义级理解这些扩展会连接实现了Language Server Protocol语言服务器协议LSP的语言服务器language servers。例如VS Code 的 Python 扩展依赖 Pylance而 VS Code 的 Go 扩展依赖官方的 gopls。只要为你使用的语言安装对应的扩展和语言服务器就可以在 IDE 中启用许多语言特定功能代码补全更强的自动补全和自动建议例如在输入object.后能看到对象的字段和方法。内联文档在悬停提示和自动建议里查看文档。跳转到定义从使用位置跳转到定义位置例如从字段引用object.field跳到该字段的定义。查找引用和上面相反查找某个条目例如字段或类型被引用的所有位置。导入辅助整理 imports、移除未使用 imports、标记缺失 imports。代码质量代码格式化会在你输入时自动缩进和整理格式而类型检查器与 linter 会在你输入时发现代码中的错误。这些工具可以单独使用但这类能力通常也由语言服务器提供本仓库的 代码质量讲义 会深入介绍格式化器、linter、测试与持续集成。配置语言服务器对于某些语言你只需要安装扩展和语言服务器就万事俱备了。对另一些语言来说若想把语言服务器的价值发挥到最大你还需要告诉 IDE 你的环境信息。比如让 VS Code 指向你的 Python 环境就能让语言服务器看到你已安装的包——关于环境与依赖的管理本仓库的 代码打包与发布讲义 会详细展开例如pip install与虚拟环境的作用。根据不同语言你还可以为语言服务器配置一些设置。例如在 VS Code 中使用 Python 支持时你可以为那些没有使用 Python 可选类型注解的项目禁用静态类型检查。AI 驱动的开发自 2021 年中 GitHub Copilot 引入 OpenAI 的 Codex 模型以来大型语言模型LLMs已被广泛应用于软件工程。目前主要有三种形态自动补全、内联聊天和编程代理。自动补全AI 驱动的自动补全在形态上与 IDE 中传统的自动补全类似当你输入时它会在光标位置给出补全建议。有时它会作为一种开箱即用的被动能力存在。除此之外AI 自动补全通常还可以通过代码注释来进行提示prompt engineering。例如假设我们要写一个脚本下载这些讲义的内容并提取其中所有链接。我们可以从下面开始import requests def download_contents(url: str) - str:模型会自动补全这个函数体response requests.get(url) return response.text我们还可以通过注释进一步引导补全。例如如果我们开始写一个提取所有 Markdown 链接的函数但函数名并不特别具有描述性def extract(contents: str) - list[str]:模型可能会补全成这样lines contents.splitlines() return [line for line in lines if line.strip()]我们可以通过代码注释来引导补全def extract(content: str) - list[str]: # 从内容中提取所有 Markdown 链接这一次模型会给出更好的补全import re pattern r\[.*?\]\((.*?)\) return re.findall(pattern, content)这里我们可以看到这种 AI 编程工具的一个缺点它只能在光标所在位置给出补全。在这个例子里更好的实践应该是把import re放在模块层级而不是函数内部。上面的例子故意用了一个命名很差的函数来演示如何通过注释引导代码补全在实际中你当然会希望把函数命名得更清楚一些例如extract_links也会希望写上 docstring在这种情况下模型也应该生成与上面类似的补全。为了演示我们可以把脚本补完整print(extract(download_contents(https://raw.githubusercontent.com/missing-semester/missing-semester/refs/heads/master/_2026/development-environment.md)))内联聊天内联聊天允许你选中一行或一段代码然后直接向 AI 模型发出提示让它提出编辑建议。在这种交互模式下模型可以修改现有代码这点不同于自动补全后者只能补全光标之后的代码。继续前面的例子假设我们决定不使用第三方requests库。我们可以选中相关的三行代码调用内联聊天并输入类似下面这样的提示改用内置库模型会提出这样的修改from urllib.request import urlopen def download_contents(url: str) - str: with urlopen(url) as response: return response.read().decode(utf-8)编程代理编程代理是三种形态中自主性最高的一种。本仓库的 Agentic Coding 讲义 对其有系统介绍编程代理是具有工具访问能力的对话式 AI 模型可以读写文件、搜索网页、执行 Shell 命令等。它承接本讲的内联聊天示例展示了一个经典用法——把上面那段脚本改写为正规的命令行程序并保证通过类型检查将这段代码改写为一个正规的命令行程序使用 argparse 进行参数解析。添加类型注解并确保程序通过类型检查。代理会先阅读文件理解代码然后进行编辑最后调用类型检查器确保类型注解正确如果犯了导致类型检查失败的错误它很可能会自动迭代修正。由于编程代理可以访问可能有害的工具默认情况下代理框架会提示用户确认工具调用。一个有用的心智模型是把它当作管理一个实习生实习生做那些繁琐的工作但需要你的指导偶尔也会做错事需要纠正。推荐软件一些流行的 AI IDE 包括带有 GitHub Copilot 扩展的 VS Code以及 Cursor。GitHub Copilot 目前对学生、教师以及热门开源项目的维护者提供免费使用。这是一个变化非常快的领域许多头部产品的功能其实大致相当。扩展与 IDE 的其他功能IDE 本身已经是很强大的工具而扩展会让它们更加强大。这里给出几个常见扩展方向的线索具体产品名称与清单可以在 VS Code 扩展市场等渠道按安装量检索例如 Vim 插件可参考 Vim AwesomeDevelopment containers开发容器主流 IDE 都支持它们。dev containers 让你可以使用容器来运行开发工具这对可移植性或隔离性都很有帮助。关于容器与依赖隔离本仓库的 代码打包与发布讲义 会深入介绍虚拟机与容器的区别与适用场景。远程开发通过 SSH 在远程机器上进行开发例如 VS Code 的 Remote SSH 插件。如果你想在云上一台性能很强的 GPU 机器上开发和运行代码这会非常方便。SSH 密钥管理、~/.ssh/config主机别名、scp/rsync文件传输等配套技能参见本仓库的 命令行环境讲义。协作编辑像 Google Docs 一样编辑同一个文件例如 VS Code 的 Live Share 插件。练习在你使用的所有支持 Vim mode 的软件中启用 Vim 模式例如编辑器和 Shell并在接下来一个月里把所有文本编辑都用 Vim 模式完成。每当你觉得哪里低效或者想到肯定有更好的办法时就去搜索一下通常真的有更好的办法。完成一道 VimGolf 挑战。为你正在做的一个项目配置 IDE 扩展和语言服务器。确保所有预期功能都能正常工作例如对库依赖进行跳转到定义。如果你手头没有可用于这个练习的代码也可以从开源社区找一个开源项目来用。浏览一份 IDE 扩展列表安装一个看起来对你有用的扩展。与课程体系的衔接本讲是 Missing Semester 2026 课程课程目录的第三讲位于 命令行环境第二讲涵盖终端复用器、SSH、Shell 定制与 版本控制第五讲之间并与 代码质量第九讲、Agentic Coding第七讲、代码打包与发布第六讲形成互相引用的关系网语言服务器提供的格式化与类型检查能力是代码质量工具链的前置内联聊天与自动补全则是编程代理的基础形态。可以说开发环境是贯穿整门课程所有实操场景的底层基础设施——无论是编辑讲义、配置 dotfiles还是调试构建脚本最终都要落在你手头的编辑器与语言服务器上。赞分享文档教程教育【免费下载链接】missing-semester-cn.github.iothe CS missing semester Chinese version项目地址https://gitcode.com/gh_mirrors/mi/missing-semester-cn.github.io点击查看免费下载相关推荐Wasp 编辑器开发环境配置指南语言服务器、VSCode 扩展与 TypeScript 工具链排障Wasp 编辑器开发环境配置指南语言服务器、VSCode 扩展与 TypeScript 工具链排障 导读 Wasp 是一个全家桶式的全栈 Web 框架围Web框架后端前端CLI开发工具Carbon语言工具链集成编辑器插件与开发环境Carbon语言工具链集成编辑器插件与开发环境 概述 Carbon语言作为C的实验性继任者其工具链集成对于开发者体验至关重要。本文将深入探讨Carbon编程语言编译器标准库Hyperresearch溯源链Provenance详解--suggested-by如何追踪来源树Hyperresearch溯源链Provenance详解 suggested by如何追踪来源树 ! Hyperresearch深度研究知识库品牌横幅 h人工智能深度研究AI AgentMCP 服务上一篇如何用开源神器biliTickerBuy告别B站会员购抢票焦虑完整免费指南下一篇数据科学云计算平台终极指南AWS/Azure/GCP实战教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表