#ChatGPT #pipe #unix #gpt #vim #buffer #tasks

app gpt-pipe

在UNIX管道中使用GPT

5个版本

0.2.0 2023年4月29日
0.1.3 2023年4月24日
0.1.2 2023年4月24日
0.1.1 2023年4月24日
0.1.0 2023年4月24日

#28 in #vim

42 每月下载量

MIT 许可证

13KB
67

gpt-pipe

GPT pipe

在stdin上执行GPT操作。

我现在正在使用这个工具在 vim 中将整个vim缓冲区输入到ChatGPT中。

nmap <leader>p :%! gpt-pipe you are a pragmatic planner. give insight/critique tasks and how I should do them. reorder tasks and explain ordering<CR>

根据GPT-4认为我应该先完成什么来重新排列我的任务列表。

要异步地看到在vim中输入的提示,你可以这样做

function! HandleOutput(job_id, data, event)
  let l:output = join(a:data, "\n")
  let l:output_lines = split(l:output, '\n', 1)
  let l:current_line = getline(line('$'))
  let l:first_line = l:current_line . l:output_lines[0]

  call setline(line('$'), l:first_line)

  if len(l:output_lines) > 1
    call append(line('$'), l:output_lines[1:])
  endif
endfunction

function! StartAsyncCommand(input)
  let l:cmd = ['gpt-pipe', 'you are a pragmatic planner. give insight/critique tasks and how I should do them. reorder tasks and explain ordering.']
  let l:job_opts = {
        \ 'on_stdout': function('HandleOutput'),
        \ 'on_stderr': function('HandleOutput'),
        \ 'in_io': 'pipe',
        \ }
  let l:job_id = jobstart(l:cmd, l:job_opts)
  call jobsend(l:job_id, a:input)
  call jobclose(l:job_id, 'stdin')
endfunction

然后将其映射到 <leader>p,使用

nmap <leader>p :call StartAsyncCommand(getline(1, '$'))<CR>

安装

cargo install gpt-pipe

依赖

~9–24MB
~345K SLoC