summaryrefslogtreecommitdiff
path: root/autoload/vim_ai.vim
diff options
context:
space:
mode:
authorKonfekt <Konfekt@users.noreply.github.com>2024-02-24 17:47:27 +0100
committerKonfekt <Konfekt@users.noreply.github.com>2024-02-26 08:21:09 +0100
commit1eb6438983250623ca42d0c1bd839c1bfc2af8c9 (patch)
tree1f8709c3b60bc687f155a11233b4716cf8dc048d /autoload/vim_ai.vim
parent249cc6d11e7ef560fe23a1c6e665a7afb8abdb20 (diff)
downloadvim-ai-1eb6438983250623ca42d0c1bd839c1bfc2af8c9.tar.gz
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.
Diffstat (limited to '')
-rw-r--r--autoload/vim_ai.vim21
1 files 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