vimrc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. set nocompatible "Don't have to try to be compatible with old vi
  2. """"""""
  3. "" Plugin Loading with Pathogen
  4. """""""""""""""""""""""""""""""""""""""""""""""""""
  5. call pathogen#infect()
  6. """"""""
  7. "" Start Up
  8. """""""""""""""""""""""""""""""""""""""""""""""""""
  9. function! StartUp()
  10. if 0 == argc()
  11. NERDTree
  12. end
  13. endfunction
  14. autocmd VimEnter * call StartUp()
  15. """"""""
  16. "" General Behaviours
  17. """""""""""""""""""""""""""""""""""""""""""""""""""
  18. set autoread "Read a file if it's changed from outside of vim
  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. "if version >= 700
  23. " set mouse=a "mouse support for 7.x, but don't use this if we use screen
  24. " because it has no effect, and then just becomes annoying for copy/paste
  25. "endif
  26. if has("autocmd")
  27. " Enable filetype specific features
  28. filetype plugin indent on
  29. " Clear existing autocmd
  30. autocmd!
  31. " When editing a file, always jump to the last cursor position
  32. autocmd BufReadPost *
  33. \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  34. \ exe "normal! g'\"" |
  35. \ endif
  36. " Source the vimrc file after saving it
  37. autocmd bufwritepost .vimrc source $MYVIMRC
  38. else
  39. set autoindent on
  40. endif
  41. """"""""
  42. "" Formatting
  43. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  44. set tabstop=4 "actual tab press distance
  45. set shiftwidth=4 "for autoindent
  46. set softtabstop=4 " let backspace delete indent
  47. set expandtab "change to single spaces
  48. set autoindent "use last line to set next indent
  49. set smartindent "guess harder, based on C-like language
  50. set wrap lbr "wrap long lines of text
  51. set backspace=eol,start,indent "backspace over everything
  52. """"""""
  53. "" UI - Colours
  54. """"""""""""""""""""""""""""""""""""""""""""""""""""""
  55. syntax enable
  56. set t_Co=16
  57. set background=dark
  58. colorscheme solarized
  59. hi Folded ctermfg=darkred "set colour for folded lines
  60. if version >= 730
  61. set colorcolumn=80
  62. endif
  63. """"""""
  64. "" UI - Numbering
  65. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  66. set number "show line numbers
  67. set ruler "show row,col count in status line
  68. set laststatus=2 "always show a status line
  69. if version >= 730
  70. set relativenumber "current line always 0 (requires 7.3 and up)
  71. endif
  72. """"""""
  73. "" UI - Code Folding
  74. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  75. set foldmethod=indent
  76. set foldlevel=5
  77. set foldtext=MyFoldText()
  78. function! MyFoldText()
  79. let line = getline(v:foldstart)
  80. let indent = indent(v:foldstart)
  81. let indentOnly = strpart(line, 0, indent-1)
  82. let linecount = v:foldend+1 - v:foldstart
  83. let plural = ""
  84. if linecount != 1
  85. let plural = "s"
  86. endif
  87. let foldtext = '+'.indentOnly.'... ('.linecount.' More lines)'
  88. return foldtext
  89. endfunction
  90. """"""""
  91. "" UI - Search
  92. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  93. set hlsearch "make searches highlighted
  94. set incsearch "vim will search as you type!
  95. set ignorecase "ignore case for searches
  96. set smartcase " well, unless a user puts in uppercase search characters
  97. set magic "enables wildcard searching
  98. """"""""
  99. "" Key Remaps and Shortcuts
  100. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  101. let mapleader = "," "Leader key lets you make more kinds of shortcuts!
  102. " More convenient escape
  103. imap ii <Esc>
  104. imap II <Esc>
  105. " Add extra lines up and down
  106. map <leader>j o<Esc>k
  107. map <leader>k O<Esc>j
  108. """"""""
  109. "" Key Remaps - Movement and Windows
  110. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  111. " Smart way to move btw. windows
  112. map <C-j> <C-W>j
  113. map <C-k> <C-W>k
  114. map <C-h> <C-W>h
  115. map <C-l> <C-W>l
  116. " window resizing
  117. noremap + <C-w>10+
  118. noremap - <C-w>10-
  119. " mapping to make movements operate on 1 screen line in wrap mode
  120. function! ScreenMovement(movement)
  121. if &wrap
  122. return "g" . a:movement
  123. else
  124. return a:movement
  125. endif
  126. endfunction
  127. onoremap <silent> <expr> j ScreenMovement("j")
  128. onoremap <silent> <expr> k ScreenMovement("k")
  129. onoremap <silent> <expr> 0 ScreenMovement("0")
  130. onoremap <silent> <expr> ^ ScreenMovement("^")
  131. onoremap <silent> <expr> $ ScreenMovement("$")
  132. nnoremap <silent> <expr> j ScreenMovement("j")
  133. nnoremap <silent> <expr> k ScreenMovement("k")
  134. nnoremap <silent> <expr> 0 ScreenMovement("0")
  135. nnoremap <silent> <expr> ^ ScreenMovement("^")
  136. """"""""
  137. "" Plugin options
  138. """"""""""""""""""""""""""""""""""""""""""""""""""""""""
  139. " let g:NERDTreeQuitOnOpen = 1
  140. let g:SuperTabDefaultCompletionType = "context"