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
|
local utils = require('config.utils')
local icons = require('config.icons')
utils.desc('<leader>a', 'AI')
-- Copilot autosuggestions
vim.g.copilot_no_tab_map = true
vim.g.copilot_hide_during_completion = 0
vim.g.copilot_proxy_strict_ssl = 0
vim.keymap.set('i', '<S-Tab>', 'copilot#Accept("\\<S-Tab>")', { expr = true, replace_keycodes = false })
-- Copilot chat
local chat = require('CopilotChat')
local actions = require('CopilotChat.actions')
local select = require('CopilotChat.select')
local integration = require('CopilotChat.integrations.fzflua')
chat.setup({
model = 'claude-3.5-sonnet',
question_header = ' ' .. icons.ui.User .. ' ',
answer_header = ' ' .. icons.ui.Bot .. ' ',
error_header = '> ' .. icons.diagnostics.Warn .. ' ',
selection = select.visual,
mappings = {
reset = {
normal = '',
insert = '',
},
},
prompts = {
Yarrr = {
system_prompt = 'You are fascinated by pirates, so please respond in pirate speak.',
},
Explain = {
mapping = '<leader>ae',
description = 'AI Explain',
},
Review = {
mapping = '<leader>ar',
description = 'AI Review',
},
Tests = {
mapping = '<leader>at',
description = 'AI Tests',
},
Fix = {
mapping = '<leader>af',
description = 'AI Fix',
},
Optimize = {
mapping = '<leader>ao',
description = 'AI Optimize',
},
Docs = {
mapping = '<leader>ad',
description = 'AI Documentation',
},
Commit = {
mapping = '<leader>ac',
description = 'AI Generate Commit',
},
},
})
utils.au('BufEnter', {
pattern = 'copilot-*',
callback = function()
vim.opt_local.relativenumber = false
vim.opt_local.number = false
end,
})
vim.keymap.set({ 'n' }, '<leader>aa', chat.toggle, { desc = 'AI Toggle' })
vim.keymap.set({ 'v' }, '<leader>aa', chat.open, { desc = 'AI Open' })
vim.keymap.set({ 'n' }, '<leader>ax', chat.reset, { desc = 'AI Reset' })
vim.keymap.set({ 'n' }, '<leader>as', chat.stop, { desc = 'AI Stop' })
vim.keymap.set({ 'n' }, '<leader>am', chat.select_model, { desc = 'AI Model' })
vim.keymap.set({ 'n', 'v' }, '<leader>ap', function()
integration.pick(actions.prompt_actions(), {
fzf_tmux_opts = {
['-d'] = '45%',
},
})
end, { desc = 'AI Prompts' })
vim.keymap.set({ 'n', 'v' }, '<leader>aq', function()
vim.ui.input({
prompt = 'AI Question> ',
}, function(input)
if input and input ~= '' then
chat.ask(input)
end
end)
end, { desc = 'AI Question' })
|