vimrc.local 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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 t_Co=256
  35. "set ttymouse=xterm2 " Needed to allow mouse support to resize windows
  36. "set ttyfast " Allows for instantaneous refresh when using the mouse to select
  37. " Have not gotten solarized to work properly yet highlighting of cursor,
  38. " width limit line and number and fold columns are wrong.
  39. """"""""
  40. "" UI - Code Folding
  41. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  42. set foldmethod=indent
  43. set foldlevel=10
  44. """"""""
  45. "" Key Remaps
  46. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  47. " More convenient escape
  48. inoremap kj <ESC>
  49. inoremap jk <ESC>
  50. " Add extra lines up and down
  51. nnoremap <leader>j o<Esc>k
  52. nnoremap <leader>k O<Esc>j
  53. " Get rid of spf13-vim's python/json mapping, which interferes with the above
  54. nunmap <leader>jt
  55. " Clear trailing white space
  56. nnoremap <silent> <leader>$ :%s/\s\+$//g<CR>
  57. " Convert tabs to spaces
  58. nnoremap <silent> <leader><TAB> :%s/<TAB>/ /g<CR>
  59. " Backspace to clear current search (and stop highlighting)
  60. nnoremap <silent> <backspace> :call ClearSearch()<CR>
  61. function! ClearSearch()
  62. if (@/ != "")
  63. let @/=""
  64. redraw
  65. endif
  66. endfunction
  67. nnoremap <silent> <leader>w :set wrap!<CR>
  68. " Toggle paste mode - no autoindenting of pasted material
  69. nnoremap <silent> <leader>p :set paste! paste?<CR>
  70. " Toggle visible whitespace characters
  71. nnoremap <silent> <leader>l :set list!<CR>
  72. " Toggle keyboard layout
  73. "nnoremap <silent> <leader><space> :call CycleKeymap()<CR>
  74. "function! CycleKeymap()
  75. "if has('keymap')
  76. "if (&keymap == '')
  77. "set keymap=colemak
  78. "echo 'Colemak keymap selected'
  79. "elseif (&keymap == 'colemak')
  80. "set keymap=dvorak
  81. "echo 'Dvorak keymap selected'
  82. "else
  83. "set keymap=
  84. "echo 'Qwerty keymap selected'
  85. "endif
  86. "else
  87. "echo 'Keymaps not supported'
  88. "endif
  89. "endfunction
  90. " Toggle scrollbind for moving multiple splits in sync together
  91. nnoremap <silent> <leader>sb :set scrollbind! scrollbind?<CR>
  92. " Toggle mouse support.
  93. nnoremap <silent> <leader>m :call ToggleMouse()<CR>
  94. function! ToggleMouse()
  95. if &mouse == 'a'
  96. set mouse=
  97. echo 'Mouse usage disabled'
  98. else
  99. set mouse=a
  100. echo 'Mouse usage enabled'
  101. endif
  102. endfunction
  103. " Toggle NERDTree file browser
  104. nnoremap <silent> <leader>d :NERDTreeMirrorToggle<CR>
  105. " Toggle Commenting out lines with NERDCommenter
  106. nnoremap <silent> <leader>, :call NERDComment("n", "toggle")<CR>
  107. vnoremap <silent> <leader>, <ESC>:call NERDComment("x", "toggle")<CR>
  108. " Git commands with Fugitive
  109. nnoremap <silent> <leader>gc :Gcommit -v<CR>
  110. nnoremap <silent> <leader>gl :Glog<CR><CR>
  111. nnoremap <silent> <leader>gap :Git add -p<CR>
  112. " Function definition jumping with CtrlP's Funky plugin
  113. nnoremap <silent> <C-F> :CtrlPFunky<CR>
  114. """"""""
  115. "" Key Remaps - Movement and Windows
  116. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  117. " jump to beginning and end of line easier
  118. nmap H ^
  119. nmap L $
  120. vmap H ^
  121. vmap L $
  122. " Smart way to move between windows, without spf13-vim's vertical maximisation.
  123. "nnoremap <C-j> <C-w>j
  124. "nnoremap <C-k> <C-w>k
  125. "nnoremap <C-h> <C-w>h
  126. "nnoremap <C-l> <C-w>l
  127. " mapping to make movements operate on 1 screen line in wrap mode
  128. "onoremap <silent> <expr> j ScreenMovement("j")
  129. "onoremap <silent> <expr> k ScreenMovement("k")
  130. "onoremap <silent> <expr> 0 ScreenMovement("0")
  131. "onoremap <silent> <expr> ^ ScreenMovement("^")
  132. "onoremap <silent> <expr> $ ScreenMovement("$")
  133. "nnoremap <silent> <expr> j ScreenMovement("j")
  134. "nnoremap <silent> <expr> k ScreenMovement("k")
  135. "nnoremap <silent> <expr> 0 ScreenMovement("0")
  136. "nnoremap <silent> <expr> ^ ScreenMovement("^")
  137. "nnoremap <silent> <expr> $ ScreenMovement("$")
  138. "xnoremap <silent> <expr> j ScreenMovement("j")
  139. "xnoremap <silent> <expr> k ScreenMovement("k")
  140. "xnoremap <silent> <expr> 0 ScreenMovement("0")
  141. "xnoremap <silent> <expr> ^ ScreenMovement("^")
  142. "xnoremap <silent> <expr> $ ScreenMovement("$")
  143. "function! ScreenMovement(movement)
  144. "if &wrap
  145. "return 'g' . a:movement
  146. "else
  147. "return a:movement
  148. "endif
  149. "endfunction
  150. """"""""
  151. "" Plugin options
  152. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  153. """"""""" Powerline
  154. set rtp+=~/dotfiles/powerline/powerline/powerline/bindings/vim
  155. set noshowmode " don't show e.g. --INSERT-- since we're using powerline
  156. """"""""" Tagbar
  157. let g:tagbar_autoclose = 1 " close sidebar after we go to selection
  158. """"""""" Indent Guides
  159. let g:indent_guides_auto_colors = 0
  160. let g:indent_guides_guide_size = 2
  161. " reverse indent guides highlighting
  162. "highlight IndentGuidesOdd ctermbg=grey
  163. highlight IndentGuidesEven ctermbg=black
  164. """"""""" Syntastic
  165. let g:syntastic_auto_jump = 1
  166. """"""""" CtrlP
  167. "let g:ctrlp_working_path_mode = 'rw' let's try out ra
  168. let g:ctrlp_extensions = ['funky']
  169. """"""""" Vdebug
  170. let g:vdebug_options = {
  171. \ 'break_on_open' : 0,
  172. \ 'watch_window_style' : 'compact',
  173. \ 'path_maps' : {"/usr": "/jails/alcatraz/usr"}
  174. \ }
  175. """"""""" Vim Markdown
  176. let g:vim_markdown_folding_disabled = 1
  177. """"""""" PIV
  178. let g:DisableAutoPHPFolding = 1
  179. """"""""
  180. "" Functions
  181. for filePath in split(globpath('~/dotfiles/vim/settings', '*.vim'), '\n')
  182. execute 'source' filePath
  183. endfor