-
-
Notifications
You must be signed in to change notification settings - Fork 88
/
CopilotChat.txt
797 lines (628 loc) · 30.6 KB
/
CopilotChat.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
*CopilotChat.txt* For NVIM v0.8.0 Last change: 2024 December 14
==============================================================================
Table of Contents *CopilotChat-table-of-contents*
1. Requirements |CopilotChat-requirements|
2. Installation |CopilotChat-installation|
3. Usage |CopilotChat-usage|
- Commands |CopilotChat-commands|
- Chat Mappings |CopilotChat-chat-mappings|
- Prompts |CopilotChat-prompts|
- System Prompts |CopilotChat-system-prompts|
- Sticky Prompts |CopilotChat-sticky-prompts|
- Models |CopilotChat-models|
- Agents |CopilotChat-agents|
- Contexts |CopilotChat-contexts|
- Selections |CopilotChat-selections|
- API |CopilotChat-api|
4. Configuration |CopilotChat-configuration|
- Default configuration |CopilotChat-default-configuration|
- Customizing buffers |CopilotChat-customizing-buffers|
5. Tips |CopilotChat-tips|
6. Roadmap |CopilotChat-roadmap|
7. Development |CopilotChat-development|
8. Contributors |CopilotChat-contributors|
9. Links |CopilotChat-links|
==============================================================================
1. Requirements *CopilotChat-requirements*
- Neovim 0.9.5+ <https://neovim.io/> - Older versions are not supported, and for best compatibility 0.10.0+ is preferred
- curl <https://curl.se/> - 8.0.0+ is recommended for best compatibility. Should be installed by default on most systems and also shipped with Neovim
- Copilot chat in the IDE <https://github.com/settings/copilot> setting enabled in GitHub settings
- _(Optional)_ tiktoken_core <https://github.com/gptlang/lua-tiktoken> - Used for more accurate token counting
- For Arch Linux users, you can install `luajit-tiktoken-bin` <https://aur.archlinux.org/packages/luajit-tiktoken-bin> or `lua51-tiktoken-bin` <https://aur.archlinux.org/packages/lua51-tiktoken-bin> from aur
- Alternatively, install via luarocks: `sudo luarocks install --lua-version 5.1 tiktoken_core`
- Alternatively, download a pre-built binary from lua-tiktoken releases <https://github.com/gptlang/lua-tiktoken/releases>. You can check your Lua PATH in Neovim by doing `:lua print(package.cpath)`. Save the binary as `tiktoken_core.so` in any of the given paths.
- _(Optional)_ git <https://git-scm.com/> - Used for fetching git diffs for `git` context
- For Arch Linux users, you can install `git` <https://archlinux.org/packages/extra/x86_64/git> from the official repositories
- For other systems, use your package manager to install `git`. For windows use the installer provided from git site
- _(Optional)_ lynx <https://lynx.invisible-island.net/> - Used for improved fetching of URLs for `url` context
- For Arch Linux users, you can install `lynx` <https://archlinux.org/packages/extra/x86_64/lynx> from the official repositories
- For other systems, use your package manager to install `lynx`. For windows use the installer provided from lynx site
[!WARNING] If you are on neovim < 0.11.0, you also might want to add `noinsert`
and `popup` to your `completeopt` to make the chat completion behave well.
==============================================================================
2. Installation *CopilotChat-installation*
LAZY.NVIM ~
>lua
return {
{
"CopilotC-Nvim/CopilotChat.nvim",
dependencies = {
{ "github/copilot.vim" }, -- or zbirenbaum/copilot.lua
{ "nvim-lua/plenary.nvim", branch = "master" }, -- for curl, log and async functions
},
build = "make tiktoken", -- Only on MacOS or Linux
opts = {
-- See Configuration section for options
},
-- See Commands section for default commands if you want to lazy load on them
},
}
<
See @jellydn <https://github.com/jellydn> for configuration
<https://github.com/jellydn/lazy-nvim-ide/blob/main/lua/plugins/extras/copilot-chat-v2.lua>
VIM-PLUG ~
Similar to the lazy setup, you can use the following configuration:
>vim
call plug#begin()
Plug 'github/copilot.vim'
Plug 'nvim-lua/plenary.nvim'
Plug 'CopilotC-Nvim/CopilotChat.nvim'
call plug#end()
lua << EOF
require("CopilotChat").setup {
-- See Configuration section for options
}
EOF
<
MANUAL ~
1. Put the files in the right place
>
mkdir -p ~/.config/nvim/pack/copilotchat/start
cd ~/.config/nvim/pack/copilotchat/start
git clone https://github.com/github/copilot.vim
git clone https://github.com/nvim-lua/plenary.nvim
git clone https://github.com/CopilotC-Nvim/CopilotChat.nvim
<
1. Add to your configuration (e.g. `~/.config/nvim/init.lua`)
>lua
require("CopilotChat").setup {
-- See Configuration section for options
}
<
See @deathbeam <https://github.com/deathbeam> for configuration
<https://github.com/deathbeam/dotfiles/blob/master/nvim/.config/nvim/lua/config/copilot.lua>
==============================================================================
3. Usage *CopilotChat-usage*
COMMANDS *CopilotChat-commands*
- `:CopilotChat <input>?` - Open chat window with optional input
- `:CopilotChatOpen` - Open chat window
- `:CopilotChatClose` - Close chat window
- `:CopilotChatToggle` - Toggle chat window
- `:CopilotChatStop` - Stop current copilot output
- `:CopilotChatReset` - Reset chat window
- `:CopilotChatSave <name>?` - Save chat history to file
- `:CopilotChatLoad <name>?` - Load chat history from file
- `:CopilotChatDebugInfo` - Show debug information
- `:CopilotChatModels` - View and select available models. This is reset when a new instance is made. Please set your model in `init.lua` for persistence.
- `:CopilotChatAgents` - View and select available agents. This is reset when a new instance is made. Please set your agent in `init.lua` for persistence.
- `:CopilotChat<PromptName>` - Ask a question with a specific prompt. For example, `:CopilotChatExplain` will ask a question with the `Explain` prompt. See |CopilotChat-prompts| for more information.
CHAT MAPPINGS *CopilotChat-chat-mappings*
- `<Tab>` - Trigger completion menu for special tokens or accept current completion (see help)
- `q`/`<C-c>` - Close the chat window
- `<C-l>` - Reset and clear the chat window
- `<CR>`/`<C-s>` - Submit the current prompt
- `gr` - Toggle sticky prompt for the line under cursor
- `<C-y>` - Accept nearest diff (works best with `COPILOT_GENERATE` prompt)
- `gj` - Jump to section of nearest diff. If in different buffer, jumps there; creates buffer if needed (works best with `COPILOT_GENERATE` prompt)
- `gq` - Add all diffs from chat to quickfix list
- `gy` - Yank nearest diff to register (defaults to `"`)
- `gd` - Show diff between source and nearest diff
- `gi` - Show info about current chat (model, agent, system prompt)
- `gc` - Show current chat context
- `gh` - Show help message
The mappings can be customized by setting the `mappings` table in your
configuration. Each mapping can have:
- `normal`: Key for normal mode
- `insert`: Key for insert mode
- `detail`: Description of what the mapping does
For example, to change the submit prompt mapping:
>lua
{
mappings = {
submit_prompt = {
normal = '<Leader>s',
insert = '<C-s>'
}
}
}
<
PROMPTS *CopilotChat-prompts*
You can ask Copilot to do various tasks with prompts. You can reference prompts
with `/PromptName` in chat or call with command `:CopilotChat<PromptName>`.
Default prompts are:
- `Explain` - Write an explanation for the selected code as paragraphs of text
- `Review` - Review the selected code
- `Fix` - There is a problem in this code. Rewrite the code to show it with the bug fixed
- `Optimize` - Optimize the selected code to improve performance and readability
- `Docs` - Please add documentation comments to the selected code
- `Tests` - Please generate tests for my code
- `Commit` - Write commit message for the change with commitizen convention
You can define custom prompts like this (only `prompt` is required):
>lua
{
prompts = {
MyCustomPrompt = {
prompt = 'Explain how it works.',
system_prompt = 'You are very good at explaining stuff',
mapping = '<leader>ccmc',
description = 'My custom prompt description',
}
}
}
<
SYSTEM PROMPTS *CopilotChat-system-prompts*
System prompts specify the behavior of the AI model. You can reference system
prompts with `/PROMPT_NAME` in chat. Default system prompts are:
- `COPILOT_INSTRUCTIONS` - Base GitHub Copilot instructions
- `COPILOT_EXPLAIN` - On top of the base instructions adds coding tutor behavior
- `COPILOT_REVIEW` - On top of the base instructions adds code review behavior with instructions on how to generate diagnostics
- `COPILOT_GENERATE` - On top of the base instructions adds code generation behavior, with predefined formatting and generation rules
You can define custom system prompts like this (works same as `prompts` so you
can combine prompt and system prompt definitions):
>lua
{
prompts = {
Yarrr = {
system_prompt = 'You are fascinated by pirates, so please respond in pirate speak.',
}
}
}
<
STICKY PROMPTS *CopilotChat-sticky-prompts*
You can set sticky prompt in chat by prefixing the text with `>` using markdown
blockquote syntax. The sticky prompt will be copied at start of every new
prompt in chat window. You can freely edit the sticky prompt, only rule is `>`
prefix at beginning of line. This is useful for preserving stuff like context
and agent selection (see below). Example usage:
>markdown
> #files
List all files in the workspace
<
>markdown
> @models Using Mistral-small
What is 1 + 11
<
MODELS *CopilotChat-models*
You can list available models with `:CopilotChatModels` command. Model
determines the AI model used for the chat. You can set the model in the prompt
by using `$` followed by the model name or default model via config using
`model` key. Default models are:
- `gpt-4o` - This is the default Copilot Chat model. It is a versatile, multimodal model that excels in both text and image processing and is designed to provide fast, reliable responses. It also has superior performance in non-English languages. Gpt-4o is hosted on Azure.
- `claude-3.5-sonnet` - This model excels at coding tasks across the entire software development lifecycle, from initial design to bug fixes, maintenance to optimizations. GitHub Copilot uses Claude 3.5 Sonnet hosted on Amazon Web Services. Claude is **not available everywhere** so if you do not see it, try github codespaces or VPN.
- `o1-preview` - This model is focused on advanced reasoning and solving complex problems, in particular in math and science. It responds more slowly than the gpt-4o model. You can make 10 requests to this model per day. o1-preview is hosted on Azure.
- `o1-mini` - This is the faster version of the o1-preview model, balancing the use of complex reasoning with the need for faster responses. It is best suited for code generation and small context operations. You can make 50 requests to this model per day. o1-mini is hosted on Azure.
For more information about models, see here
<https://docs.github.com/en/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide#ai-models-for-copilot-chat>
You can use more models from here <https://github.com/marketplace/models> by
using `@models` agent from here <https://github.com/marketplace/models-github>
(example: `@models Using Mistral-small, what is 1 + 11`)
AGENTS *CopilotChat-agents*
Agents are used to determine the AI agent used for the chat. You can list
available agents with `:CopilotChatAgents` command. You can set the agent in
the prompt by using `@` followed by the agent name or default agent via config
using `agent` key. Default "noop" agent is `copilot`.
For more information about extension agents, see here
<https://docs.github.com/en/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat>
You can install more agents from here
<https://github.com/marketplace?type=apps&copilot_app=true>
CONTEXTS *CopilotChat-contexts*
Contexts are used to determine the context of the chat. You can add context to
the prompt by using `#` followed by the context name or default context via
config using `context` (can be single or array) key. Any amount of context can
be added to the prompt. If context supports input, you can set the input in the
prompt by using `:` followed by the input (or pressing `complete` key after
`:`). Default contexts are:
- `buffer` - Includes specified buffer in chat context. Supports input (default current).
- `buffers` - Includes all buffers in chat context. Supports input (default listed).
- `file` - Includes content of provided file in chat context. Supports input.
- `files` - Includes all non-hidden files in the current workspace in chat context. Supports input (default list).
- `files:list` - Only lists file names.
- `files:full` - Includes file content for each file found. Can be slow on large workspaces, use with care.
- `git` - Requires `git`. Includes current git diff in chat context. Supports input (default unstaged).
- `git:unstaged` - Includes unstaged changes in chat context.
- `git:staged` - Includes staged changes in chat context.
- `url` - Includes content of provided URL in chat context. Supports input.
- `register` - Includes contents of register in chat context. Supports input (default +, e.g clipboard).
You can define custom contexts like this:
>lua
{
contexts = {
birthday = {
input = function(callback)
vim.ui.select({ 'user', 'napoleon' }, {
prompt = 'Select birthday> ',
}, callback)
end,
resolve = function(input)
input = input or 'user'
local birthday = input
if input == 'user' then
birthday = birthday .. ' birthday is April 1, 1990'
elseif input == 'napoleon' then
birthday = birthday .. ' birthday is August 15, 1769'
end
return {
{
content = birthday,
filename = input .. '_birthday',
filetype = 'text',
}
}
end
}
}
}
<
>markdown
> #birthday:user
What is my birthday
<
SELECTIONS *CopilotChat-selections*
Selections are used to determine the source of the chat (so basically what to
chat about). Selections are configurable either by default or by prompt.
Default selection is `visual` or `buffer` (if no visual selection). Selection
includes content, start and end position, buffer info and diagnostic info (if
available). Supported selections that live in `local select =
require("CopilotChat.select")` are:
- `select.visual` - Current visual selection.
- `select.buffer` - Current buffer content.
- `select.line` - Current line content.
- `select.unnamed` - Unnamed register content. This register contains last deleted, changed or yanked content.
You can chain multiple selections like this:
>lua
{
selection = function(source)
return select.visual(source) or select.buffer(source)
end
}
<
API *CopilotChat-api*
>lua
local chat = require("CopilotChat")
-- Open chat window
chat.open()
-- Open chat window with custom options
chat.open({
window = {
layout = 'float',
title = 'My Title',
},
})
-- Close chat window
chat.close()
-- Toggle chat window
chat.toggle()
-- Toggle chat window with custom options
chat.toggle({
window = {
layout = 'float',
title = 'My Title',
},
})
-- Reset chat window
chat.reset()
-- Ask a question
chat.ask("Explain how it works.")
-- Ask a question with custom options
chat.ask("Explain how it works.", {
selection = require("CopilotChat.select").buffer,
})
-- Ask a question and provide custom contexts
chat.ask("Explain how it works.", {
context = { 'buffers', 'files', 'register:+' },
})
-- Ask a question and do something with the response
chat.ask("Show me something interesting", {
callback = function(response)
print("Response:", response)
end,
})
-- Get all available prompts (can be used for integrations like fzf/telescope)
local prompts = chat.prompts()
-- Get last copilot response (also can be used for integrations and custom keymaps)
local response = chat.response()
-- Retrieve current chat config
local config = chat.config
print(config.model)
-- Pick a prompt using vim.ui.select
local actions = require("CopilotChat.actions")
-- Pick prompt actions
actions.pick(actions.prompt_actions({
selection = require("CopilotChat.select").visual,
}))
-- Programmatically set log level
chat.log_level("debug")
<
==============================================================================
4. Configuration *CopilotChat-configuration*
DEFAULT CONFIGURATION *CopilotChat-default-configuration*
Also see here </lua/CopilotChat/config.lua>:
>lua
{
-- Shared config starts here (can be passed to functions at runtime and configured via setup function)
system_prompt = prompts.COPILOT_INSTRUCTIONS, -- System prompt to use (can be specified manually in prompt via /).
model = 'gpt-4o', -- Default model to use, see ':CopilotChatModels' for available models (can be specified manually in prompt via $).
agent = 'copilot', -- Default agent to use, see ':CopilotChatAgents' for available agents (can be specified manually in prompt via @).
context = nil, -- Default context or array of contexts to use (can be specified manually in prompt via #).
temperature = 0.1, -- GPT result temperature
headless = false, -- Do not write to chat buffer and use history(useful for using callback for custom processing)
callback = nil, -- Callback to use when ask response is received
-- default selection
selection = function(source)
return select.visual(source) or select.buffer(source)
end,
-- default window options
window = {
layout = 'vertical', -- 'vertical', 'horizontal', 'float', 'replace'
width = 0.5, -- fractional width of parent, or absolute width in columns when > 1
height = 0.5, -- fractional height of parent, or absolute height in rows when > 1
-- Options below only apply to floating windows
relative = 'editor', -- 'editor', 'win', 'cursor', 'mouse'
border = 'single', -- 'none', single', 'double', 'rounded', 'solid', 'shadow'
row = nil, -- row position of the window, default is centered
col = nil, -- column position of the window, default is centered
title = 'Copilot Chat', -- title of chat window
footer = nil, -- footer of chat window
zindex = 1, -- determines if window is on top or below other floating windows
},
show_help = true, -- Shows help message as virtual lines when waiting for user input
show_folds = true, -- Shows folds for sections in chat
highlight_selection = true, -- Highlight selection
highlight_headers = true, -- Highlight headers in chat, disable if using markdown renderers (like render-markdown.nvim)
auto_follow_cursor = true, -- Auto-follow cursor in chat
auto_insert_mode = false, -- Automatically enter insert mode when opening window and on new prompt
insert_at_end = false, -- Move cursor to end of buffer when inserting text
clear_chat_on_new_prompt = false, -- Clears chat on every new prompt
-- Static config starts here (can be configured only via setup function)
debug = false, -- Enable debug logging (same as 'log_level = 'debug')
log_level = 'info', -- Log level to use, 'trace', 'debug', 'info', 'warn', 'error', 'fatal'
proxy = nil, -- [protocol://]host[:port] Use this proxy
allow_insecure = false, -- Allow insecure server connections
chat_autocomplete = true, -- Enable chat autocompletion (when disabled, requires manual `mappings.complete` trigger)
history_path = vim.fn.stdpath('data') .. '/copilotchat_history', -- Default path to stored history
question_header = '# User ', -- Header to use for user questions
answer_header = '# Copilot ', -- Header to use for AI answers
error_header = '# Error ', -- Header to use for errors
separator = '───', -- Separator to use in chat
-- default contexts
contexts = {
buffer = {
-- see config.lua for implementation
},
buffers = {
-- see config.lua for implementation
},
file = {
-- see config.lua for implementation
},
files = {
-- see config.lua for implementation
},
git = {
-- see config.lua for implementation
},
url = {
-- see config.lua for implementation
},
register = {
-- see config.lua for implementation
},
},
-- default prompts
prompts = {
Explain = {
prompt = '> /COPILOT_EXPLAIN\n\nWrite an explanation for the selected code as paragraphs of text.',
},
Review = {
prompt = '> /COPILOT_REVIEW\n\nReview the selected code.',
-- see config.lua for implementation
},
Fix = {
prompt = '> /COPILOT_GENERATE\n\nThere is a problem in this code. Rewrite the code to show it with the bug fixed.',
},
Optimize = {
prompt = '> /COPILOT_GENERATE\n\nOptimize the selected code to improve performance and readability.',
},
Docs = {
prompt = '> /COPILOT_GENERATE\n\nPlease add documentation comments to the selected code.',
},
Tests = {
prompt = '> /COPILOT_GENERATE\n\nPlease generate tests for my code.',
},
Commit = {
prompt = '> #git:staged\n\nWrite commit message for the change with commitizen convention. Make sure the title has maximum 50 characters and message is wrapped at 72 characters. Wrap the whole message in code block with language gitcommit.',
},
},
-- default mappings
mappings = {
complete = {
insert = '<Tab>',
},
close = {
normal = 'q',
insert = '<C-c>',
},
reset = {
normal = '<C-l>',
insert = '<C-l>',
},
submit_prompt = {
normal = '<CR>',
insert = '<C-s>',
},
toggle_sticky = {
detail = 'Makes line under cursor sticky or deletes sticky line.',
normal = 'gr',
},
accept_diff = {
normal = '<C-y>',
insert = '<C-y>',
},
jump_to_diff = {
normal = 'gj',
},
quickfix_diffs = {
normal = 'gq',
},
yank_diff = {
normal = 'gy',
register = '"',
},
show_diff = {
normal = 'gd',
},
show_info = {
normal = 'gi',
},
show_context = {
normal = 'gc',
},
show_help = {
normal = 'gh',
},
},
}
<
CUSTOMIZING BUFFERS *CopilotChat-customizing-buffers*
You can set local options for the buffers that are created by this plugin,
`copilot-chat`, `copilot-diff`, `copilot-overlay`:
>lua
vim.api.nvim_create_autocmd('BufEnter', {
pattern = 'copilot-*',
callback = function()
vim.opt_local.relativenumber = true
-- C-p to print last response
vim.keymap.set('n', '<C-p>', function()
print(require("CopilotChat").response())
end, { buffer = true, remap = true })
end
})
<
==============================================================================
5. Tips *CopilotChat-tips*
Quick chat with your buffer ~
To chat with Copilot using the entire content of the buffer, you can add the
following configuration to your keymap:
>lua
-- lazy.nvim keys
-- Quick chat with Copilot
{
"<leader>ccq",
function()
local input = vim.fn.input("Quick Chat: ")
if input ~= "" then
require("CopilotChat").ask(input, { selection = require("CopilotChat.select").buffer })
end
end,
desc = "CopilotChat - Quick chat",
}
<
<https://gyazo.com/9b8cbf1d78a19f326282a6520bc9aab0>
Inline chat ~
Change the window layout to `float` and position relative to cursor to make the
window look like inline chat. This will allow you to chat with Copilot without
opening a new window.
>lua
-- lazy.nvim opts
{
window = {
layout = 'float',
relative = 'cursor',
width = 1,
height = 0.4,
row = 1
}
}
<
Telescope integration ~
Requires telescope.nvim <https://github.com/nvim-telescope/telescope.nvim>
plugin to be installed.
>lua
-- lazy.nvim keys
-- Show prompts actions with telescope
{
"<leader>ccp",
function()
local actions = require("CopilotChat.actions")
require("CopilotChat.integrations.telescope").pick(actions.prompt_actions())
end,
desc = "CopilotChat - Prompt actions",
},
<
fzf-lua integration ~
Requires fzf-lua <https://github.com/ibhagwan/fzf-lua> plugin to be installed.
>lua
-- lazy.nvim keys
-- Show prompts actions with fzf-lua
{
"<leader>ccp",
function()
local actions = require("CopilotChat.actions")
require("CopilotChat.integrations.fzflua").pick(actions.prompt_actions())
end,
desc = "CopilotChat - Prompt actions",
},
<
render-markdown integration ~
Requires render-markdown
<https://github.com/MeanderingProgrammer/render-markdown.nvim> plugin to be
installed.
>lua
-- Registers copilot-chat filetype for markdown rendering
require('render-markdown').setup({
file_types = { 'markdown', 'copilot-chat' },
})
-- You might also want to disable default header highlighting for copilot chat when doing this and set error header style and separator
require('CopilotChat').setup({
highlight_headers = false,
separator = '---',
error_header = '> [!ERROR] Error',
-- rest of your config
})
<
==============================================================================
6. Roadmap *CopilotChat-roadmap*
- Improved caching for context (persistence through restarts/smarter caching)
- General QOL improvements
==============================================================================
7. Development *CopilotChat-development*
INSTALLING PRE-COMMIT TOOL ~
For development, you can use the provided Makefile command to install the
pre-commit tool:
>bash
make install-pre-commit
<
This will install the pre-commit tool and the pre-commit hooks.
==============================================================================
8. Contributors *CopilotChat-contributors*
If you want to contribute to this project, please read the CONTRIBUTING.md
</CONTRIBUTING.md> file.
Thanks goes to these wonderful people (emoji key
<https://allcontributors.org/docs/en/emoji-key>):
gptlang💻 📖Dung Duc Huynh (Kaka)💻 📖Ahmed Haracic💻Trí Thiện Nguyễn💻He Zhizhou💻Guruprakash Rajakkannu💻kristofka💻PostCyberPunk📖Katsuhiko Nishimra💻Erno Hopearuoho💻Shaun Garwood💻neutrinoA4💻 📖Jack Muratore💻Adriel Velazquez💻 📖Tomas Slusny💻 📖Nisal📖Tobias Gårdhus📖Petr Dlouhý📖Dylan Madisetti💻Aaron Weisberg💻 📖Jose Tlacuilo💻 📖Kevin Traver💻 📖dTry💻Arata Furukawa💻Ling💻Ivan Frolov💻Folke Lemaitre💻 📖GitMurf💻Dmitrii Lipin💻jinzhongjia📖guill💻Sjon-Paul Brown💻Renzo Mondragón💻 📖fjchen7💻Radosław Woźniak💻JakubPecenka💻thomastthai📖Tomáš Janoušek💻Toddneal Stallworth📖Sergey Alexandrov💻Léopold Mebazaa💻JunKi Jin💻This project follows the all-contributors
<https://github.com/all-contributors/all-contributors> specification.
Contributions of any kind are welcome!
STARGAZERS OVER TIME ~
<https://starchart.cc/CopilotC-Nvim/CopilotChat.nvim>
==============================================================================
9. Links *CopilotChat-links*
1. *@jellydn*:
2. *@deathbeam*:
3. *chat-with-buffer*: https://i.gyazo.com/9b8cbf1d78a19f326282a6520bc9aab0.gif
4. *inline-chat*: https://github.com/CopilotC-Nvim/CopilotChat.nvim/assets/5115805/608e3c9b-8569-408d-a5d1-2213325fc93c
5. *telescope-integration*: https://github.com/CopilotC-Nvim/CopilotChat.nvim/assets/5115805/14360883-7535-4ee3-aca1-79f6c39f626b
6. *fzf-lua-integration*: https://github.com/CopilotC-Nvim/CopilotChat.nvim/assets/5115805/743455bb-9517-48a8-a7a1-81215dc3b747
7. *render-markdown-integration*: https://github.com/user-attachments/assets/d8dc16f8-3f61-43fa-bfb9-83f240ae30e8
8. *Stargazers over time*: https://starchart.cc/CopilotC-Nvim/CopilotChat.nvim.svg
Generated by panvimdoc <https://github.com/kdheepak/panvimdoc>
vim:tw=78:ts=8:noet:ft=help:norl: