diff options
| author | Martin Bielik <mx.bielik@gmail.com> | 2023-04-15 12:19:31 +0200 |
|---|---|---|
| committer | Martin Bielik <mx.bielik@gmail.com> | 2023-04-15 12:19:31 +0200 |
| commit | fd2bfb7a8a14aa9e908eff289a542f003dccfc04 (patch) | |
| tree | 90a97a95a4087473255c7ffbca4c35bb8b4c3394 /autoload/vim_ai.vim | |
| parent | 8f6c7ae590b179f2ec02142f57b2e9c3e81ac9fe (diff) | |
| download | vim-ai-fd2bfb7a8a14aa9e908eff289a542f003dccfc04.tar.gz | |
moving files to autoload
Diffstat (limited to 'autoload/vim_ai.vim')
| -rw-r--r-- | autoload/vim_ai.vim | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index bfe4f3e..502b601 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -1,3 +1,14 @@ +call vim_ai_config#load() + +let s:plugin_root = expand('<sfile>:p:h:h') +let s:complete_py = s:plugin_root . "/py/complete.py" +let s:chat_py = s:plugin_root . "/py/chat.py" + +" remembers last command parameters to be used in AIRedoRun +let s:last_is_selection = 0 +let s:last_instruction = "" +let s:last_command = "" + " Configures ai-chat scratch window. " - scratch_buffer_keep_open = 0 " - opens new ai-chat every time @@ -30,3 +41,98 @@ function! vim_ai#MakeScratchWindow() file [AI chat] endif endfunction + +function! MakePrompt(is_selection, lines, instruction) + let lines = trim(join(a:lines, "\n")) + let instruction = trim(a:instruction) + let delimiter = instruction != "" && a:is_selection ? ":\n" : "" + let selection = a:is_selection || instruction == "" ? lines : "" + let prompt = join([instruction, delimiter, selection], "") + return prompt +endfunction + +function! vim_ai#AIRun(is_selection, ...) range + let instruction = a:0 ? a:1 : "" + let lines = getline(a:firstline, a:lastline) + let prompt = MakePrompt(a:is_selection, lines, instruction) + + let s:last_command = "complete" + let s:last_instruction = instruction + let s:last_is_selection = a:is_selection + + let engine = g:vim_ai_complete['engine'] + let options = g:vim_ai_complete['options'] + let cursor_on_empty_line = trim(join(lines, "\n")) == "" + set paste + if cursor_on_empty_line + execute "normal! " . a:lastline . "GA" + else + execute "normal! " . a:lastline . "Go" + endif + execute "py3file " . s:complete_py + execute "normal! " . a:lastline . "G" + set nopaste +endfunction + +function! vim_ai#AIEditRun(is_selection, ...) range + let instruction = a:0 ? a:1 : "" + let prompt = MakePrompt(a:is_selection, getline(a:firstline, a:lastline), instruction) + + let s:last_command = "edit" + let s:last_instruction = instruction + let s:last_is_selection = a:is_selection + + let engine = g:vim_ai_edit['engine'] + let options = g:vim_ai_edit['options'] + set paste + execute "normal! " . a:firstline . "GV" . a:lastline . "Gc" + execute "py3file " . s:complete_py + set nopaste +endfunction + +function! vim_ai#AIChatRun(is_selection, ...) range + let instruction = "" + let lines = getline(a:firstline, a:lastline) + set paste + let is_outside_of_chat_window = search('^>>> user$', 'nw') == 0 + if is_outside_of_chat_window + " open chat window + execute g:vim_ai_chat['ui']['open_chat_command'] + let prompt = "" + if a:0 || a:is_selection + let instruction = a:0 ? a:1 : "" + let prompt = MakePrompt(a:is_selection, lines, instruction) + endif + execute "normal! Gi" . prompt + endif + + let s:last_command = "chat" + let s:last_instruction = instruction + let s:last_is_selection = a:is_selection + + let options = g:vim_ai_chat['options'] + let ui = g:vim_ai_chat['ui'] + execute "py3file " . s:chat_py + set nopaste +endfunction + +function! vim_ai#AIRedoRun() + execute "normal! u" + if s:last_command == "complete" + if s:last_is_selection + '<,'>call vim_ai#AIRun(s:last_is_selection, s:last_instruction) + else + call vim_ai#AIRun(s:last_is_selection, s:last_instruction) + endif + endif + if s:last_command == "edit" + if s:last_is_selection + '<,'>call vim_ai#AIEditRun(s:last_is_selection, s:last_instruction) + else + call vim_ai#AIEditRun(s:last_is_selection, s:last_instruction) + endif + endif + if s:last_command == "chat" + call vim_ai#AIChatRun(s:last_is_selection, s:last_instruction) + endif +endfunction |