其实在上学期(2022年9月)我就成功申请了github学生认证, 拿到了免费使用copilot的机会. 但是那时copilot还不支持在代理服务器上使用, 于是体验AI编程的想法被搁置. 昨天心血来潮尝试了一下, 发现可以用代理服务器连接copilot了, 于是迫不及待开始学习体验
快捷键
Copilot 也提供了一些快捷键,可以很方便地使用。
- 接受建议:
Tab
- 拒绝建议:
Esc
- 打开Copilot:
Ctrl + Enter
(会打开一个单独的面板,展示10个建议) - 下一条建议:
Alt/Option + ]
- 上一条建议:
Alt/Option + [
- 触发行内Copilot:
Alt/Option + \
(copilot还没有给出建议或者建议被拒绝了,希望手工触发它提供建议)
HTTP代理
有些用户(几乎所有中国大陆用户)可能会遇到连接不上的问题, 报错信息 GitHub Copilot could not connect to server. Extension activation failed: "connect ETIMEDOUT xxx.xxx.xxx:443"
对于中国大陆用户, 首先你要有一个代理软件, 在设置中找得到代理地址和端口. 比如 127.0.0.1:7890
然后打开VSCode的设置, 搜索 http.proxy
, 输入 127.0.0.1:7890
(你的代理地址和端口)
然后就可以啦
copilot使用场景
解决算法问题
你可以先写出函数头, 然后在注释中解释函数的作用, 传入的参数和返回的参数, 然后copilot可以自动帮你生成代码
# 使用heap sort对数组排序 (自己写的)
# 1. 将数组转换为最大堆
# 2. 将最大堆的根节点与最后一个节点交换
# 3. 将剩余的节点重新构造为最大堆
# 4. 重复2,3步骤直到剩余节点数为1
def heap_sort(arr): #(自己写的)
n = len(arr)
# 将数组转换为最大堆
for i in range(n//2-1, -1, -1):
heapify(arr, n, i)
# 将最大堆的根节点与最后一个节点交换
# 将剩余的节点重新构造为最大堆
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
return arr
def heapify(arr, n, i): #(自己写的)
# 将数组转换为最大堆
# n: 数组长度
# i: 当前节点索引
largest = i
l = 2*i + 1
r = 2*i + 2
if l < n and arr[l] > arr[largest]:
largest = l
if r < n and arr[r] > arr[largest]:
largest = r
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
# 编写5组测试数据并进行测试 #(自己写的)
test_data = [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
]
for data in test_data:
print(heap_sort(data))
可以看到, 在这个样例中, 50行代码, 我只写了四行注释, 其他代码和注释还有测试样例都是一直按 Tab
键生成的, 不要太爽
写注释
在行数上面一行写下 /**
, copilot可以自动为你写下注释
# 使用heap sort对数组排序
# 1. 将数组转换为最大堆
# 2. 将最大堆的根节点与最后一个节点交换
# 3. 将剩余的节点重新构造为最大堆
# 4. 重复2,3步骤直到剩余节点数为1
/**
* @param {number[]} nums
* @return {number}
*/
def heap_sort(arr):
n = len(arr)
# 将数组转换为最大堆
for i in range(n//2-1, -1, -1):
heapify(arr, n, i)
# 将最大堆的根节点与最后一个节点交换
# 将剩余的节点重新构造为最大堆
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
return arr
/**
* @param {number[]} arr
* @param {number} n
* @param {number} i
* @return {number}
*/
def heapify(arr, n, i):
# 将数组转换为最大堆
# n: 数组长度
# i: 当前节点索引
largest = i
l = 2*i + 1
r = 2*i + 2
if l < n and arr[l] > arr[largest]:
largest = l
if r < n and arr[r] > arr[largest]:
largest = r
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
# 编写5组测试数据并进行测试
test_data = [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
]
for data in test_data:
print(heap_sort(data))
lol 但是python的注释语法貌似不是 /**
Hope you have fun with copilot!