Skip to content

Instantly share code, notes, and snippets.

@tucnak
Last active August 26, 2022 17:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tucnak/65876d2a540c5574fc4c0d433dc13198 to your computer and use it in GitHub Desktop.
Save tucnak/65876d2a540c5574fc4c0d433dc13198 to your computer and use it in GitHub Desktop.
MacVim + OpenAI GPT-3
let vimrc =<< trim END
set insertmode
inoremap <Esc> <C-o>
vnoremap <BS> d
nnoremap <silent> U :redo<CR>
nnoremap j gj
nnoremap gj j
nnoremap k gk
nnoremap gk k
vnoremap <Left> h
vnoremap <Down> j
vnoremap <Up> k
vnoremap <Right> l
nnoremap <S-Right> ve
nnoremap <S-Left> vB
nnoremap <M-Right> ve
nnoremap <M-Left> vB
let mapleader = ","
nmap <silent> <leader> :<C-u>exec
\ 'setl cc=' . v:count .
\ ' tw=' . v:count<CR>
set noshowmode
set noshowcmd
set nonu
set lines=40 columns=86
set noruler
set guioptions=egmrT
set guifont=Menlo:h16
set nocompatible
set noswapfile
set nowritebackup
set exrc
set noimd
set imsearch=2
set fileencoding=utf8
set foldmethod=indent
set fillchars=vert:\ ,fold:|,foldopen:-,foldclose:+,diff:-
set foldcolumn=5
set noet sw=8 ts=8
set preserveindent
set showbreak=
set smartcase
set smarttab
set splitbelow
set splitright
set virtualedit=onemore
fun! s:prompt()
let l=getline("'<")
let [line1,col1] = getpos("'<")[1:2]
let [line2,col2] = getpos("'>")[1:2]
return escape(trim(l[col1 - 1: col2 - 1]), '"')
endfun
fun! s:display_all(resp)
let j = json_decode(a:resp)
if has_key(j, "error")
echoerr j["error"]["message"]
return
endif
split
enew
setl buftype=nofile
setl bufhidden=hide
let past = @z
let cnt = 1
for choice in j['choices']
let @z = "\n\t\t>>>>>>> Result " . cnt . " <<<<<<<\n\n" .
\ trim(choice["text"]) . "\n"
norm "zp
norm G
let cnt += 1
endfor
norm ggdd
let @z = past
endf
fun! s:gpt3(...) range
let prompt = substitute(s:prompt(), "\n", '\\n', "")
let n = str2nr(input('No. of results: '))
let max_tokens = float2nr(0.75 *
\ str2nr(input('Max words per result: ')))
let key = get(g:, 'openai', '')
if len(key) < 50
let key = trim(input('Please put your OpenAI key: '))
if len(key) < 50
echoerr 'The key is incorrect'
return
endif
let g:openai = key
endif
let payload = printf('{"model": "text-curie-001",' .
\ ' "prompt": "%s",' .
\ ' "n": %d,' .
\ ' "temperature": 0.5,' .
\ ' "max_tokens": %d}', prompt, n, max_tokens)
let curl = "curl https://api.openai.com/v1/completions -sSL " .
\ "-H 'Content-Type: application/json' " .
\ "-H 'Authorization: Bearer " . key . "' " .
\ "-d '" . payload . "'"
call s:display_all(trim(system(curl)))
endf
command! -range -nargs=* AI call s:gpt3(<f-args>)
vnoremap <CR> :AI<CR>
hi Normal guibg=#ffffeb
hi Comment guifg=darkgray
hi Identifier guifg=black
hi Constant gui=italic
hi clear Folded
hi clear FoldColumn
hi clear SignColumn
END
e ~/.gvimrc
norm ggdG
let past = @z
let @z = join(vimrc, "\n") . "\n"
norm "zp
w
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment