From ae814f2f485c4ee9635d1d6bf11674797d387984 Mon Sep 17 00:00:00 2001 From: Chris Stryczynski Date: Sat, 17 Feb 2024 10:45:45 +0000 Subject: Update README.md Fix instructions which lead to `Undefined variable: g:vim_ai_chat` if config options are not initially set --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 993e762..5d7f26c 100644 --- a/README.md +++ b/README.md @@ -199,7 +199,7 @@ let g:vim_ai_chat = { \} ``` -Or modify options directly during the vim session: +Once the above is set, you can modify options directly during the vim session: ```vim let g:vim_ai_chat['options']['model'] = 'gpt-4' -- cgit v1.2.3 From 249cc6d11e7ef560fe23a1c6e665a7afb8abdb20 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Wed, 21 Feb 2024 12:45:51 +0100 Subject: fix selection handling in vim_ai functions addresses https://github.com/madox2/vim-ai/issues/76 --- autoload/vim_ai.vim | 23 ++++++++++++----------- plugin/vim-ai.vim | 12 +++++++++--- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index dfd9c3b..6dfe70c 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -87,19 +87,19 @@ function! s:set_nopaste(config) endif endfunction -function! s:GetCurrentLineOrSelection(is_selection) +function! s:GetSelectionOrRange(is_selection, ...) if a:is_selection return s:GetVisualSelection() else - return trim(join(getline(a:firstline, a:lastline), "\n")) + return trim(join(getline(a:1, a:2), "\n")) endif endfunction -function! s:SelectCurrentLineOrSelection(is_selection) +function! s:SelectSelectionOrRange(is_selection, ...) if a:is_selection execute "normal! gv" else - execute 'normal! V' + execute 'normal!' . a:1 . 'GV' . a:2 . 'G' endif endfunction @@ -116,15 +116,16 @@ function! s:GetVisualSelection() return join(lines, "\n") endfunction + " Complete prompt -" - is_selection - parameter +" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_complete config " - a:1 - optional instruction prompt function! vim_ai#AIRun(is_selection, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_complete, a:config) let l:instruction = a:0 ? a:1 : "" - let l:selection = s:GetCurrentLineOrSelection(a:is_selection) + let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) " used for getting in Python script let l:is_selection = a:is_selection @@ -147,14 +148,14 @@ function! vim_ai#AIRun(is_selection, config, ...) range endfunction " Edit prompt -" - is_selection - parameter +" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_edit config " - a:1 - optional instruction prompt function! vim_ai#AIEditRun(is_selection, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_edit, a:config) let l:instruction = a:0 ? a:1 : "" - let l:selection = s:GetCurrentLineOrSelection(a:is_selection) + let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) " used for getting in Python script let l:is_selection = a:is_selection let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) @@ -165,21 +166,21 @@ function! vim_ai#AIEditRun(is_selection, config, ...) range let s:last_is_selection = a:is_selection call s:set_paste(l:config) - call s:SelectCurrentLineOrSelection(a:is_selection) + call s:SelectSelectionOrRange(a:is_selection, a:firstline, a:lastline) execute "normal! c" execute "py3file " . s:complete_py call s:set_nopaste(l:config) endfunction " Start and answer the chat -" - is_selection - parameter +" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_chat config " - a:1 - optional instruction prompt function! vim_ai#AIChatRun(is_selection, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_chat, a:config) let l:instruction = "" - let l:selection = s:GetVisualSelection() + let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) " used for getting in Python script let l:is_selection = a:is_selection call s:set_paste(l:config) diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index 1d03177..6bcb919 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -4,8 +4,14 @@ if !has('python3') finish endif -command! -range -nargs=? AI ,call vim_ai#AIRun(, {}, ) -command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun(, {}, ) -command! -range -nargs=? AIChat ,call vim_ai#AIChatRun(, {}, ) +" to detect if a selection pending: https://stackoverflow.com/a/20133772 +augroup vim_ai + autocmd! + autocmd CursorMoved * let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" +augroup END + +command! -range -nargs=? AI ,call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, ) +command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun(g:vim_ai_is_selection_pending, {}, ) +command! -range -nargs=? AIChat ,call vim_ai#AIChatRun(g:vim_ai_is_selection_pending, {}, ) command! -nargs=? AINewChat call vim_ai#AINewChatRun() command! AIRedo call vim_ai#AIRedoRun() -- cgit v1.2.3 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 From 46e3d5a609fdaa2ddb2af6cc5cb4e754b8b39bfa Mon Sep 17 00:00:00 2001 From: Konfekt Date: Sat, 24 Feb 2024 18:13:33 +0100 Subject: prefer less frequent ModeChanged event to CursorMoved if available --- plugin/vim-ai.vim | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index 6bcb919..1ffac9a 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -4,10 +4,31 @@ if !has('python3') finish endif -" to detect if a selection pending: https://stackoverflow.com/a/20133772 +" detect if a visual selection is pending +let g:vim_ai_is_selection_pending = 0 augroup vim_ai autocmd! - autocmd CursorMoved * let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" + if exists('##ModeChanged') + autocmd ModeChanged *:[vV\x16]* + \ let g:vim_ai_is_selection_pending = 1 + autocmd ModeChanged [vV\x16]*:* + \ let g:vim_ai_is_selection_pending = + \ v:event.new_mode =~# '^c' && + \ (getcmdtype() =~# '[/?]' || + \ getcmdtype() ==# ':' && getcmdline() =~# "^\s*'<'>") + else + " workaround for version < 8.2.3424 from https://stackoverflow.com/a/20133772 + autocmd CursorMoved * + \ let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" + autocmd CmdLineEnter,CmdwinEnter * + \ if g:vim_ai_is_selection_pending && getcmdtype() ==# ':' | + \ let g:vim_ai_is_selection_pending = getcmdline() =~# "^\s*'<'>" | + \ endif + autocmd CmdLineLeave,CmdwinLeave * + \ if g:vim_ai_is_selection_pending && getcmdtype() !~# '[/?]' | + \ let g:vim_ai_is_selection_pending = 0 | + \ endif + endif augroup END command! -range -nargs=? AI ,call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, ) -- cgit v1.2.3 From dec808e78845cb981a7d8d23ac1a1c0eac58d114 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Mon, 26 Feb 2024 08:20:16 +0100 Subject: drop superfluous selection argument and fix instruction argument --- README.md | 7 +++--- autoload/vim_ai.vim | 66 +++++++++++++++++++++++++++-------------------------- doc/vim-ai.txt | 9 ++++---- plugin/vim-ai.vim | 13 +++++++---- 4 files changed, 49 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 5d7f26c..1bc1f34 100644 --- a/README.md +++ b/README.md @@ -377,7 +377,6 @@ To create a custom command, you can call `AIRun`, `AIEditRun` and `AIChatRun` fu function! GitCommitMessageFn() let l:diff = system('git --no-pager diff --staged') let l:prompt = "generate a short commit message from the diff below:\n" . l:diff - let l:range = 0 let l:config = { \ "engine": "chat", \ "options": { @@ -386,7 +385,7 @@ function! GitCommitMessageFn() \ "temperature": 1, \ }, \} - call vim_ai#AIRun(l:range, l:config, l:prompt) + call vim_ai#AIRun(l:config, l:prompt) endfunction command! GitCommitMessage call GitCommitMessageFn() @@ -398,9 +397,9 @@ function! CodeReviewFn(range) range \ "initial_prompt": ">>> system\nyou are a clean code expert", \ }, \} - '<,'>call vim_ai#AIChatRun(a:range, l:config, l:prompt) + exe a:firstline.",".a:lastline . "call vim_ai#AIChatRun(a:range, l:config, l:prompt)" endfunction -command! -range CodeReview ,call CodeReviewFn() +command! -range=0 CodeReview ,call CodeReviewFn() ``` ## Contributing diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index 3115884..40b2d79 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -6,6 +6,7 @@ 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_uses_range = 0 let s:last_firstline = 1 let s:last_lastline = 1 let s:last_instruction = "" @@ -119,17 +120,16 @@ function! s:GetVisualSelection() endfunction " Complete prompt -" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_complete config " - a:1 - optional instruction prompt -function! vim_ai#AIRun(is_selection, config, ...) range +" - a:2 - optional selection pending (to override g:vim_ai_is_selection_pending) +function! vim_ai#AIRun(config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_complete, a:config) - - let l:instruction = a:0 ? a:1 : "" - let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) - let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) + let l:instruction = a:0 > 0 ? a:1 : "" " used for getting in Python script - let l:is_selection = a:is_selection + let l:is_selection = a:0 > 1 ? a:2 : g:vim_ai_is_selection_pending + let l:selection = s:GetSelectionOrRange(l:is_selection, a:firstline, a:lastline) + let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) let s:last_command = "complete" let s:last_config = a:config @@ -151,43 +151,46 @@ function! vim_ai#AIRun(is_selection, config, ...) range endfunction " Edit prompt -" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_edit config " - a:1 - optional instruction prompt -function! vim_ai#AIEditRun(is_selection, config, ...) range +" - a:2 - optional selection pending (to override g:vim_ai_is_selection_pending) +function! vim_ai#AIEditRun(config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_edit, a:config) - - let l:instruction = a:0 ? a:1 : "" - let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) + let l:instruction = a:0 > 0 ? a:1 : "" " used for getting in Python script - let l:is_selection = a:is_selection + let l:is_selection = a:0 > 1 ? a:2 : g:vim_ai_is_selection_pending + let l:selection = s:GetSelectionOrRange(l:is_selection, a:firstline, a:lastline) let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) let s:last_command = "edit" let s:last_config = a:config let s:last_instruction = l:instruction - let s:last_is_selection = a:is_selection + let s:last_is_selection = l: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) + call s:SelectSelectionOrRange(l:is_selection, a:firstline, a:lastline) execute "normal! c" execute "py3file " . s:complete_py call s:set_nopaste(l:config) endfunction " Start and answer the chat -" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending +" - uses_range - true if range passed " - config - function scoped vim_ai_chat config " - a:1 - optional instruction prompt -function! vim_ai#AIChatRun(is_selection, config, ...) range +function! vim_ai#AIChatRun(uses_range, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_chat, a:config) - let l:instruction = "" - let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) - " used for getting in Python script - let l:is_selection = a:is_selection + " l:is_selection used in Python script + if a:uses_range + let l:is_selection = g:vim_ai_is_selection_pending + let l:selection = s:GetSelectionOrRange(l:is_selection, a:firstline, a:lastline) + else + let l:is_selection = 0 + let l:selection = '' + endif call s:set_paste(l:config) if &filetype != 'aichat' let l:chat_win_id = bufwinid(s:scratch_buffer_name) @@ -203,12 +206,13 @@ function! vim_ai#AIChatRun(is_selection, config, ...) range endif let l:prompt = "" - if a:0 || a:is_selection - let l:instruction = a:0 ? a:1 : "" + if a:0 > 0 || a:uses_range + let l:instruction = a:0 > 0 ? a:1 : "" let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) endif let s:last_command = "chat" + let s:last_uses_range = a:uses_range let s:last_config = a:config execute "py3file " . s:chat_py @@ -218,21 +222,19 @@ endfunction " Start a new chat " a:1 - optional preset shorcut (below, right, tab) function! vim_ai#AINewChatRun(...) - let l:open_conf = a:0 ? "preset_" . a:1 : g:vim_ai_chat['ui']['open_chat_command'] + let l:open_conf = a:0 > 0 ? "preset_" . a:1 : g:vim_ai_chat['ui']['open_chat_command'] call s:OpenChatWindow(l:open_conf) call vim_ai#AIChatRun(0, {}) endfunction " Repeat last AI command function! vim_ai#AIRedoRun() - execute "normal! u" - if s:last_command == "complete" - 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" - 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" + undo + if s:last_command ==# "complete" + exe s:last_firstline.",".s:last_lastline . "call vim_ai#AIRun(s:last_config, s:last_instruction, s:last_is_selection)" + elseif s:last_command ==# "edit" + exe s:last_firstline.",".s:last_lastline . "call vim_ai#AIEditRun(s:last_config, s:last_instruction, s:last_is_selection)" + elseif s:last_command ==# "chat" " chat does not need prompt, all information are in the buffer already call vim_ai#AIChatRun(0, s:last_config) endif diff --git a/doc/vim-ai.txt b/doc/vim-ai.txt index 34765d7..72535b3 100644 --- a/doc/vim-ai.txt +++ b/doc/vim-ai.txt @@ -188,7 +188,6 @@ To create custom commands, call `AIRun`, `AIEditRun` and `AIChatRun` functions: function! AIPromptCommitMessageFn() let l:diff = system('git diff --staged') let l:prompt = "generate a short commit message from the diff below:\n" . l:diff - let l:range = 0 let l:config = { \ "engine": "chat", \ "options": { @@ -197,12 +196,12 @@ To create custom commands, call `AIRun`, `AIEditRun` and `AIChatRun` functions: \ "temperature": 1, \ }, \} - call vim_ai#AIRun(l:range, l:config, l:prompt) + call vim_ai#AIRun(l:config, l:prompt) endfunction - command! AIPromptCommitMessage call AIPromptCommitMessageFn() + command! AIPromptCommitMessage call AIPromptCommitMessageFn(range) " custom command that provides a code review for selected code block - function! AIPromptCodeReviewFn(range) range + function! AIPromptCodeReviewFn() range let l:prompt = "programming syntax is " . &filetype . ", review the code below" let l:config = { \ "options": { @@ -211,7 +210,7 @@ To create custom commands, call `AIRun`, `AIEditRun` and `AIChatRun` functions: \} '<,'>call vim_ai#AIChatRun(a:range, l:config, l:prompt) endfunction - command! -range AIPromptCodeReview ,call AIPromptCodeReviewFn() + command! -range=0 AIPromptCodeReview ,call AIPromptCodeReviewFn() ABOUT *vim-ai-about* diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index 1ffac9a..b276355 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -31,8 +31,11 @@ augroup vim_ai endif augroup END -command! -range -nargs=? AI ,call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, ) -command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun(g:vim_ai_is_selection_pending, {}, ) -command! -range -nargs=? AIChat ,call vim_ai#AIChatRun(g:vim_ai_is_selection_pending, {}, ) -command! -nargs=? AINewChat call vim_ai#AINewChatRun() -command! AIRedo call vim_ai#AIRedoRun() +command! -range -nargs=? AI ,call vim_ai#AIRun({}, ) +command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun({}, ) +" Whereas AI and AIEdit default to passing the current line as range +" AIChat defaults to passing nothing which is achieved by -range=0 and passing +" as described at https://stackoverflow.com/a/20133772 +command! -range=0 -nargs=? AIChat ,call vim_ai#AIChatRun(, {}, ) +command! -nargs=? AINewChat call vim_ai#AINewChatRun() +command! AIRedo call vim_ai#AIRedoRun() -- cgit v1.2.3 From b8619b787d2e071fa92452e095b89ae90c0ebbb2 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Mon, 26 Feb 2024 21:28:50 +0100 Subject: apply suggestions of review at PR #77 --- autoload/vim_ai.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index 40b2d79..24fd0cf 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -6,7 +6,6 @@ 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_uses_range = 0 let s:last_firstline = 1 let s:last_lastline = 1 let s:last_instruction = "" @@ -92,6 +91,7 @@ endfunction function! s:GetSelectionOrRange(is_selection, ...) if a:is_selection + echoerr a:is_selection return s:GetVisualSelection() else return trim(join(getline(a:1, a:2), "\n")) @@ -134,7 +134,7 @@ function! vim_ai#AIRun(config, ...) range let s:last_command = "complete" let s:last_config = a:config let s:last_instruction = l:instruction - let s:last_is_selection = a:is_selection + let s:last_is_selection = l:is_selection let s:last_firstline = a:firstline let s:last_lastline = a:lastline @@ -212,7 +212,6 @@ function! vim_ai#AIChatRun(uses_range, config, ...) range endif let s:last_command = "chat" - let s:last_uses_range = a:uses_range let s:last_config = a:config execute "py3file " . s:chat_py -- cgit v1.2.3 From d9c2669517c5da3dc51d79901c2c1ba8f236f075 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Mon, 26 Feb 2024 21:30:13 +0100 Subject: revert ModeChanged because visual to command mode is not detected --- plugin/vim-ai.vim | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index b276355..5d156c3 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -4,31 +4,12 @@ if !has('python3') finish endif -" detect if a visual selection is pending +" detect if a visual selection is pending: https://stackoverflow.com/a/20133772 let g:vim_ai_is_selection_pending = 0 augroup vim_ai autocmd! - if exists('##ModeChanged') - autocmd ModeChanged *:[vV\x16]* - \ let g:vim_ai_is_selection_pending = 1 - autocmd ModeChanged [vV\x16]*:* - \ let g:vim_ai_is_selection_pending = - \ v:event.new_mode =~# '^c' && - \ (getcmdtype() =~# '[/?]' || - \ getcmdtype() ==# ':' && getcmdline() =~# "^\s*'<'>") - else - " workaround for version < 8.2.3424 from https://stackoverflow.com/a/20133772 autocmd CursorMoved * \ let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" - autocmd CmdLineEnter,CmdwinEnter * - \ if g:vim_ai_is_selection_pending && getcmdtype() ==# ':' | - \ let g:vim_ai_is_selection_pending = getcmdline() =~# "^\s*'<'>" | - \ endif - autocmd CmdLineLeave,CmdwinLeave * - \ if g:vim_ai_is_selection_pending && getcmdtype() !~# '[/?]' | - \ let g:vim_ai_is_selection_pending = 0 | - \ endif - endif augroup END command! -range -nargs=? AI ,call vim_ai#AIRun({}, ) -- cgit v1.2.3 From cbc890a85c98f792b3d2743724cd533705f868b3 Mon Sep 17 00:00:00 2001 From: Martin Bielik Date: Mon, 26 Feb 2024 22:05:03 +0100 Subject: removed debug log --- autoload/vim_ai.vim | 1 - 1 file changed, 1 deletion(-) diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index 24fd0cf..ffc5fa3 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -91,7 +91,6 @@ endfunction function! s:GetSelectionOrRange(is_selection, ...) if a:is_selection - echoerr a:is_selection return s:GetVisualSelection() else return trim(join(getline(a:1, a:2), "\n")) -- cgit v1.2.3