diff --git a/.gitmodules b/.gitmodules
index 063182e..dc9c2d9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -28,3 +28,6 @@
[submodule "vim/.vim/bundle/tagbar"]
path = vim/.vim/bundle/tagbar
url = https://github.com/majutsushi/tagbar
+[submodule "vim/.vim/bundle/vim-vinegar"]
+ path = vim/.vim/bundle/vim-vinegar
+ url = https://github.com/tpope/vim-vinegar
diff --git a/vim/.vim/bundle/vim-vinegar b/vim/.vim/bundle/vim-vinegar
new file mode 160000
index 0000000..bd7f7b7
--- /dev/null
+++ b/vim/.vim/bundle/vim-vinegar
@@ -0,0 +1 @@
+Subproject commit bd7f7b7929260072864462c04dde3b9f4c5e0d23
diff --git a/vim/.vim/bundle/vinegar/CONTRIBUTING.markdown b/vim/.vim/bundle/vinegar/CONTRIBUTING.markdown
deleted file mode 100644
index b3f0095..0000000
--- a/vim/.vim/bundle/vinegar/CONTRIBUTING.markdown
+++ /dev/null
@@ -1 +0,0 @@
-See the [contribution guidelines for pathogen.vim](https://github.com/tpope/vim-pathogen/blob/master/CONTRIBUTING.markdown).
diff --git a/vim/.vim/bundle/vinegar/README.markdown b/vim/.vim/bundle/vinegar/README.markdown
deleted file mode 100644
index 8b5b8ed..0000000
--- a/vim/.vim/bundle/vinegar/README.markdown
+++ /dev/null
@@ -1,50 +0,0 @@
-# vinegar.vim
-
-> Split windows and the project drawer go together like oil and vinegar. I
-> don't mean to say that you can combine them to create a delicious salad
-> dressing. I mean that they don't mix well!
-> - Drew Neil
-
-You know what netrw is, right? The built in directory browser? Well,
-vinegar.vim enhances netrw, partially in an attempt to mitigate the need for
-more disruptive ["project drawer"][Oil and vinegar] style plugins.
-
-[Oil and vinegar]: http://vimcasts.org/blog/2013/01/oil-and-vinegar-split-windows-and-project-drawer/
-
-Some of the behaviors added by vinegar.vim would make excellent upstream
-additions. Many, the author would probably reject. Others are a bit too wild
-to even consider.
-
-* Press `-` in any buffer to hop up to the directory listing and seek to the
- file you just came from. Keep bouncing to go up, up, up. Having rapid
- directory access available changes everything.
-* All that annoying crap at the top is turned off, leaving you with nothing
- but a list of files. This is surprisingly disorienting, but ultimately
- very liberating. Press `I` to toggle until you adapt.
-* The oddly C-biased default sort order is replaced with a sensible application
- of `'suffixes'`.
-* File hiding: files are not listed that match with one of the patterns in
- `'wildignore'`.
- If you put `let g:netrw_list_hide = '\(^\|\s\s\)\zs\.\S\+'`
- in your vimrc, vinegar will initialize with dot files hidden.
- Press `gh` to toggle dot file hiding.
-* Press `.` on a file to pre-populate it at the end of a `:` command line.
- This is great, for example, to quickly initiate a `:grep` of the file or
- directory under the cursor. There's also `!`, which starts the line off
- with a bang. Type `!chmod +x` and get `:!chmod +x path/to/file`.
-* Press `cg` or `cl` to `:cd` or `:lcd` to the currently edited directory.
-* Press `~` to go home.
-
-## Installation
-
-If you don't have a preferred installation method, I recommend
-installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
-then simply copy and paste:
-
- cd ~/.vim/bundle
- git clone git://github.com/tpope/vim-vinegar.git
-
-## License
-
-Copyright © Tim Pope. Distributed under the same terms as Vim itself.
-See `:help license`.
diff --git a/vim/.vim/bundle/vinegar/plugin/vinegar.vim b/vim/.vim/bundle/vinegar/plugin/vinegar.vim
deleted file mode 100644
index f471141..0000000
--- a/vim/.vim/bundle/vinegar/plugin/vinegar.vim
+++ /dev/null
@@ -1,96 +0,0 @@
-" vinegar.vim - combine with netrw to create a delicious salad dressing
-" Maintainer: Tim Pope
-
-if exists("g:loaded_vinegar") || v:version < 700 || &cp
- finish
-endif
-let g:loaded_vinegar = 1
-
-function! s:fnameescape(file) abort
- if exists('*fnameescape')
- return fnameescape(a:file)
- else
- return escape(a:file," \t\n*?[{`$\\%#'\"|!<")
- endif
-endfunction
-
-let s:dotfiles = '\(^\|\s\s\)\zs\.\S\+'
-
-let g:netrw_sort_sequence = '[\/]$,*,\%(' . join(map(split(&suffixes, ','), 'escape(v:val, ".*$~")'), '\|') . '\)[*@]\=$'
-let s:escape = 'substitute(escape(v:val, ".$~"), "*", ".*", "g")'
-let g:netrw_list_hide =
- \ join(map(split(&wildignore, ','), '"^".' . s:escape . '. "$"'), ',') . ',^\.\.\=/\=$' .
- \ (get(g:, 'netrw_list_hide', '')[-strlen(s:dotfiles)-1:-1] ==# s:dotfiles ? ','.s:dotfiles : '')
-if !exists("g:netrw_banner")
- let g:netrw_banner = 0
-endif
-let s:netrw_up = ''
-
-nnoremap VinegarUp :call opendir('edit')
-if empty(maparg('-', 'n'))
- nmap - VinegarUp
-endif
-
-nnoremap VinegarTabUp :call opendir('tabedit')
-nnoremap VinegarSplitUp :call opendir('split')
-nnoremap VinegarVerticalSplitUp :call opendir('vsplit')
-
-function! s:opendir(cmd) abort
- let df = ','.s:dotfiles
- if expand('%:t')[0] ==# '.' && g:netrw_list_hide[-strlen(df):-1] ==# df
- let g:netrw_list_hide = g:netrw_list_hide[0 : -strlen(df)-1]
- endif
- if &filetype ==# 'netrw'
- let currdir = fnamemodify(b:netrw_curdir, ':t')
- execute s:netrw_up
- call s:seek(currdir)
- elseif expand('%') =~# '^$\|^term:[\/][\/]'
- execute a:cmd '.'
- else
- execute a:cmd '%:h/'
- call s:seek(expand('#:t'))
- endif
-endfunction
-
-function! s:seek(file) abort
- if get(b:, 'netrw_liststyle') == 2
- let pattern = '\%(^\|\s\+\)\zs'.escape(a:file, '.*[]~\').'[/*|@=]\=\%($\|\s\+\)'
- else
- let pattern = '^\%(| \)*'.escape(a:file, '.*[]~\').'[/*|@=]\=\%($\|\t\)'
- endif
- call search(pattern, 'wc')
- return pattern
-endfunction
-
-augroup vinegar
- autocmd!
- autocmd FileType netrw call s:setup_vinegar()
-augroup END
-
-function! s:escaped(first, last) abort
- let files = getline(a:first, a:last)
- call filter(files, 'v:val !~# "^\" "')
- call map(files, 'substitute(v:val, "[/*|@=]\\=\\%(\\t.*\\)\\=$", "", "")')
- return join(map(files, 'fnamemodify(b:netrw_curdir."/".v:val,":~:.")'), ' ')
-endfunction
-
-function! s:setup_vinegar() abort
- if empty(s:netrw_up)
- " save netrw mapping
- let s:netrw_up = substitute(maparg('-', 'n'), '\c^:\%(\)\=', '', '')
- " saved string is like this:
- " :exe "norm! 0"|call netrw#LocalBrowseCheck(172_NetrwBrowseChgDir(1,'../'))
- " remove at the end (otherwise raises "E488: Trailing characters")
- let s:netrw_up = strpart(s:netrw_up, 0, strlen(s:netrw_up)-4)
- endif
- nmap - VinegarUp
- nnoremap ~ :edit ~/
- nnoremap . : =escaped(line('.'), line('.') - 1 + v:count1)
- xnoremap . : =escaped(line("'<"), line("'>"))
- nmap ! .!
- xmap ! .!
- nnoremap cg :exe 'keepjumps cd ' .fnameescape(b:netrw_curdir)
- nnoremap cl :exe 'keepjumps lcd '.fnameescape(b:netrw_curdir)
- exe 'syn match netrwSuffixes =\%(\S\+ \)*\S\+\%('.join(map(split(&suffixes, ','), s:escape), '\|') . '\)[*@]\=\S\@!='
- hi def link netrwSuffixes SpecialKey
-endfunction