diff --git a/.gitmodules b/.gitmodules
index 34b4330..b78036e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -5,3 +5,6 @@
[submodule "emacs/.emacs.d/evil"]
path = emacs/.emacs.d/evil
url = https://github.com/emacs-evil/evil
+[submodule "vim/.vim/bundle/quick-scope"]
+ path = vim/.vim/bundle/quick-scope
+ url = https://github.com/unblevable/quick-scope
diff --git a/Makefile b/Makefile
index 9eadeb7..e01aa37 100644
--- a/Makefile
+++ b/Makefile
@@ -82,6 +82,7 @@ sublime:
vim:
@printf "$(YELLOW)--- vim ------------------------------------------------\n$(RESET)"
+ git submodule update --init -- vim/.vim/bundle
stow -t "$$HOME" vim
vscode:
diff --git a/vim/.vim/autoload/pathogen.vim b/vim/.vim/autoload/pathogen.vim
new file mode 100644
index 0000000..3582fbf
--- /dev/null
+++ b/vim/.vim/autoload/pathogen.vim
@@ -0,0 +1,264 @@
+" pathogen.vim - path option manipulation
+" Maintainer: Tim Pope
+" Version: 2.4
+
+" Install in ~/.vim/autoload (or ~\vimfiles\autoload).
+"
+" For management of individually installed plugins in ~/.vim/bundle (or
+" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your
+" .vimrc is the only other setup necessary.
+"
+" The API is documented inline below.
+
+if exists("g:loaded_pathogen") || &cp
+ finish
+endif
+let g:loaded_pathogen = 1
+
+" Point of entry for basic default usage. Give a relative path to invoke
+" pathogen#interpose() or an absolute path to invoke pathogen#surround().
+" Curly braces are expanded with pathogen#expand(): "bundle/{}" finds all
+" subdirectories inside "bundle" inside all directories in the runtime path.
+" If no arguments are given, defaults "bundle/{}", and also "pack/{}/start/{}"
+" on versions of Vim without native package support.
+function! pathogen#infect(...) abort
+ if a:0
+ let paths = filter(reverse(copy(a:000)), 'type(v:val) == type("")')
+ else
+ let paths = ['bundle/{}', 'pack/{}/start/{}']
+ endif
+ if has('packages')
+ call filter(paths, 'v:val !~# "^pack/[^/]*/start/[^/]*$"')
+ endif
+ let static = '^\%([$~\\/]\|\w:[\\/]\)[^{}*]*$'
+ for path in filter(copy(paths), 'v:val =~# static')
+ call pathogen#surround(path)
+ endfor
+ for path in filter(copy(paths), 'v:val !~# static')
+ if path =~# '^\%([$~\\/]\|\w:[\\/]\)'
+ call pathogen#surround(path)
+ else
+ call pathogen#interpose(path)
+ endif
+ endfor
+ call pathogen#cycle_filetype()
+ if pathogen#is_disabled($MYVIMRC)
+ return 'finish'
+ endif
+ return ''
+endfunction
+
+" Split a path into a list.
+function! pathogen#split(path) abort
+ if type(a:path) == type([]) | return a:path | endif
+ if empty(a:path) | return [] | endif
+ let split = split(a:path,'\\\@]','\\&','')
+ endif
+endfunction
+
+" Like findfile(), but hardcoded to use the runtimepath.
+function! pathogen#runtime_findfile(file,count) abort
+ let rtp = pathogen#join(1,pathogen#split(&rtp))
+ let file = findfile(a:file,rtp,a:count)
+ if file ==# ''
+ return ''
+ else
+ return fnamemodify(file,':p')
+ endif
+endfunction
+
+" vim:set et sw=2 foldmethod=expr foldexpr=getline(v\:lnum)=~'^\"\ Section\:'?'>1'\:getline(v\:lnum)=~#'^fu'?'a1'\:getline(v\:lnum)=~#'^endf'?'s1'\:'=':
diff --git a/vim/.vim/bundle/quick-scope b/vim/.vim/bundle/quick-scope
new file mode 160000
index 0000000..1002970
--- /dev/null
+++ b/vim/.vim/bundle/quick-scope
@@ -0,0 +1 @@
+Subproject commit 10029708ee50d300d4b5e3475610210d4b29c74d
diff --git a/vim/.vimrc b/vim/.vimrc
index 02b2c40..567a371 100644
--- a/vim/.vimrc
+++ b/vim/.vimrc
@@ -27,11 +27,18 @@ set autoread
set history=1000
set tabpagemax=50
+noremap 0 ^
+noremap ^ 0
+
inoremap u
cmap w!! w !sudo tee % >/dev/null
set rtp+=~/.fzf
+execute pathogen#infect()
+
+let g:qs_highlight_on_keys = ['f', 'F', 't', 'T']
+
" vim:set ft=vim et sw=2: