Added vagrant/puppet config (created with https://puphpet.com)
[memberdb.git] / files / dot / .vimrc
1 set rtp+=$GOROOT/misc/vim
2
3 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
4 " Maintainer:
5 "       Amir Salihefendic
6 "       http://amix.dk - amix@amix.dk
7 "
8 " Version:
9 "       5.0 - 29/05/12 15:43:36
10 "
11 " Blog_post:
12 "       http://amix.dk/blog/post/19691#The-ultimate-Vim-configuration-on-Github
13 "
14 " Awesome_version:
15 "       Get this config, nice color schemes and lots of plugins!
16 "
17 "       Install the awesome version from:
18 "
19 "           https://github.com/amix/vimrc
20 "
21 " Syntax_highlighted:
22 "       http://amix.dk/vim/vimrc.html
23 "
24 " Raw_version:
25 "       http://amix.dk/vim/vimrc.txt
26 "
27 " Sections:
28 "    -> General
29 "    -> VIM user interface
30 "    -> Colors and Fonts
31 "    -> Files and backups
32 "    -> Text, tab and indent related
33 "    -> Visual mode related
34 "    -> Moving around, tabs and buffers
35 "    -> Status line
36 "    -> Editing mappings
37 "    -> vimgrep searching and cope displaying
38 "    -> Spell checking
39 "    -> Misc
40 "    -> Helper functions
41 "
42 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
43
44
45 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
46 " => General
47 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
48 " Sets how many lines of history VIM has to remember
49 set history=700
50
51 " Enable filetype plugins
52 filetype plugin on
53 filetype indent on
54
55 " Set to auto read when a file is changed from the outside
56 set autoread
57
58 " With a map leader it's possible to do extra key combinations
59 " like <leader>w saves the current file
60 let mapleader = ","
61 let g:mapleader = ","
62
63 " Fast saving
64 nmap <leader>w :w!<cr>
65
66 " :W sudo saves the file
67 " (useful for handling the permission-denied error)
68 command W w !sudo tee % > /dev/null
69
70
71 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
72 " => VIM user interface
73 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
74 " Set 7 lines to the cursor - when moving vertically using j/k
75 set so=7
76
77 " Turn on the WiLd menu
78 set wildmenu
79
80 " Ignore compiled files
81 set wildignore=*.o,*~,*.pyc
82 if has("win16") || has("win32")
83     set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
84 else
85     set wildignore+=.git\*,.hg\*,.svn\*
86 endif
87
88 "Always show current position
89 set ruler
90
91 " Height of the command bar
92 set cmdheight=2
93
94 " A buffer becomes hidden when it is abandoned
95 set hid
96
97 " Configure backspace so it acts as it should act
98 set backspace=eol,start,indent
99 set whichwrap+=<,>,h,l
100
101 " Ignore case when searching
102 set ignorecase
103
104 " When searching try to be smart about cases
105 set smartcase
106
107 " Highlight search results
108 set hlsearch
109
110 " Makes search act like search in modern browsers
111 set incsearch
112
113 " Don't redraw while executing macros (good performance config)
114 set lazyredraw
115
116 " For regular expressions turn magic on
117 set magic
118
119 " Show matching brackets when text indicator is over them
120 set showmatch
121 " How many tenths of a second to blink when matching brackets
122 set mat=2
123
124 " No annoying sound on errors
125 set noerrorbells
126 set novisualbell
127 set t_vb=
128 set tm=500
129
130 " Add a bit extra margin to the left
131 set foldcolumn=1
132
133
134 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
135 " => Colors and Fonts
136 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
137 " Enable syntax highlighting
138 syntax enable
139
140 try
141     colorscheme desert
142 catch
143 endtry
144
145 set background=dark
146
147 " Set extra options when running in GUI mode
148 if has("gui_running")
149     set guioptions-=T
150     set guioptions-=e
151     set t_Co=256
152     set guitablabel=%M\ %t
153 endif
154
155 " Set utf8 as standard encoding and en_US as the standard language
156 set encoding=utf8
157
158 " Use Unix as the standard file type
159 set ffs=unix,dos,mac
160
161
162 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
163 " => Files, backups and undo
164 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
165 " Turn backup off, since most stuff is in SVN, git et.c anyway...
166 set nobackup
167 set nowb
168 set noswapfile
169
170
171 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
172 " => Text, tab and indent related
173 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
174 " Use spaces instead of tabs
175 set expandtab
176
177 " Be smart when using tabs ;)
178 set smarttab
179
180 " 1 tab == 4 spaces
181 set shiftwidth=4
182 set tabstop=4
183
184 " Linebreak on 500 characters
185 set lbr
186 set tw=500
187
188 set ai "Auto indent
189 set si "Smart indent
190 set wrap "Wrap lines
191
192
193 """"""""""""""""""""""""""""""
194 " => Visual mode related
195 """"""""""""""""""""""""""""""
196 " Visual mode pressing * or # searches for the current selection
197 " Super useful! From an idea by Michael Naumann
198 vnoremap <silent> * :call VisualSelection('f', '')<CR>
199 vnoremap <silent> # :call VisualSelection('b', '')<CR>
200
201
202 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
203 " => Moving around, tabs, windows and buffers
204 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
205 " Treat long lines as break lines (useful when moving around in them)
206 map j gj
207 map k gk
208
209 " Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)
210 map <space> /
211 map <c-space> ?
212
213 " Disable highlight when <leader><cr> is pressed
214 map <silent> <leader><cr> :noh<cr>
215
216 " Smart way to move between windows
217 map <C-j> <C-W>j
218 map <C-k> <C-W>k
219 map <C-h> <C-W>h
220 map <C-l> <C-W>l
221
222 " Close the current buffer
223 map <leader>bd :Bclose<cr>
224
225 " Close all the buffers
226 map <leader>ba :1,1000 bd!<cr>
227
228 " Useful mappings for managing tabs
229 map <leader>tn :tabnew<cr>
230 map <leader>to :tabonly<cr>
231 map <leader>tc :tabclose<cr>
232 map <leader>tm :tabmove
233 map <leader>t<leader> :tabnext
234
235 " Opens a new tab with the current buffer's path
236 " Super useful when editing files in the same directory
237 map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/
238
239 " Switch CWD to the directory of the open buffer
240 map <leader>cd :cd %:p:h<cr>:pwd<cr>
241
242 " Specify the behavior when switching between buffers
243 try
244   set switchbuf=useopen,usetab,newtab
245   set stal=2
246 catch
247 endtry
248
249 " Return to last edit position when opening files (You want this!)
250 autocmd BufReadPost *
251      \ if line("'\"") > 0 && line("'\"") <= line("$") |
252      \   exe "normal! g`\"" |
253      \ endif
254 " Remember info about open buffers on close
255 set viminfo^=%
256
257
258 """"""""""""""""""""""""""""""
259 " => Status line
260 """"""""""""""""""""""""""""""
261 " Always show the status line
262 set laststatus=2
263
264 " Format the status line
265 set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l
266
267
268 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
269 " => Editing mappings
270 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
271 " Remap VIM 0 to first non-blank character
272 map 0 ^
273
274 " Move a line of text using ALT+[jk] or Comamnd+[jk] on mac
275 nmap <M-j> mz:m+<cr>`z
276 nmap <M-k> mz:m-2<cr>`z
277 vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
278 vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z
279
280 if has("mac") || has("macunix")
281   nmap <D-j> <M-j>
282   nmap <D-k> <M-k>
283   vmap <D-j> <M-j>
284   vmap <D-k> <M-k>
285 endif
286
287 " Delete trailing white space on save, useful for Python and CoffeeScript ;)
288 func! DeleteTrailingWS()
289   exe "normal mz"
290   %s/\s\+$//ge
291   exe "normal `z"
292 endfunc
293 autocmd BufWrite *.py :call DeleteTrailingWS()
294 autocmd BufWrite *.coffee :call DeleteTrailingWS()
295
296
297 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
298 " => vimgrep searching and cope displaying
299 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
300 " When you press gv you vimgrep after the selected text
301 vnoremap <silent> gv :call VisualSelection('gv', '')<CR>
302
303 " Open vimgrep and put the cursor in the right position
304 map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left>
305
306 " Vimgreps in the current file
307 map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right>
308
309 " When you press <leader>r you can search and replace the selected text
310 vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>
311
312 " Do :help cope if you are unsure what cope is. It's super useful!
313 "
314 " When you search with vimgrep, display your results in cope by doing:
315 "   <leader>cc
316 "
317 " To go to the next search result do:
318 "   <leader>n
319 "
320 " To go to the previous search results do:
321 "   <leader>p
322 "
323 map <leader>cc :botright cope<cr>
324 map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
325 map <leader>n :cn<cr>
326 map <leader>p :cp<cr>
327
328
329 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
330 " => Spell checking
331 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
332 " Pressing ,ss will toggle and untoggle spell checking
333 map <leader>ss :setlocal spell!<cr>
334
335 " Shortcuts using <leader>
336 map <leader>sn ]s
337 map <leader>sp [s
338 map <leader>sa zg
339 map <leader>s? z=
340
341
342 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
343 " => Misc
344 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
345 " Remove the Windows ^M - when the encodings gets messed up
346 noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm
347
348 " Quickly open a buffer for scripbble
349 map <leader>q :e ~/buffer<cr>
350
351 " Toggle paste mode on and off
352 map <leader>pp :setlocal paste!<cr>
353
354
355
356 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
357 " => Helper functions
358 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
359 function! CmdLine(str)
360     exe "menu Foo.Bar :" . a:str
361     emenu Foo.Bar
362     unmenu Foo
363 endfunction
364
365 function! VisualSelection(direction, extra_filter) range
366     let l:saved_reg = @"
367     execute "normal! vgvy"
368
369     let l:pattern = escape(@", '\\/.*$^~[]')
370     let l:pattern = substitute(l:pattern, "\n$", "", "")
371
372     if a:direction == 'b'
373         execute "normal ?" . l:pattern . "^M"
374     elseif a:direction == 'gv'
375         call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.' . a:extra_filter)
376     elseif a:direction == 'replace'
377         call CmdLine("%s" . '/'. l:pattern . '/')
378     elseif a:direction == 'f'
379         execute "normal /" . l:pattern . "^M"
380     endif
381
382     let @/ = l:pattern
383     let @" = l:saved_reg
384 endfunction
385
386
387 " Returns true if paste mode is enabled
388 function! HasPaste()
389     if &paste
390         return 'PASTE MODE  '
391     en
392     return ''
393 endfunction
394
395 " Don't close window, when deleting a buffer
396 command! Bclose call <SID>BufcloseCloseIt()
397 function! <SID>BufcloseCloseIt()
398    let l:currentBufNum = bufnr("%")
399    let l:alternateBufNum = bufnr("#")
400
401    if buflisted(l:alternateBufNum)
402      buffer #
403    else
404      bnext
405    endif
406
407    if bufnr("%") == l:currentBufNum
408      new
409    endif
410
411    if buflisted(l:currentBufNum)
412      execute("bdelete! ".l:currentBufNum)
413    endif
414 endfunction