🎯目标读者
- 本文不包含如何安装 Github Copilot
- 本文介绍了 Github Copilot 使用方法和一些技巧
本人已经使用 Github Copilot 2 年了,交了 3 次年费,每年 100$ 着实心痛,但是用着确实爽歪歪
但是感觉一直只用了一小部分功能,并没有物有所值,遂学习了一下 Github Copilot 的使用方法,也是了解了一些之前不知道的东西,在这里分享给感兴趣的人。☝️☝️☝️
想快速概览本文,可以参考如下目录
(我一开的水平处于 "代码补全使用" 的初级阶段 🤣,想想之前这 200$ 着实心痛)
- 第一部分 - 代码补全使用:这部分是基础使用,重点是通过功能和快捷键的使用提高效率
- 第二部分 - Copilot Chat 使用:这部分介绍了 Copilot Chat 能干什以及一些基本使用方法
- 第三部分 - Copilot Chat 使用案例:绝对值得一看,一些实际的使用例子
- 第四部分 - Github Copilot 的提示工程:如何更好的让 Copilot 理解你的意图
我觉得很重要的一些点
- 如何引用文件和代码,让 Copilot 知道你在问什么
- Copilot Chat 中
/ + 关键词
的使用,可以明确你的意图,并且不需要编写大量的提示词 - 如何修改 Copilot 的快捷键(JetBrains IDE),要不然有的快捷键使不出来很头大
- 一些提示词的良好实践,不过大多数无论是 Copilot 还是 Chatgpt 都是试用的
(LLM 提示词工程的思路和技巧大同小异,但每个 LLM 模型都有自己的一些 "偏好")
目录
- 🎯目标读者
- [1. 代码补全使用](#1. 代码补全使用)
-
- [1.1 基础中的基础](#1.1 基础中的基础)
- [1.2 补全切换](#1.2 补全切换)
- [1.3 新窗口中打开所有补全候选](#1.3 新窗口中打开所有补全候选)
- [1.4 接受补全中的一部分(一个单词或者一行)](#1.4 接受补全中的一部分(一个单词或者一行))
- [🌟🌟🌟 !!!重要:如何修改 Copilot 的快捷键!!! 🌟🌟🌟](#🌟🌟🌟 !!!重要:如何修改 Copilot 的快捷键!!! 🌟🌟🌟)
- [2. Copilot Chat 使用](#2. Copilot Chat 使用)
-
- [2.1 在提示中使用命令(`/ + 关键词`)](#2.1 在提示中使用命令(
/ + 关键词
)) - [2.2 引用参考代码文件](#2.2 引用参考代码文件)
- [2.1 在提示中使用命令(`/ + 关键词`)](#2.1 在提示中使用命令(
- [3. Copilot Chat 使用案例](#3. Copilot Chat 使用案例)
-
- [3.1 提问通用的软件问题](#3.1 提问通用的软件问题)
- [3.2 问有关项目的问题](#3.2 问有关项目的问题)
- [3.3 写代码](#3.3 写代码)
- [3.4 修复、改进和重构代码](#3.4 修复、改进和重构代码)
- [3.5 编写测试代码](#3.5 编写测试代码)
- [4. Github Copilot 的提示工程](#4. Github Copilot 的提示工程)
-
- [4.1 从通用到具体](#4.1 从通用到具体)
- [4.2 提供示例(注意:这个示例我没有尝试成功,无法生成良好的代码)](#4.2 提供示例(注意:这个示例我没有尝试成功,无法生成良好的代码))
- [4.3 将复杂的任务分解为简单的任务(所有的提示工程中,这一条都很适用)](#4.3 将复杂的任务分解为简单的任务(所有的提示工程中,这一条都很适用))
- [4.4 避免模糊不清的语句](#4.4 避免模糊不清的语句)
- [4.5 明示相关代码](#4.5 明示相关代码)
- [4.6 尝试和迭代](#4.6 尝试和迭代)
- [4.7 遵循良好的编码实践](#4.7 遵循良好的编码实践)
- 官方参考文档
1. 代码补全使用
1.1 基础中的基础
最简单的使用,就是当你写一部分代码以后,Github Copilot 会提示你他的补全代码,按 tab
键则接受他的补全。如果是已有代码,就把光标移过去按空格就可以触发补全。(即补全是收每次键盘动作触发的)
补全的场景包括:
- 代码补全
- 根据文件名补全
- 根据函数名补全
- 根据注释补全
- 他们的综合
- 注释补全
- xml、sql 等等等补全(例如 mybatis 的 xml 文件也可以补全)
相信我,在我写这篇文章之前我只知道这一个用法 😫😫😫
1.2 补全切换
Github Copilot 会生成多种补全方案,用如下快捷键切换
OS | 下一个补全 | 前一个补全 |
---|---|---|
macOS | Option+] |
Option+[ |
Windows or Linux | Alt+] |
Alt+[ |
1.3 新窗口中打开所有补全候选
如果您不想使用 GitHub Copilot 提供的任何初始建议,您可以在新选项卡中显示多个建议。
在提示的时候使用快捷键
OS | 新窗口打开全部提示 |
---|---|
macOS | Command+Shift+A |
Windows or Linux | Ctrl+Enter |

1.4 接受补全中的一部分(一个单词或者一行)
你可以只接受一行或者一个单词,在实际中这很有用。我之前不知道,都是先全部接受,再删除不需要的部分,非常的蠢!
OS | 接受下一个词 | 接受下一行 |
---|---|---|
macOS | Command+→ |
Command+Control+→ |
Windows or Linux | Control+→ |
Control+Alt+→ |
🌟🌟🌟 !!!重要:如何修改 Copilot 的快捷键!!! 🌟🌟🌟
需改配置这个很重要,因为我一开始有一个功能就怎么试都不能成功,最后发现是配置的原因。

之前介绍的所有配置都在这里,有的时候可能会有快捷键冲突或者未配置,修改这里即可。
2. Copilot Chat 使用
你可以让 Copilot Chat 提供代码建议、解释代码、生成单元测试并建议代码修复。
- 通过单击JetBrains IDE窗口右侧的Copilot Chat图标打开Copilot Chat窗口。
- 在提示框中输入提示。
- 评估 Copilot Chat 的答复,在需要时进一步提交新的提示词。
返回通常包括 交互式元素 。例如,响应可能包括复制或插入代码块的按钮。
要查看 Copilot Chat 生成响应的用到的文件,请选择响应下方的引用下拉列表。 - 如何在输入中换行:
Shift + Enter
2.1 在提示中使用命令(/ + 关键词
)
使用斜杠命令避免为常见场景编写复杂的提示。要使用斜杠命令,请在聊天提示框中键入/
,然后键入命令。
(键入 /
后,IDE 会提示你可用的命令有哪些)
斜杠命令包括:
/tests
:为选定的代码生成单元测试/fix
:对所选代码中的问题提出修复建议/explain
:解释所选代码/help
:了解有关使用Copilot Chat的更多信息
比如在我的对话框中,可以使用如下命令

2.2 引用参考代码文件
默认情况下,Copilot Chat 将引用打开的文件或选择的代码。
还可以通过将文件拖到聊天提示框中来告诉 Copilot Chat 要引用哪些文件。
或者,您可以右键单击文件,选择 GitHub Copilot,然后在 Chat 中选择参考文件。
3. Copilot Chat 使用案例
可以向 Copilot Chat 询问有关项目的特定问题 或一般软件问题 。
还可以让 Copilot Chat 编写代码、修复错误、编写测试和增加注释。
3.1 提问通用的软件问题
可以向 Copilot Chat 提出通用的软件问题。例如:
告诉我 nodejs 服务端常用的框架选型
如何构建一个 express 服务
如何更新一个 npm 软件包
3.2 问有关项目的问题
可以向 Copilot Chat 询问有关项目的问题。请尝试以下策略以给 Copilot 提供正确的上下文:
- 光标选中高亮相关的代码行。
- 在 IDE 中打开相关文件。
- 添加文件作为参考。(上一节介绍了,可以看一下)
你的提问可以例如:
这个函数使用了什么排序算法
这些文件是如何关联在一起的(需要引用所有文件)
3.3 写代码
可以让 Copilot 为您编写代码。例如:
写一个将列表中所有数字加在一起的函数
给这个函数增加一个错误处理逻辑
当 Copilot 返回代码块时,响应包括可交互的选项,用来复制代码或在光标处插入代码。

3.4 修复、改进和重构代码
如果打开的文件包含错误,请使用 /fix
斜杠命令要求Copilot修复错误。
还可以提出要求来改进或重构代码,例如:
如何改进这个代码
使用
C#
重写改代码给这个代码添加错误处理逻辑
3.5 编写测试代码
使用 /tests
斜杠命令要求 Copilot 为打开的文件或选定代码编写测试。例如:
/tests
/tests 使用 Jest 框架
/tests 确保这个函数不接受任何空列表
/tests
斜杠命令为现有代码编写测试。如果想在编写代码之前编写测试(测试驱动开发),去掉 /tests
命令。例如:
给一个对列表元素进行求和的 JavaScript 函数编写测试代码

4. Github Copilot 的提示工程
4.1 从通用到具体
在为 Copilot 编写提示时,首先给 Copilot 一个目标或场景的广泛描述。然后列出任何具体要求。
例如:
写一个判断是否为质数的函数
该函数应该接受一个整数,如果整数是质数,则返回true
如果输入不是合法正整数,函数应该告知调用方错误

4.2 提供示例(注意:这个示例我没有尝试成功,无法生成良好的代码)
使用示例帮助 Copilot 了解您想要什么。您可以提供示例输入数据、示例输出和示例实现。例如:
编写一个函数,查找字符串中的所有日期并将它们返回到数组中。日期的格式可以如下所示:
- 05/02/24
- 05/02/2024
- 5/2/24
- 5/2/2024
- 05-02-24
- 05-02-2024
- 5-2-24
- 5-2-2024
使用示例:
findDates("我在11/14/2023预约了牙医,12-1-23要去参加读书俱乐部")
返回:["11/14/2023","12-1-23"]
单元测试也可以作为示例。在编写函数之前,您可以使用 Copilot 为函数编写单元测试。
然后,您可以要求 Copilot 编写一个由这些单元测试描述的函数。
4.3 将复杂的任务分解为简单的任务(所有的提示工程中,这一条都很适用)
如果您希望 Copilot 完成复杂或大型任务,请将任务分解为多个简单的小型任务。
例如,不要让 Copilot 生成单词搜索拼图,而是将过程分解为更小的任务,并让 Copilot 一个接一个地完成它们:
- 编写一个函数来生成一个10 x 10的字母网格。
- 编写一个函数来查找字母网格中的所有单词,给定一个有效单词列表。
- 编写一个函数,使用前面的函数生成一个10 x 10的字母网格,其中至少包含10个单词。
- 更新之前的功能以打印字母网格和网格中的10个随机单词。
4.4 避免模糊不清的语句
避免模棱两可的术语。例如,当你问 "这是干什么的" 的时候,"这" 既可以指代当前文件,也可以指代上一个 Copilot 的回答,或者又可以指代一段特定的代码块。你应该这么问:
createUser
函数有什么作用?- 上一个回复中的代码有什么作用?
歧义也适用于引入的第三方库:
- 如果您使用的是不常见的库,请描述该库的作用。
- 如果你想要使用特定库,请在文件顶部使用 import 语句导入,或指定要使用的库。(这样 Copilot 才能感知到你的意图)
4.5 明示相关代码
如果您在 IDE 中使用 Copilot,请打开相关文件,并关闭不相关的文件。Copilot将使用打开的文件来理解您的请求。
如果您在 IDE 中使用 Copilot Chat,请 打开该文件或高亮你希望 Copilot 引用的代码。还可以在 Copilot Chat 中指定应引用哪些文件。
4.6 尝试和迭代
如果没有得到想要的补全或者生成结果,迭代提示次并反复尝试
如果在编码时使用 Copilot 获取建议,您可以完全删除补全代码并重新开始;或者可以保留建议并要求进行修改。
如果使用的是 Copilot Chat,可以在下一个提示词中引用之前的回答结果。或者,可以删除之前的回答并整体重新开始。
4.7 遵循良好的编码实践
如果您在向 Copilot 询问代码库中的建议或解释时没有得到您想要的回复,请确保现有的代码遵循最佳实践并且易于阅读。例如:
- 使用一致的代码风格和模式
- 为变量和函数使用描述性名称
- 代码被组织成合理的模块、组件或者域
官方参考文档
- 快速入门:https://docs.github.com/en/copilot/quickstart
- IDE 中使用 Copilot 技巧:https://docs.github.com/en/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot
- IDE 中使用 Copilot Chat:https://docs.github.com/en/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide
- Copilot Chat 的使用示例:https://docs.github.com/en/copilot/using-github-copilot/example-use-cases/example-prompts-for-copilot-chat
- 提示工程:https://docs.github.com/en/copilot/using-github-copilot/prompt-engineering-for-github-copilot