diff options
| -rw-r--r-- | autoload/vim_ai.vim | 23 | ||||
| -rw-r--r-- | 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 - <range> 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 - <range> 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 - <range> 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 <line1>,<line2>call vim_ai#AIRun(<range>, {}, <f-args>) -command! -range -nargs=? AIEdit <line1>,<line2>call vim_ai#AIEditRun(<range>, {}, <f-args>) -command! -range -nargs=? AIChat <line1>,<line2>call vim_ai#AIChatRun(<range>, {}, <f-args>) +" 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\<C-v>]" +augroup END + +command! -range -nargs=? AI <line1>,<line2>call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, <f-args>) +command! -range -nargs=? AIEdit <line1>,<line2>call vim_ai#AIEditRun(g:vim_ai_is_selection_pending, {}, <f-args>) +command! -range -nargs=? AIChat <line1>,<line2>call vim_ai#AIChatRun(g:vim_ai_is_selection_pending, {}, <f-args>) command! -nargs=? AINewChat call vim_ai#AINewChatRun(<f-args>) command! AIRedo call vim_ai#AIRedoRun() |