vimrc.local 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. """""""
  2. "" Remove Unwanted Bundles
  3. """""""""""""""""""""""""""""""""""""""""""""""""""
  4. " We use our own powerline install
  5. UnBundle 'bling/vim-airline'
  6. " Great, but is slow when you work through tunnels, which I do a LOT.
  7. UnBundle 'airblade/vim-gitgutter'
  8. " This is not a fantastic idea, and is slow when working through tunnels.
  9. UnBundle 'myusuf3/numbers.vim'
  10. " Never go used to this
  11. UnBundle 'Lokaltog/vim-easymotion'
  12. " Don't care about gvim... yet.
  13. UnBundle 'godlygeek/csapprox'
  14. if has("autocmd")
  15. " Show trailing white space
  16. autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
  17. autocmd InsertLeave * match ExtraWhitespace /\s\+$/
  18. " Source the vimrc file after saving it
  19. autocmd BufWritePost .vimrc.local nested source $MYVIMRC
  20. " QuickFix - Local remaps:
  21. " - `q` to close qf buffer
  22. " - `o` to open location entry under cursor
  23. autocmd FileType qf nnoremap <silent> <buffer> q :ccl<CR>:lcl<CR>
  24. autocmd FileType qf nnoremap <silent> <buffer> o <CR>
  25. " QuickFix - Global remaps:
  26. " - `<TAB>` and `\` for previous and next location entry
  27. " - unmaps when qf buffer is closed.
  28. autocmd BufWinEnter quickfix
  29. \ setlocal nocursorline |
  30. \ let g:qfix_win = bufnr("$") |
  31. \ call MapQfPrevNext()
  32. autocmd BufWinLeave *
  33. \ if exists("g:qfix_win") && expand("<abuf>") == g:qfix_win |
  34. \ unlet! g:qfix_win |
  35. \ call UnmapQfPrefNext() |
  36. \ endif
  37. " QuickFix - Open window after any grep invocation (Glog and Ggrep)
  38. autocmd QuickFixCmdPost *grep* cwindow |
  39. \ setlocal nocursorline |
  40. \ let g:qfix_win = bufnr("$") |
  41. \ call MapQfPrevNext()
  42. " Fugitive - Go up to previous tree object while exploring git tree with '..'
  43. autocmd User fugitive
  44. \ if fugitive#buffer().type() =~# '^\%(tree\|blob\)$' |
  45. \ nnoremap <buffer> .. :edit %:h<CR> |
  46. \ endif
  47. " Fugitive - Delete buffers when they are not active
  48. autocmd BufReadPost fugitive://* set bufhidden=delete
  49. " PHP - Offline docs, manpage-style, using `K`.
  50. " - needs pman installed through PEAR: `pear install doc.php.net/pman`
  51. if executable('pman')
  52. autocmd FileType php set keywordprg=pman
  53. endif
  54. endif
  55. """"""""
  56. "" Tabs and Text Formatting
  57. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  58. set tabstop=2 " actual tab press distance
  59. set shiftround " indent to nearest tabstops
  60. set shiftwidth=2 " amount to indent with > and <
  61. set smarttab " backspace tabs where appropriate even if spaces
  62. set softtabstop=2 " let backspace delete by indents
  63. set textwidth=80 " try to keep text within 80 characters
  64. set colorcolumn=+1 " mark out the limits of the textwidth
  65. set fillchars=fold:.
  66. """"""""
  67. "" UI - Colours
  68. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  69. set t_Co=16
  70. " set colour for folded lines
  71. highlight Folded term=none cterm=none ctermfg=darkred ctermbg=none
  72. " show trailing white space
  73. highlight ExtraWhitespace ctermfg=red ctermbg=red guifg=red guibg=red
  74. " reverse indent guides highlighting
  75. highlight IndentGuidesOdd ctermbg=darkgrey
  76. highlight IndentGuidesEven ctermbg=black
  77. """"""""
  78. "" UI - Statusline (now using powerline)
  79. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  80. """"""""
  81. "" UI - Code Folding
  82. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  83. set foldmethod=indent
  84. set foldlevel=10
  85. set foldtext=FoldText()
  86. """"""""
  87. "" Key Remaps
  88. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  89. " More convenient escape
  90. inoremap kj <ESC>
  91. inoremap jk <ESC>
  92. " Add extra lines up and down
  93. nnoremap <leader>j o<Esc>k
  94. nnoremap <leader>k O<Esc>j
  95. " Edit .vimrc
  96. "nnoremap <leader>v :e $MYVIMRC<CR>
  97. " Clear trailing white space
  98. nnoremap <silent> <leader>$ :%s/\s\+$//g<CR>
  99. " Convert tabs to spaces
  100. nnoremap <silent> <leader><TAB> :%s/<TAB>/ /g<CR>
  101. " Space as a Folding toggle in normal mode.
  102. nnoremap <silent> <space> @=(foldlevel('.')?'za':"\<space>")<CR>
  103. " Backspace to clear current search (and stop highlighting)
  104. nnoremap <silent> <backspace> :call ClearSearch()<CR>
  105. nnoremap <silent> <leader>n :set number!<CR>
  106. nnoremap <silent> <leader>w :set wrap!<CR>
  107. " Toggle paste mode - no autoindenting of pasted material
  108. nnoremap <silent> <leader>p :set paste! paste?<CR>
  109. " Toggle visible whitespace characters
  110. nnoremap <silent> <leader>l :set list!<CR>
  111. " Toggle keyboard layout
  112. nnoremap <silent> <leader><space> :call CycleKeymap()<CR>
  113. " Toggle scrollbind for moving multiple splits in sync together
  114. nnoremap <silent> <leader>sb :set scrollbind! scrollbind?<CR>
  115. " Toggle mouse support.
  116. "nnoremap <silent> <leader>m :call ToggleMouse()<CR>
  117. " Toggle NERDTree file browser
  118. nnoremap <silent> <leader>d :NERDTreeToggle<CR>
  119. " Toggle Commenting out lines with NERDCommenter
  120. nnoremap <silent> <leader>, :call NERDComment("n", "toggle")<CR>
  121. vnoremap <silent> <leader>, <ESC>:call NERDComment("x", "toggle")<CR>
  122. " Git commands with Fugitive
  123. nnoremap <silent> <leader>gc :Gcommit -v<CR>
  124. "nnoremap <silent> <leader>gl :Glog<CR><CR>
  125. nnoremap <silent> <leader>gap :Git add -p<CR>
  126. " Function definition jumping with CtrlP's Funky plugin
  127. nnoremap <silent> <C-F> :CtrlPFunky<CR>
  128. """"""""
  129. "" Key Remaps - Movement and Windows
  130. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  131. " jump to beginning and end of line easier
  132. nmap H ^
  133. nmap L $
  134. vmap H ^
  135. vmap L $
  136. " Smart way to move between windows
  137. "nnoremap <C-j> <C-w>j
  138. "nnoremap <C-k> <C-w>k
  139. "nnoremap <C-h> <C-w>h
  140. "nnoremap <C-l> <C-w>l
  141. " mapping to make movements operate on 1 screen line in wrap mode
  142. "onoremap <silent> <expr> j ScreenMovement("j")
  143. "onoremap <silent> <expr> k ScreenMovement("k")
  144. "onoremap <silent> <expr> 0 ScreenMovement("0")
  145. "onoremap <silent> <expr> ^ ScreenMovement("^")
  146. "onoremap <silent> <expr> $ ScreenMovement("$")
  147. "nnoremap <silent> <expr> j ScreenMovement("j")
  148. "nnoremap <silent> <expr> k ScreenMovement("k")
  149. "nnoremap <silent> <expr> 0 ScreenMovement("0")
  150. "nnoremap <silent> <expr> ^ ScreenMovement("^")
  151. "nnoremap <silent> <expr> $ ScreenMovement("$")
  152. "xnoremap <silent> <expr> j ScreenMovement("j")
  153. "xnoremap <silent> <expr> k ScreenMovement("k")
  154. "xnoremap <silent> <expr> 0 ScreenMovement("0")
  155. "xnoremap <silent> <expr> ^ ScreenMovement("^")
  156. "xnoremap <silent> <expr> $ ScreenMovement("$")
  157. """"""""
  158. "" Plugin options
  159. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  160. """"""""" Powerline
  161. set rtp+=~/dotfiles/powerline/powerline/powerline/bindings/vim
  162. set noshowmode " don't show e.g. --INSERT-- since we're using powerline
  163. """"""""" Tagbar
  164. let g:tagbar_autoclose = 1 " close sidebar after we go to selection
  165. """"""""" Indent Guides
  166. let g:indent_guides_auto_colors = 0
  167. let g:indent_guides_guide_size = 2
  168. """"""""" Syntastic
  169. let g:syntastic_auto_jump = 1
  170. """"""""" CtrlP
  171. "let g:ctrlp_working_path_mode = 'rw' let's try out ra
  172. let g:ctrlp_extensions = ['funky']
  173. """"""""" Vdebug
  174. let g:vdebug_options = {
  175. \ 'break_on_open' : 0,
  176. \ 'watch_window_style' : 'compact',
  177. \ 'path_maps' : {"/usr": "/jails/alcatraz/usr"}
  178. \ }
  179. """"""""" Vim Markdown
  180. let g:vim_markdown_folding_disabled = 1
  181. """"""""" Sparkup
  182. let g:sparkupNextMapping = '<leader>n' " resolve conflict with vim-multiple-cursors
  183. """"""""
  184. "" Functions
  185. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  186. function! FoldText()
  187. let line = getline(v:foldstart)
  188. let indent = indent(v:foldstart)
  189. let indentOnly = strpart(line, 0, indent-1)
  190. let linecount = v:foldend+1 - v:foldstart
  191. let foldtext = '+'.indentOnly.'... ('.linecount.' More lines)'
  192. return foldtext
  193. endfunction
  194. function! ToggleMouse()
  195. if &mouse == 'a'
  196. set mouse=
  197. echo "Mouse usage disabled"
  198. else
  199. set mouse=a
  200. echo "Mouse usage enabled"
  201. endif
  202. endfunction
  203. function! ScreenMovement(movement)
  204. if &wrap
  205. return "g" . a:movement
  206. else
  207. return a:movement
  208. endif
  209. endfunction
  210. function! ClearSearch()
  211. if (@/ != "")
  212. let @/=""
  213. redraw
  214. endif
  215. endfunction
  216. function! CycleKeymap()
  217. if has('keymap')
  218. if (&keymap == '')
  219. set keymap=colemak
  220. echo "Colemak keymap selected"
  221. elseif (&keymap == 'colemak')
  222. set keymap=dvorak
  223. echo "Dvorak keymap selected"
  224. else
  225. set keymap=
  226. echo "Qwerty keymap selected"
  227. endif
  228. else
  229. echo "Keymaps not supported"
  230. endif
  231. endfunction
  232. function! MapQfPrevNext()
  233. exec "nmap <silent> <tab> :cprev<CR>"
  234. exec "nmap <silent> <bslash> :cnext<CR>"
  235. endfunction
  236. function! UnmapQfPrefNext()
  237. exec "nunmap <tab>"
  238. exec "nunmap <bslash>"
  239. endfunction