From 92397cf7070653ba5a06abfa5778cbc8b51b40cd Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 8 Aug 2012 21:39:40 -0500 Subject: make editing files in vim add to zsh history --- vimrc | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ zshrc | 16 ++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/vimrc b/vimrc index 5a21bee..2b3484b 100644 --- a/vimrc +++ b/vimrc @@ -304,6 +304,58 @@ endfunction " Try harder to keep syntax highlighting in sync {{{ autocmd BufEnter,CursorHold,CursorHoldI * syntax sync fromstart " }}} +" Update zsh history when editing a new file - see 'vim' wrapper in .zshrc {{{ +if $SHELL =~ 'zsh' && exists('g:_zsh_hist_fname') + let s:initial_files = {} + + autocmd VimEnter * call init_zsh_hist() + autocmd BufNewFile,BufRead * call zsh_hist_append() + autocmd BufDelete * call remove_initial_file(expand("")) + + 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 => output + ls! + redir END + return output + endfunction + function! s:get_buffer_list () + silent let output = get_buffer_list_text() + let buffer_list = [] + for buffer_desc in split(output, "\n") + let buffer_bits = split(buffer_desc, '"') + call add(buffer_list, buffer_bits[1]) + endfor + return buffer_list + endfunction + function! s:init_zsh_hist () + for fname in get_buffer_list() + let s:initial_files[fname] = 1 + endfor + call delete(g:_zsh_hist_fname) + endfunction + function! s:zsh_hist_append () + let to_append = expand("%") + " XXX fuzzyfinder sets buftype too late to be caught by this... this + " is broken, but not sure what a better fix is + if &buftype == '' && to_append != "[fuf]" + if !has_key(s:initial_files, to_append) + if filereadable(g:_zsh_hist_fname) + let hist = readfile(g:_zsh_hist_fname) + else + let hist = [] + endif + call add(hist, to_append) + call writefile(hist, g:_zsh_hist_fname) + endif + endif + endfunction +endif +" }}} " Misc {{{ autocmd BufWritePost *conkyrc silent exe "!killall -HUP conky" " }}} diff --git a/zshrc b/zshrc index 260d1d6..b7c4c49 100644 --- a/zshrc +++ b/zshrc @@ -22,6 +22,22 @@ case ${TERM} in esac # }}} # aliases {{{ [ -f "$HOME/.aliases" ] && source $HOME/.aliases +function vim { + local zsh_hist_fname + zsh_hist_fname=$HOME/.vim/hist$$ + command vim --cmd "let g:_zsh_hist_fname = '$zsh_hist_fname'" "$@" + if [[ -r $zsh_hist_fname ]]; then + while read line; do + if echo $line | grep -q "[[:space:]']"; then + line=${line/\'/\'\\\\\'\'} + line="'$line'" + fi + print -s "vim $line" + done < $zsh_hist_fname + fc -AI + rm -f $zsh_hist_fname + fi +} # }}} # external files {{{ source ~/.zshcomplete -- cgit v1.2.3-54-g00ecf