vimrc 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. set nocompatible "Don't have to try to be compatible with old vi
  2. set encoding=utf-8
  3. """"""""
  4. "" Plugin Loading with Pathogen
  5. """""""""""""""""""""""""""""""""""""""""""""""""""
  6. call pathogen#infect()
  7. call pathogen#helptags()
  8. """"""""
  9. "" Environment
  10. """""""""""""""""""""""""""""""""""""""""""""""""""
  11. " Determine what kind of machine we're on e.g. Linux, Darwin, Win(?)
  12. if has("unix")
  13. " remove the newline character from the uname command
  14. let s:uname = substitute(system("uname"), "\n", "", "")
  15. endif
  16. """"""""
  17. "" General Behaviours
  18. """""""""""""""""""""""""""""""""""""""""""""""""""
  19. set splitbelow "New splits appear below current window instead of above
  20. set splitright "New splits appear right of current window
  21. set ttyfast "Smooth movement
  22. " Persistent undo
  23. if has("persistent_undo")
  24. set undofile
  25. set undodir=~/.vimundo
  26. endif
  27. set ttymouse=xterm2
  28. if has("autocmd")
  29. " Enable filetype specific features
  30. filetype plugin indent on
  31. " Clear existing autocmd
  32. autocmd!
  33. " When editing a file, always jump to the last cursor position
  34. autocmd BufReadPost *
  35. \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  36. \ exe "normal! g'\"" |
  37. \ endif
  38. autocmd WinEnter * setlocal cursorline
  39. autocmd WinLeave * setlocal nocursorline
  40. " Source the vimrc file after saving it
  41. autocmd bufwritepost .vimrc source $MYVIMRC
  42. " A way to specify startup actions
  43. autocmd VimEnter * call StartUp()
  44. " if the last window is NERDTree, then close Vim
  45. "autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
  46. else
  47. set autoindent on
  48. endif
  49. """"""""
  50. "" Start Up
  51. """""""""""""""""""""""""""""""""""""""""""""""""""
  52. function! StartUp()
  53. " Stuff in here will be called by autocmd below
  54. " example, start NERDTree if vim called with no arguments
  55. if 0 == argc()
  56. NERDTree
  57. end
  58. endfunction
  59. """"""""
  60. "" Tabs and Text Formatting
  61. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  62. set expandtab " change to single spaces
  63. set tabstop=2 " actual tab press distance
  64. set shiftround " indent to nearest tabstops
  65. set shiftwidth=2 " amount to indent with > and <
  66. set smarttab " backspace tabs where appropriate even if spaces
  67. set softtabstop=2 " let backspace delete indent
  68. set wrap lbr " wrap long lines of text
  69. set backspace=eol,start,indent "backspace over everything
  70. set textwidth=80
  71. set colorcolumn=+1 " mark out the limits of the textwidth
  72. """"""""
  73. "" UI - Colours
  74. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  75. syntax enable
  76. colorscheme solarized
  77. set t_Co=16
  78. set background=dark
  79. hi Folded term=none cterm=none ctermfg=darkred ctermbg=none "set colour for folded lines
  80. """"""""
  81. "" UI - Numbering
  82. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  83. set number " show line numbers
  84. "set relativenumber " current line always 0 (requires 7.3 and up)
  85. """"""""
  86. "" UI - Statusline (now using powerline)
  87. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  88. set laststatus=2 " status line is second last line (not hidden by commands)
  89. """"""""
  90. "" UI - Code Folding
  91. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  92. set foldmethod=indent
  93. set foldlevel=10
  94. set foldtext=FoldText()
  95. """"""""
  96. "" UI - Search
  97. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  98. set hlsearch " make searches highlighted
  99. set incsearch " vim will search as you type!
  100. set ignorecase " ignore case for searches
  101. set smartcase " well, unless a user puts in uppercase search characters
  102. set magic " enables wildcard searching
  103. """"""""
  104. "" Key Remaps
  105. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  106. let mapleader = "," "Leader key lets you make more kinds of shortcuts!
  107. " More convenient escape
  108. imap ii <Esc>
  109. imap II <Esc>
  110. " Yank to end of line, like D
  111. nmap Y y$
  112. " Add extra lines up and down
  113. nmap <leader>j o<Esc>k
  114. nmap <leader>k O<Esc>j
  115. " Edit .vimrc
  116. nmap <leader>v :e $MYVIMRC<CR>
  117. nmap <silent> <leader>n :set number!<CR>
  118. nmap <silent> <leader>w :set wrap!<CR>
  119. " Toggle paste mode - no autoindenting of pasted material
  120. nmap <silent> <leader>p :set paste! paste?<CR>
  121. " Toggle visible whitespace characters
  122. nmap <silent> <leader>l :set list!<CR>
  123. " Toggle scrollbind for moving multiple splits in sync together
  124. nmap <silent> <leader>s :set scrollbind! scrollbind?<CR>
  125. " Toggle mouse support.
  126. nmap <silent> <leader>m :call ToggleMouse()<CR>
  127. " Toggle NERDTree file browser
  128. nmap <silent> <leader>d :NERDTreeToggle<CR>
  129. " Toggle Commenting out lines with NERDCommenter
  130. nmap <silent> <leader>, :call NERDComment("n", "toggle")<CR>
  131. vmap <silent> <leader>, <ESC>:call NERDComment("x", "toggle")<CR>
  132. " Traverse undo tree with Gundo!
  133. nmap <silent> <leader>u :GundoToggle<CR>
  134. " Git blame with Fugitive!
  135. nmap <silent> <leader>b :Gblame<CR>
  136. " Code heirarchy with Tagbar!
  137. nmap <silent> <leader>t :TagbarToggle<CR>
  138. """"""""
  139. "" Key Remaps - Movement and Windows
  140. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  141. " jump to beginning and end of line easier
  142. nmap H ^
  143. nmap L $
  144. " Smart way to move between windows
  145. nmap <C-j> <C-W>j
  146. nmap <C-k> <C-W>k
  147. nmap <C-h> <C-W>h
  148. nmap <C-l> <C-W>l
  149. " mapping to make movements operate on 1 screen line in wrap mode
  150. onoremap <silent> <expr> j ScreenMovement("j")
  151. onoremap <silent> <expr> k ScreenMovement("k")
  152. onoremap <silent> <expr> 0 ScreenMovement("0")
  153. onoremap <silent> <expr> ^ ScreenMovement("^")
  154. onoremap <silent> <expr> $ ScreenMovement("$")
  155. nnoremap <silent> <expr> j ScreenMovement("j")
  156. nnoremap <silent> <expr> k ScreenMovement("k")
  157. nnoremap <silent> <expr> 0 ScreenMovement("0")
  158. nnoremap <silent> <expr> ^ ScreenMovement("^")
  159. nnoremap <silent> <expr> $ ScreenMovement("$")
  160. """"""""
  161. "" Plugin options
  162. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  163. """"""""" NERDTree
  164. let g:NERDTreeQuitOnOpen = 1
  165. if s:uname == "Darwin"
  166. let g:NERDTreeDirArrows=0 " Problems showing NERDTree arrows in OS X
  167. endif
  168. """"""""" Gundo
  169. let g:gundo_width = 30
  170. let g:gundo_preview_height = 12
  171. let g:gundo_preview_bottom = 1
  172. """"""""" Surround
  173. "let g:loaded_surround = 1 " Disable tpope's surround
  174. let g:did_surrounding = 1 " Disable msander's surrounding (surround fork)
  175. """"""""" HTML Autoclose Tag
  176. " We are instead trying out sparkup
  177. let g:mapped_auto_closetag = 1 " Disable html autoclose plugin
  178. let g:did_auto_closetag = 1 " Disable html autoclose plugin
  179. """"""""" Powerline
  180. let g:Powerline_symbols = 'compatible' " alternatives: fancy, unicode
  181. """"""""
  182. "" Functions, the Givers of Power (in order of use)
  183. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  184. function! FoldText()
  185. let line = getline(v:foldstart)
  186. let indent = indent(v:foldstart)
  187. let indentOnly = strpart(line, 0, indent-1)
  188. let linecount = v:foldend+1 - v:foldstart
  189. let foldtext = '+'.indentOnly.'... ('.linecount.' More lines)'
  190. return foldtext
  191. endfunction
  192. function! ToggleMouse()
  193. if &mouse == 'a'
  194. set mouse=
  195. echo "Mouse usage disabled"
  196. else
  197. set mouse=a
  198. echo "Mouse usage enabled"
  199. endif
  200. endfunction
  201. function! ScreenMovement(movement)
  202. if &wrap
  203. return "g" . a:movement
  204. else
  205. return a:movement
  206. endif
  207. endfunction