Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Gist file containing code for medium post codi.vim fullscreen workflow
" since it is fullscreen, I'd like a 50/50 split
let g:codi#width = 50.0
" instead of destroying buffers, hide them and
" index them by filetype into this dictionary
let s:codi_filetype_tabs = {}
fun! s:FullscreenScratch()
" store filetype and bufnr of current buffer
" for later reference
let current_buf_ft = &ft
let current_buf_num = bufnr('%')
" check if a scratch buffer for this filetype already exists
let saved_scratch = get(s:codi_filetype_tabs, current_buf_ft, -1)
" if a tabpage exists for current_buf_ft, go to it instead of
" creating a new scratch buffer
if saved_scratch != -1
if index(map(gettabinfo(), 'v:val.tabnr'), saved_scratch) == -1
unlet s:codi_filetype_tabs[current_buf_ft]
exe 'tabn' saved_scratch
" create a new empty tab, set scratch options and give it a name
setlocal buftype=nofile noswapfile modifiable buflisted bufhidden=hide
exe ':file scratch::' . current_buf_ft
" set filetype to that of original source file
" e.g. ruby / python / w/e Codi supports
let &filetype = current_buf_ft
" store the tabpagenr per filetype so we can return
" to it later when re-opening from the same filetype
let s:codi_filetype_tabs[&filetype] = tabpagenr()
" create a buffer local mapping that overrides the
" outer one to delete the current scratch buffer instead
" when the buffer is destroyed, this mapping will be
" destroyed with it and the next <Leader><Leader>
" will spawn a new fullscreen scratch window again
nmap <silent><buffer> <Leader><Leader> :tabprevious<Cr>
" everything is setup, filetype is set
" let Codi do the rest :)
" create a mapping to call the fullscreen scratch wrapper
nmap <silent> <Leader><Leader> :call <SID>FullscreenScratch()<Cr>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment