Last active
August 26, 2022 17:13
-
-
Save tucnak/65876d2a540c5574fc4c0d433dc13198 to your computer and use it in GitHub Desktop.
MacVim + OpenAI GPT-3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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