vimrc.local 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. if has("autocmd")
  2. " Show trailing white space
  3. autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
  4. autocmd InsertLeave * match ExtraWhitespace /\s\+$/
  5. " Source the vimrc file after saving it
  6. autocmd BufWritePost .vimrc.local nested source $MYVIMRC
  7. " Fugitive - Go up to previous tree object while exploring git tree with '..'
  8. autocmd User fugitive
  9. \ if fugitive#buffer().type() =~# '^\%(tree\|blob\)$' |
  10. \ nnoremap <buffer> .. :edit %:h<CR> |
  11. \ endif
  12. " Fugitive - Delete buffers when they are not active
  13. autocmd BufReadPost fugitive://* set bufhidden=delete
  14. endif
  15. """"""""
  16. "" Tabs and Text Formatting
  17. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  18. set tabstop=2 " actual tab press distance
  19. set shiftround " indent to nearest tabstops
  20. set shiftwidth=2 " amount to indent with > and <
  21. set smarttab " backspace tabs where appropriate even if spaces
  22. set softtabstop=2 " let backspace delete by indents
  23. set textwidth=80 " try to keep text within 80 characters
  24. set colorcolumn=+1 " mark out the limits of the textwidth
  25. """"""""
  26. "" UI - Colours
  27. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  28. set t_Co=16
  29. " show trailing white space
  30. highlight ExtraWhitespace ctermfg=red ctermbg=red guifg=red guibg=red
  31. " reverse indent guides highlighting
  32. highlight IndentGuidesOdd ctermbg=darkgrey
  33. highlight IndentGuidesEven ctermbg=black
  34. """"""""
  35. "" UI - Statusline (now using powerline)
  36. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  37. """"""""
  38. "" UI - Code Folding
  39. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  40. set foldmethod=indent
  41. set foldlevel=10
  42. """"""""
  43. "" Key Remaps
  44. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  45. " More convenient escape
  46. inoremap kj <ESC>
  47. inoremap jk <ESC>
  48. " Add extra lines up and down
  49. nnoremap <leader>j o<Esc>k
  50. nnoremap <leader>k O<Esc>j
  51. " Edit .vimrc
  52. "nnoremap <leader>v :e $MYVIMRC<CR>
  53. " Clear trailing white space
  54. nnoremap <silent> <leader>$ :%s/\s\+$//g<CR>
  55. " Convert tabs to spaces
  56. nnoremap <silent> <leader><TAB> :%s/<TAB>/ /g<CR>
  57. " Backspace to clear current search (and stop highlighting)
  58. nnoremap <silent> <backspace> :call ClearSearch()<CR>
  59. nnoremap <silent> <leader>n :set number!<CR>
  60. nnoremap <silent> <leader>w :set wrap!<CR>
  61. " Toggle paste mode - no autoindenting of pasted material
  62. nnoremap <silent> <leader>p :set paste! paste?<CR>
  63. " Toggle visible whitespace characters
  64. nnoremap <silent> <leader>l :set list!<CR>
  65. " Toggle keyboard layout
  66. nnoremap <silent> <leader><space> :call CycleKeymap()<CR>
  67. " Toggle scrollbind for moving multiple splits in sync together
  68. nnoremap <silent> <leader>sb :set scrollbind! scrollbind?<CR>
  69. " Toggle mouse support.
  70. "nnoremap <silent> <leader>m :call ToggleMouse()<CR>
  71. " Toggle NERDTree file browser
  72. nnoremap <silent> <leader>d :NERDTreeToggle<CR>
  73. " Toggle Commenting out lines with NERDCommenter
  74. nnoremap <silent> <leader>, :call NERDComment("n", "toggle")<CR>
  75. vnoremap <silent> <leader>, <ESC>:call NERDComment("x", "toggle")<CR>
  76. " Git commands with Fugitive
  77. nnoremap <silent> <leader>gc :Gcommit -v<CR>
  78. "nnoremap <silent> <leader>gl :Glog<CR><CR>
  79. nnoremap <silent> <leader>gap :Git add -p<CR>
  80. " Function definition jumping with CtrlP's Funky plugin
  81. nnoremap <silent> <C-F> :CtrlPFunky<CR>
  82. """"""""
  83. "" Key Remaps - Movement and Windows
  84. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  85. " jump to beginning and end of line easier
  86. nmap H ^
  87. nmap L $
  88. vmap H ^
  89. vmap L $
  90. " Smart way to move between windows
  91. "nnoremap <C-j> <C-w>j
  92. "nnoremap <C-k> <C-w>k
  93. "nnoremap <C-h> <C-w>h
  94. "nnoremap <C-l> <C-w>l
  95. " mapping to make movements operate on 1 screen line in wrap mode
  96. "onoremap <silent> <expr> j ScreenMovement("j")
  97. "onoremap <silent> <expr> k ScreenMovement("k")
  98. "onoremap <silent> <expr> 0 ScreenMovement("0")
  99. "onoremap <silent> <expr> ^ ScreenMovement("^")
  100. "onoremap <silent> <expr> $ ScreenMovement("$")
  101. "nnoremap <silent> <expr> j ScreenMovement("j")
  102. "nnoremap <silent> <expr> k ScreenMovement("k")
  103. "nnoremap <silent> <expr> 0 ScreenMovement("0")
  104. "nnoremap <silent> <expr> ^ ScreenMovement("^")
  105. "nnoremap <silent> <expr> $ ScreenMovement("$")
  106. "xnoremap <silent> <expr> j ScreenMovement("j")
  107. "xnoremap <silent> <expr> k ScreenMovement("k")
  108. "xnoremap <silent> <expr> 0 ScreenMovement("0")
  109. "xnoremap <silent> <expr> ^ ScreenMovement("^")
  110. "xnoremap <silent> <expr> $ ScreenMovement("$")
  111. """"""""
  112. "" Plugin options
  113. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  114. """"""""" Powerline
  115. set rtp+=~/dotfiles/powerline/powerline/powerline/bindings/vim
  116. set noshowmode " don't show e.g. --INSERT-- since we're using powerline
  117. """"""""" Tagbar
  118. let g:tagbar_autoclose = 1 " close sidebar after we go to selection
  119. """"""""" Indent Guides
  120. let g:indent_guides_auto_colors = 0
  121. let g:indent_guides_guide_size = 2
  122. """"""""" Syntastic
  123. let g:syntastic_auto_jump = 1
  124. """"""""" CtrlP
  125. "let g:ctrlp_working_path_mode = 'rw' let's try out ra
  126. let g:ctrlp_extensions = ['funky']
  127. """"""""" Vdebug
  128. let g:vdebug_options = {
  129. \ 'break_on_open' : 0,
  130. \ 'watch_window_style' : 'compact',
  131. \ 'path_maps' : {"/usr": "/jails/alcatraz/usr"}
  132. \ }
  133. """"""""" Vim Markdown
  134. let g:vim_markdown_folding_disabled = 1
  135. """"""""" Sparkup
  136. let g:sparkupNextMapping = '<leader>n' " resolve conflict with vim-multiple-cursors
  137. """"""""
  138. "" Functions
  139. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  140. function! ToggleMouse()
  141. if &mouse == 'a'
  142. set mouse=
  143. echo "Mouse usage disabled"
  144. else
  145. set mouse=a
  146. echo "Mouse usage enabled"
  147. endif
  148. endfunction
  149. function! ScreenMovement(movement)
  150. if &wrap
  151. return "g" . a:movement
  152. else
  153. return a:movement
  154. endif
  155. endfunction
  156. function! ClearSearch()
  157. if (@/ != "")
  158. let @/=""
  159. redraw
  160. endif
  161. endfunction
  162. function! CycleKeymap()
  163. if has('keymap')
  164. if (&keymap == '')
  165. set keymap=colemak
  166. echo "Colemak keymap selected"
  167. elseif (&keymap == 'colemak')
  168. set keymap=dvorak
  169. echo "Dvorak keymap selected"
  170. else
  171. set keymap=
  172. echo "Qwerty keymap selected"
  173. endif
  174. else
  175. echo "Keymaps not supported"
  176. endif
  177. endfunction
  178. for filePath in split(globpath('~/dotfiles/vim/settings', '*.vim'), '\n')
  179. execute 'source' filePath
  180. endfor