Github Copilot 已經是我工作上的好幫手,它的好處是你付一次月租他可以支援所有你有支援的軟體,我安裝在 Jetbrains 全套、vscode、neovim,一魚多吃相當方便,這邊介紹一下 vim/neovim 用來跟 copilot 對話的好用插件 CopilotChat.nvim,當然你要使用之前必須先有 copilot 帳號,以及安裝開通 copilot.vim。
網站中有許多 plugin 安裝的方式,選自己常用的安裝即可,在你的 vim/neovim 配置檔案要加入啟動的語法:
lua << EOF
require("CopilotChat").setup { }
EOF
" 用 cc 叫出視窗
nnoremap <silent> cc :CopilotChatToggle<CR>
我習慣是盡量不太修改插件預設值,避免有轉換環境的痛苦,套用 cc 叫出視窗是我針對 CopilotChat 唯一的設定了,我們用撰寫一個 docker-compose.yml 當作範例。
nvim docker-compose.yml 建立一個檔案,進入 vim/neovim 按下 cc,可以看到 CopilotChat 視窗在左邊出現。

以下是常用的快捷鍵以及指令:
| 插入模式 | 普通模式 | 功能說明 |
|---|---|---|
<Tab> |
- | 觸發或接受補全選單(tokens 自動完成) |
<C-c> |
q |
關閉聊天視窗 |
<C-l> |
<C-l> |
重設並清空聊天視窗 |
<C-s> |
<CR> |
提交當前的提示內容 |
| - | grr |
切換目前游標所在行是否為「固定提示」 |
| - | grx |
清除所有「固定提示」 |
<C-y> |
<C-y> |
接受最近的一個差異(diff) |
| - | gj |
跳轉到最近差異的區塊 |
| - | gqa |
將所有回覆加入 quickfix 清單 |
| - | gqd |
將所有差異加入 quickfix 清單 |
| - | gy |
將最近的差異複製(yank)到暫存器 |
| - | gd |
顯示原始內容與最近差異的比對 |
| - | gi |
顯示目前聊天的資訊 |
| - | gc |
顯示目前聊天的上下文 |
| - | gh |
顯示說明訊息 |
| 指令 | 說明 |
|---|---|
:CopilotChat <輸入內容>? |
開啟聊天視窗,並可選擇性地輸入問題或指令 |
:CopilotChatOpen |
開啟聊天視窗 |
:CopilotChatClose |
關閉聊天視窗 |
:CopilotChatToggle |
切換聊天視窗(開啟與關閉間切換) |
:CopilotChatStop |
停止目前的輸出(中斷正在生成的內容) |
:CopilotChatReset |
重設聊天視窗(清除目前對話) |
:CopilotChatSave <名稱>? |
儲存聊天記錄,可選擇性指定一個名稱 |
:CopilotChatLoad <名稱>? |
載入先前儲存的聊天記錄 |
:CopilotChatPrompts |
查看並選擇提示範本(例如:解釋代碼、重構等用途) |
:CopilotChatModels |
查看並選擇可使用的 AI 模型 |
:CopilotChatAgents |
查看並選擇可用的 AI 助手代理(不同風格或角色) |
:CopilotChat<PromptName> |
使用特定提示範本開啟對話(例如 :CopilotChatExplain) |
現在位於左邊的 CC 視窗,輸入寫一份 docker-compose.yml,需要安裝 nginx 以及 php-fpm,先按 esc 回到 visual mode 以後再按下 enter。

我們可以看到他幫我們產生了許多內容,下面包含了基礎的 nginx 配置,更下方還有測試用的 php 程式碼,但我需要的只有 docker-compose 的部分,所以我將 cursor 移到我需要的區塊,然後按下 ctrl + y,此時他便將該區塊的程式碼移到了右邊去。
我接著輸入 prompt,現在的 docker-compose 不需要使用 version,他會依照上文幫我重產內容。

我們可以使用 gd 快速看出差異。

按下 q 回來以後,一樣使用 ctrl + y 將改變套用,這樣就可以套用新的格式,假設你已經脫離上下文,需要透過 cc 給你的檔案建議呢,這時就要用 vim/neovim 的選取功能,將需要他幫忙的地方選取起來,再去問一下 cc。

一樣用 ctrl + y 套用結果,如果你是要他參考整個文件就得使用全選了,另外一種方式是在命令列輸入 :CopilotChat 將 nginx 改為 ubuntu 版本 #buffer,這樣他就會把該檔案的內容當作緩衝使用,我自己是覺得用選的比較快。
另外一個主動參考整個文件的方法就是在第一次打開視窗問問題時,加上 #buffer,例如:
#buffer 將 $name 取代為 $userName
這樣他便會去直接參考整個檔案。
當我們使用 :CopilotChatModels 時,他會列出所有你可以使用的 model,可以記一下編號,移動到最下面後可以填入該編號,便可以切換模型。

但這個變動只有在這次有效,要永久使用該模型可以設定 config。
lua << EOF
require("CopilotChat").setup {
model = 'claude-3.7-sonnet'
}
EOF
沒有留言:
張貼留言