From 1eb6438983250623ca42d0c1bd839c1bfc2af8c9 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Sat, 24 Feb 2024 17:47:27 +0100 Subject: align AIRedo with AI/AIEdit/Chat These changes were necessary to fix a bug where commands were not being executed correctly in non-visual modes, and to make the code cleaner and more efficient. By explicitly handling the visual selection state, it ensures that the plugin functions correctly regardless of how the user invokes the AI features. --- autoload/vim_ai.vim | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index 6dfe70c..3115884 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -6,6 +6,8 @@ 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_firstline = 1 +let s:last_lastline = 1 let s:last_instruction = "" let s:last_command = "" let s:last_config = {} @@ -116,7 +118,6 @@ function! s:GetVisualSelection() return join(lines, "\n") endfunction - " Complete prompt " - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_complete config @@ -134,6 +135,8 @@ function! vim_ai#AIRun(is_selection, config, ...) range let s:last_config = a:config let s:last_instruction = l:instruction let s:last_is_selection = a:is_selection + let s:last_firstline = a:firstline + let s:last_lastline = a:lastline let l:cursor_on_empty_line = empty(getline('.')) call s:set_paste(l:config) @@ -164,6 +167,8 @@ function! vim_ai#AIEditRun(is_selection, config, ...) range let s:last_config = a:config let s:last_instruction = l:instruction let s:last_is_selection = a:is_selection + let s:last_firstline = a:firstline + let s:last_lastline = a:lastline call s:set_paste(l:config) call s:SelectSelectionOrRange(a:is_selection, a:firstline, a:lastline) @@ -205,8 +210,6 @@ function! vim_ai#AIChatRun(is_selection, config, ...) range let s:last_command = "chat" let s:last_config = a:config - let s:last_instruction = l:instruction - let s:last_is_selection = a:is_selection execute "py3file " . s:chat_py call s:set_nopaste(l:config) @@ -224,18 +227,10 @@ 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_config, s:last_instruction) - else - call vim_ai#AIRun(s:last_is_selection, s:last_config, s:last_instruction) - endif + exe s:last_firstline.",".s:last_lastline . "call vim_ai#AIRun(s:last_is_selection, s:last_config, s:last_instruction)" endif if s:last_command == "edit" - if s:last_is_selection - '<,'>call vim_ai#AIEditRun(s:last_is_selection, s:last_config, s:last_instruction) - else - call vim_ai#AIEditRun(s:last_is_selection, s:last_config, s:last_instruction) - endif + exe s:last_firstline.",".s:last_lastline . "call vim_ai#AIEditRun(s:last_is_selection, s:last_config, s:last_instruction)" endif if s:last_command == "chat" " chat does not need prompt, all information are in the buffer already -- cgit v1.2.3