GitHub Copilot 是由 GitHub 和 OpenAI 合作开发的一款基于 AI 的“结对程序员”。它利用先进的语言模型,根据您在编辑器中的代码、注释以及聊天输入,生成代码建议、解释代码、修复 Bug、生成文档,甚至执行某些开发任务。在 Visual Studio Code (VS Code) 中,GitHub Copilot 深度集成,提供了无缝的使用体验,极大地提高了开发效率。
本教程将详细阐述如何在 VS Code 中有效、专业地利用 GitHub Copilot 的各项功能,包括基本的代码建议、强大的聊天交互、上下文管理以及各种模式(角色)的应用。
在使用 GitHub Copilot 之前,请确保满足以下条件:
Ctrl+Shift+X
) 打开扩展视图。这是最初也是最常见的 Copilot 功能,它会在您编写代码时实时提供建议。
.js
, .py
, .java
, .cs
等)。Tab
键即可接受。Esc
键即可忽略。Alt+[
(向前切换) 和 Alt+]
(向后切换) 来循环查看不同的建议。示例:
在一个 Python 文件中输入 # Function to calculate the factorial of a number
,Copilot 可能立即建议整个函数体。或者输入 def fibonacci(
,Copilot 可能会建议函数签名和实现。
Copilot Chat 提供了一个对话式的界面,让您可以直接与 Copilot 进行自然语言交流,进行更复杂的任务。
有几种方式可以打开 Copilot Chat 面板:
Ctrl+Alt+I
(Windows/Linux) 或 Cmd+Option+I
(macOS)。Ctrl+Shift+P
(Windows/Linux/macOS) 打开命令面板,输入 “Copilot Chat” 或 “Focus on Copilot Chat View” 并选择对应的命令。打开后,Copilot Chat 面板通常会出现在侧边栏或底部面板中。
Copilot Chat 面板主要包含以下部分:
#file
, #selection
, #editor
等。您可以点击这些指示符来调整或添加上下文。Enter
键或点击输入框旁的发送按钮。为 Copilot 提供明确的上下文是获得准确有用响应的关键。您可以通过以下方式添加上下文:
#file
, #selection
)。#
符号,Copilot 会弹出一个列表,显示您可以添加的上下文来源。常见的上下文指令包括:
#file
: 引用当前活动文件或指定的文件。#selection
: 引用当前选中的代码块。#editor
: 引用当前编辑器中的内容。#terminal
: 引用当前终端窗口的输出(这需要终端视图可见并聚焦)。#workspace
/ #codebase
: 引用整个工作区或项目代码库(详细说明见下一节)。#symbol
: 引用工作区中的特定符号(类、函数等)。#解决错误
: 让 Copilot 帮助您解决当前活动文件中检测到的错误。示例:
#selection
,然后输入 “Please explain this selected code.” (请解释这段选中的代码)。#file path/to/another/file.js
,然后输入您的请求。#codebase
发送#codebase
(有时也写作 #workspace
) 是 Copilot Chat 中一个非常强大的上下文指令。它允许 Copilot 访问并理解您的整个项目代码库(工作区)。
#codebase
或 #workspace
,然后按下 Enter
键选择它,或者在您的请求中直接包含此指令。#codebase
作为上下文时,Copilot 可以:
#codebase
需要 Copilot 对您的工作区进行索引。大型项目可能需要一些时间来完成索引。并不是所有问题都需要 #codebase
上下文;对于特定文件或代码块的问题,使用 #file
或 #selection
会更高效和聚焦。示例:
src/frontend/app.js
to the backend API in src/backend/api.py
? #codebase” (数据是如何从前端组件 app.js 流向后端 API api.py 的?请参考整个代码库)UserService
class in the entire project and explain its main responsibilities. #codebase” (在整个项目中找到 UserService 类的所有用法,并解释其主要职责。)如果您当前正在进行的对话偏离了主题,或者您想就一个完全不同的问题开始新的讨论,可以开始一个新的聊天会话。
通过开始新聊天,可以保持不同讨论的清晰性和聚焦性。
Quick Chat 提供了一个不打开完整 Chat 面板的快速交互方式。
Ctrl+Shift+I
(Windows/Linux) 或 Cmd+Shift+I
(macOS)。Enter
发送。Copilot 的回复会以类似通知或临时窗口的形式显示。示例:
Ctrl+Shift+I
,输入 “Explain this.” (解释一下这个)。Ctrl+Shift+I
,输入 “How to write a simple fetch request in JS?” (如何用 JS 写一个简单的 fetch 请求?)。用户提到的“模式选择(询问 编辑 代理)”并非指 Copilot 有一个明确的“询问模式”、“编辑模式”、“代理模式”切换按钮。更准确的理解是,Copilot 扮演着不同的角色(Roles)或具备不同的能力(Capabilities),这些角色/能力通过您提问的方式、使用的命令以及提供的上下文来体现。
询问 (Inquiry):
==
and ===
in JavaScript.” (解释一下 JavaScript 中 ==
和 ===
的区别。)编辑 (Editing / Refactoring):
@editor
或 @selection
上下文,并提出编辑请求。例如,选中代码后,在 Chat 中说 “Refactor this function to use async/await.” (重构这个函数以使用 async/await。) 或 “Add JSDoc comments to this function.” (为这个函数添加 JSDoc 注释。)/
命令(见下文的代理部分),如 /fix
用于修复 Bug,/refactor
用于重构。代理 (Agent):
/
命令来触发,有时结合 @
提及特定的代理或上下文。/
会弹出一个列表,显示可用的命令。输入 @
会显示可以与之交互的代理或上下文类型。/fix
: 帮助您找到并修复代码中的错误。选中代码或将光标放在错误附近,使用此命令。/explain
: 解释当前选中的代码或文件。这与询问模式类似,但 /explain
更侧重于对已有代码的深入分析。/test
: 为当前代码生成单元测试。/doc
: 为当前代码生成文档(如 JSDoc, Pyhton Docstrings 等)。/refactor
: 重构选中的代码(类似于编辑模式下的请求,但通过命令触发)。@terminal /run [command]
: 有时 Copilot 可以与终端集成,帮助执行命令。@workspace /find [symbol]
: 在整个工作区中查找符号(类似于 #codebase
查找)。/fix
。Copilot 会分析错误并建议修复方案,通常会提供直接“Apply Fix”(应用修复)的按钮。/test
。Copilot 会尝试为该函数生成一个测试用例。总结来说,这三种“模式”是 Copilot 在 VS Code 中扮演的不同角色:询问者(获取信息)、代码助手(修改和生成代码)和任务执行者(通过命令自动化开发流程)。您在 Chat 中的输入方式决定了 Copilot 会以哪种角色回应。
通常情况下,GitHub Copilot 使用的模型是由 GitHub 后端管理的,用户无需手动选择特定的底层 AI 模型(如 GPT-3.5, GPT-4 等)。然而,VS Code 的 Copilot 扩展提供了一些配置选项,允许用户在 GitHub 提供不同的模型选项时进行选择。
File > Preferences > Settings
(Windows/Linux) 或 Code > Preferences > Settings
(macOS),或按下 Ctrl+,
(Windows/Linux) 或 Cmd+,
(macOS)。GitHub Copilot: Chat: Model
。注意:
假设您想在现有的 Node.js 项目中添加一个功能:读取一个 JSON 文件并解析其内容。
src/utils/jsonReader.js
。// Function to read and parse a JSON file
Tab
接受。async/await
),打开 Copilot Chat (Ctrl+Alt+I
或 Cmd+Option+I
)。#file src/utils/jsonReader.js
的上下文。如果没有,手动输入 #file src/utils/jsonReader.js
。Enter
。fs.promises
和 try...catch
块来处理异步读取和错误。fs.promises.readFile
,可以选中那部分代码。Ctrl+Shift+I
或 Cmd+Shift+I
)。#selection
上下文存在,输入 “What does this code do?” (这段代码是做什么的?)。readJsonFile
函数。/test
。#codebase
查找用法:
readJsonFile
函数后,如果您想知道未来哪些地方可能会用到它,可以在 Chat 中输入:“请在整个项目中查找函数 readJsonFile
的所有潜在用法,或者建议哪些模块可能会用到这个函数。#codebase”。#file
, #selection
, #codebase
等上下文指令,帮助 Copilot 理解您的问题是基于哪部分代码或项目。GitHub Copilot 在 VS Code 中的集成,通过智能的代码建议、强大的聊天交互和多功能的代理能力,极大地增强了开发者的生产力。掌握好基本的代码建议、熟练使用 Chat 面板进行询问和编辑、理解并运用上下文(特别是 #codebase
)、以及利用 /
命令触发代理任务,将使您能够更高效、更愉快地进行软件开发。记住,Copilot 是您的AI助手,最有效的使用方式是将其作为协作伙伴,结合您自身的专业知识和判断,共同完成任务。