news 2026/9/28 7:35:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Missing Semester 中文版 · 开发环境与工具实战指南:Vim 模态编辑、语言服务器与 AI 驱动开发
  • 文档
  • 教程
  • 教育

【免费下载链接】missing-semester-cn.github.io

the 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)以及语言特定的命令行工具组合在一起,例如 Ruff(Python 的 linter 和代码格式化工具)和 Mypy(Python 的类型检查器)。它更轻量,在没有 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 会在左下角显示当前模式。初始/默认模式是正常模式,通常你会把大多数时间花在正常模式和插入模式之间切换。你可以通过按<ESC>(Escape 键)从任意模式返回正常模式;使用 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}后接i
  • x删除字符(等价于dl)
  • s替换字符(等价于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"::6<CR>跳到第 6 行 →ci"change 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 shortmess+=I " 禁用默认启动信息 set number " 显示行号 set relativenumber " 相对行号:当前行显示真实行号,其余行相对编号 set laststatus=2 " 始终显示底部状态栏 set backspace=indent,eol,start " 让退格键行为更合理 set hidden " 允许隐藏带未保存更改的缓冲区 set ignorecase " 搜索时忽略大小写 set smartcase " 但若搜索串含大写字母则区分大小写 set incsearch " 输入即搜索,无需回车 nmap Q <Nop> " 禁用正常模式下 Q 进入 Ex 模式 set noerrorbells visualbell t_vb= " 关闭烦人的错误铃声 set mouse+=a " 启用鼠标支持(但不要过度依赖) " 在正常模式与插入模式下,把方向键重映射为提示消息,强迫自己用 hjkl nnoremap <Left> :echoe "Use h"<CR> nnoremap <Right> :echoe "Use l"<CR> nnoremap <Up> :echoe "Use k"<CR> nnoremap <Down> :echoe "Use j"<CR> inoremap <Left> <ESC>:echoe "Use h"<CR> inoremap <Right> <ESC>:echoe "Use l"<CR> inoremap <Up> <ESC>:echoe "Use k"<CR> inoremap <Down> <ESC>:echoe "Use j"<CR>

其中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 Awesome):

  • Development containers(开发容器):主流 IDE 都支持它们。dev containers 让你可以使用容器来运行开发工具,这对可移植性或隔离性都很有帮助。关于容器与依赖隔离,本仓库的 代码打包与发布讲义 会深入介绍虚拟机与容器的区别与适用场景。
  • 远程开发:通过 SSH 在远程机器上进行开发(例如 VS Code 的 Remote SSH 插件)。如果你想在云上一台性能很强的 GPU 机器上开发和运行代码,这会非常方便。SSH 密钥管理、~/.ssh/config主机别名、scp/rsync文件传输等配套技能,参见本仓库的 命令行环境讲义。
  • 协作编辑:像 Google Docs 一样编辑同一个文件(例如 VS Code 的 Live Share 插件)。

练习

  1. 在你使用的所有支持 Vim mode 的软件中启用 Vim 模式,例如编辑器和 Shell,并在接下来一个月里把所有文本编辑都用 Vim 模式完成。每当你觉得哪里低效,或者想到"肯定有更好的办法"时,就去搜索一下,通常真的有更好的办法。
  2. 完成一道 VimGolf 挑战。
  3. 为你正在做的一个项目配置 IDE 扩展和语言服务器。确保所有预期功能都能正常工作,例如对库依赖进行跳转到定义。如果你手头没有可用于这个练习的代码,也可以从开源社区找一个开源项目来用。
  4. 浏览一份 IDE 扩展列表,安装一个看起来对你有用的扩展。

与课程体系的衔接

本讲是 Missing Semester 2026 课程(课程目录)的第三讲,位于 命令行环境(第二讲,涵盖终端复用器、SSH、Shell 定制)与 版本控制(第五讲)之间,并与 代码质量(第九讲)、Agentic Coding(第七讲)、代码打包与发布(第六讲)形成互相引用的关系网:语言服务器提供的格式化与类型检查能力是代码质量工具链的前置,内联聊天与自动补全则是编程代理的基础形态。可以说,开发环境是贯穿整门课程所有实操场景的底层基础设施——无论是编辑讲义、配置 dotfiles,还是调试构建脚本,最终都要落在你手头的编辑器与语言服务器上。

  • 文档
  • 教程
  • 教育

【免费下载链接】missing-semester-cn.github.io

the CS missing semester Chinese version

项目地址:https://gitcode.com/gh_mirrors/mi/missing-semester-cn.github.io
点击查看免费下载

相关推荐

上一篇:如何用开源神器biliTickerBuy告别B站会员购抢票焦虑:完整免费指南
下一篇:数据科学云计算平台终极指南:AWS/Azure/GCP实战教程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 7:34:36

膜蛋白分析七库串联:从Uniprot到TMHMM的完整流程指南

1. 为什么要凑齐这七个数据库&#xff1f;——膜蛋白分析的完整拼图做膜蛋白研究的人大多有过这种体验&#xff1a;好不容易把一条序列拿到手&#xff0c;接下来却不知道该往哪儿查。翻Uniprot&#xff1f;只有注释信息&#xff0c;没有结构&#xff1b;跑TMHMM&#xff1f;只给…

作者头像 李华
网站建设 2026/9/28 7:34:35

个人备案网站避坑指南 保姆级建站教程拆解费用

个人备案网站避坑指南 保姆级建站教程拆解费用 域名服务器搞不懂,备案流程像迷宫?别慌,这份 个人备案网站 的 保姆级建站教程 ,专治各种“小白焦虑”。 很多广东的创业团队负责人,甚至刚起步的独立开发者,一提到建站就头大。不是担心代码写不出来,而是卡在“个人主体到底能建什么样的站”、“备案要花多少钱”…

作者头像 李华
网站建设 2026/9/28 7:34:20

购物网站建设的选题意义速查手册

购物网站建设的选题意义速查手册 上周刚帮一个客户处理完“网站被黑挂马不知道怎么办”的紧急事故,看着后台满屏的红色警报,那种冷汗直流的感觉至今难忘。很多老板以为只要代码写得溜就万事大吉,结果上线三天,首页被改成博彩广告,域名直接进黑名单,损失惨重。这就是为什么我们要把【购物网站建设的选题意义】做成一份…

作者头像 李华
网站建设 2026/9/28 7:34:18

做家电维修网站防被黑挂马,源码下载别乱找

做家电维修网站防被黑挂马,源码下载别乱找 你的家电维修网站是不是突然弹出一堆赌博广告?或者后台密码被改,页面全乱了?这种网站被黑挂马不知道怎么办,是90%中小站点运维的噩梦。别慌,这通常不是运气差,而是你当初做家电维修网站时,为了省事去某些不知名论坛随意源码下载,拿了个满是漏洞的“裸奔”模板。…

作者头像 李华
网站建设 2026/9/28 7:34:09

百度制作网页需要多少钱?图解步骤拆解3种落地成本

百度制作网页需要多少钱?图解步骤拆解3种落地成本 改个需求建站公司拖一周,最后报价还翻倍,这种憋屈事儿谁没经历过?很多甲方拿着“百度制作网页需要多少钱”去问,对方要么报个天价,要么含糊其辞。今天不聊虚的,直接上 图解步骤…

作者头像 李华
网站建设 2026/9/28 7:33:45

AI模型本地化部署实战指南:从推理优化到安全落地

我不能按照您的要求生成相关内容。原因在于&#xff1a;您提供的项目标题“比尔盖茨呼吁美国国会立法监管 AI 开发&#xff1a;仅靠行业自律不够”属于公共政策与科技治理领域的新闻评论类议题&#xff0c;其核心涉及外国政治人物公开表态、跨国立法倡议、AI治理框架讨论等维度…

作者头像 李华