vimrc.local 6.9 KB

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