diff options
author | Jesse Luehrs <doy@tozt.net> | 2017-10-29 16:01:43 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2017-10-29 19:03:53 -0400 |
commit | d9fd53a62b8fe7698400610d81456e5e3d9461ef (patch) | |
tree | fb76c6f3a6da79ec38e693ecb10b346afe9557d6 /vim/plugin/zshhistory.vim | |
parent | c8b741e677788b77357c47ee1573f9ffd636c368 (diff) | |
download | conf-d9fd53a62b8fe7698400610d81456e5e3d9461ef.tar.gz conf-d9fd53a62b8fe7698400610d81456e5e3d9461ef.zip |
pull a bunch of self-contained things out of my vimrc
Diffstat (limited to 'vim/plugin/zshhistory.vim')
-rw-r--r-- | vim/plugin/zshhistory.vim | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/vim/plugin/zshhistory.vim b/vim/plugin/zshhistory.vim new file mode 100644 index 0000000..29b3c67 --- /dev/null +++ b/vim/plugin/zshhistory.vim @@ -0,0 +1,76 @@ +" see 'vim' alias in zshrc +if $SHELL !~# 'zsh' || !exists('g:_zsh_hist_fname') + finish +endif + +let s:initial_files = {} + +augroup zshhistory + autocmd! + autocmd VimEnter * call <SID>init_zsh_hist() + autocmd BufNewFile,BufRead * call <SID>zsh_hist_append() + autocmd BufDelete * call <SID>remove_initial_file(expand("<afile>")) + autocmd VimLeave * call <SID>reorder_zsh_hist() +augroup END + +function! s:remove_initial_file (file) + if has_key(s:initial_files, a:file) + unlet s:initial_files[a:file] + endif +endfunction + +function! s:get_buffer_list_text () + redir => l:output + ls! + redir END + return l:output +endfunction + +function! s:get_buffer_list () + silent let l:output = <SID>get_buffer_list_text() + let l:buffer_list = [] + for l:buffer_desc in split(l:output, "\n") + let l:name = bufname(str2nr(l:buffer_desc)) + if l:name != "" + call add(l:buffer_list, l:name) + endif + endfor + return l:buffer_list +endfunction + +function! s:init_zsh_hist () + for l:fname in <SID>get_buffer_list() + let s:initial_files[l:fname] = 1 + call histadd(":", "e " . l:fname) + endfor + call delete(g:_zsh_hist_fname) +endfunction + +function! s:zsh_hist_append () + let l:to_append = expand("%:~:.") + " XXX these set buftype too late to be caught by this... + " this is broken, but not sure what a better fix is + if &buftype == '' && l:to_append !~# '^\(__Gundo\|Startify\|\[denite\]\)' + if !has_key(s:initial_files, l:to_append) + if filereadable(g:_zsh_hist_fname) + let l:hist = readfile(g:_zsh_hist_fname) + else + let l:hist = [] + endif + call add(l:hist, l:to_append) + call writefile(l:hist, g:_zsh_hist_fname) + endif + endif +endfunction + +function! s:reorder_zsh_hist () + let l:current_file = expand("%:~:.") + if filereadable(g:_zsh_hist_fname) + let l:hist = readfile(g:_zsh_hist_fname) + if !has_key(s:initial_files, l:current_file) + call filter(l:hist, 'v:val != l:current_file') + endif + call add(l:hist, l:current_file) + call writefile(l:hist, g:_zsh_hist_fname) + endif +endfunction |