Github Copilot 使用技巧

🎯目标读者

  • 本文不包含如何安装 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 引用参考代码文件)
  • [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 提供代码建议、解释代码、生成单元测试并建议代码修复。

  1. 通过单击JetBrains IDE窗口右侧的Copilot Chat图标打开Copilot Chat窗口。
  2. 在提示框中输入提示。
  3. 评估 Copilot Chat 的答复,在需要时进一步提交新的提示词。
    返回通常包括 交互式元素 。例如,响应可能包括复制或插入代码块的按钮。
    要查看 Copilot Chat 生成响应的用到的文件,请选择响应下方的引用下拉列表。
  4. 如何在输入中换行: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 一个接一个地完成它们:

  1. 编写一个函数来生成一个10 x 10的字母网格。
  2. 编写一个函数来查找字母网格中的所有单词,给定一个有效单词列表。
  3. 编写一个函数,使用前面的函数生成一个10 x 10的字母网格,其中至少包含10个单词。
  4. 更新之前的功能以打印字母网格和网格中的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 询问代码库中的建议或解释时没有得到您想要的回复,请确保现有的代码遵循最佳实践并且易于阅读。例如:

  • 使用一致的代码风格和模式
  • 为变量和函数使用描述性名称
  • 代码被组织成合理的模块、组件或者域

官方参考文档

相关推荐
miofly10 小时前
Reflection AI 发布 501B 参数开放权重模型 Beam
开源·github
m4Rk_12 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
高频因子挖掘机14 小时前
批量行情返回后,怎样把请求失败的股票单独挑出来?
后端·github·api
奥德元15 小时前
XiaoMate功能介绍: 让桌宠帮你分析你的桌面屏幕
github
TunerT_TQ15 小时前
【开源评测】dots:自带浏览器的 Web AI Agent——C++ 级反检测路径的工程取舍与争议
github
Maynor在掘金15 小时前
1.9 万 Star 的 Hypit:让 AI Agent 帮你“一键复刻”爆款视频,保姆级上手教程
vue.js·github
嘎嘎风16 小时前
MiniMind 学习笔记之 05 从 768 维到下一个 token
github·源码阅读
高频因子挖掘机16 小时前
盘中筛选要同时看价格和盘口?按需分层比“一次全拿”更好维护
后端·github·api
谁在黄金彼岸16 小时前
2026年第40周GitHub趋势周报
github
Daniel_12316 小时前
轻量级站点监控面板 LightPing 开源啦
前端·后端·github