mods
[stack/conf/vim.git] / vimrc
1 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2 " General
3 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
4 set nocompatible " get out of horrible vi-compatible mode
5 filetype indent plugin on | syn on
6 set history=1000 " How many lines of history to remember
7 set cf " enable error files and error jumping
8 set ffs=unix,dos,mac " support all three, in this order
9 set viminfo+=! " make sure it can save viminfo
10 set isk+=_,@,- " none of these should be word dividers, so make them not be
11 set nobackup
12
13 set completeopt=longest,menuone,preview
14 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
15 inoremap <expr> <C-n> pumvisible() ? '<C-n>' :
16   \ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
17
18 inoremap <expr> <M-,> pumvisible() ? '<C-n>' :
19   \ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
20
21 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
22 " Theme/Colors
23 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
24 syntax on " syntax highlighting on
25
26 set background=dark
27 set t_Co=256
28 colorscheme desert 
29 "colorscheme xoria256 
30 "let g:solarized_termcolors=256
31
32 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
33 " Vim UI
34 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
35 set wildmenu " turn on wild menu
36 set ruler " Always show current positions along the bottom 
37 set number " turn on line numbers
38 set lz " do not redraw while running macros (much faster) (LazyRedraw)
39 set hid " you can change buffer without saving
40 set backspace=2 " make backspace work normal    
41 set whichwrap+=<,>,h,l  " backspace and cursor keys wrap to
42 set shortmess=atI " shortens messages to avoid 'press a key' prompt 
43 set report=0 " tell us when anything is changed via :...
44 " make the splitters between windows be blank
45 set fillchars=vert:\ ,stl:\ ,stlnc:\ 
46
47 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
48 " Visual Cues
49 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
50 set showmatch " show matching brackets
51 set mat=5 " how many tenths of a second to blink matching brackets for
52 set hlsearch " highlight searched for phrases
53 set incsearch " do highlight as you type you search phrase
54 set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$ " what to show when I hit :set list
55 set so=10 " Keep 10 lines (top/bottom) for scope
56 set novisualbell " don't blink
57 set noerrorbells " no noises
58 set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%04l,%04v][%p%%]
59 set laststatus=2 " always show the status line
60
61 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
62 " Text Formatting/Layout
63 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
64 set fo=tcrqn " See Help (complex)
65 set si " smartindent 
66 set tabstop=4 " tab spacing (settings below are just to unify it)
67 set softtabstop=4 " unify
68 set shiftwidth=4 " unify 
69 set expandtab " space instead of tabs 
70 set smarttab "Use the "shiftwidth" setting for inserting <TAB>s instead of the "tabstop" setting, when at the beginning of a line.
71 set nowrap " do not wrap lines  
72   
73 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
74 " Folding
75 "    Enable folding, but by default make it act like folding is off, because folding is annoying in anything but a few rare cases
76 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
77 set foldenable " Turn on folding
78 set foldmethod=indent " Make folding indent sensitive
79 set foldlevel=100 " Don't autofold anything (but I can still fold manually)
80 set foldopen-=search " don't open folds when you search into them
81 set foldopen-=undo " don't open folds when you undo stuff
82
83 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
84 " Mouse Settings
85 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
86 set mouse=a                     " mouse support in all modes
87 set mousehide                   " hide the mouse when typing text
88
89 " ,p and shift-insert will paste the X buffer, even on the command line
90 nmap <LocalLeader>p i<S-MiddleMouse><ESC>
91 imap <S-Insert> <S-MiddleMouse>
92 cmap <S-Insert> <S-MiddleMouse>
93
94 " map <C-k> to clear search
95 nmap <silent><C-k> :nohlsearch<CR>
96
97 " this makes the mouse paste a block of text without formatting it 
98 " (good for code)
99 map <MouseMiddle> <esc>"*p
100
101 " Convenient for non italian keyboard
102 map ò :
103
104 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
105 " Matchit
106 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
107 let b:match_ignorecase = 1
108
109 " make tab in v mode ident code
110 vmap <tab> >gv
111 vmap <s-tab> <gv
112
113 " make tab in normal mode ident code
114 nmap <tab> I<tab><esc>
115 nmap <s-tab> ^i<bs><esc>
116
117 "Easy to access esc key
118 map! <C-h> <Esc>
119 map <C-h> <Esc>
120
121 " paste mode - this will avoid unexpected effects when you
122 " cut or copy some text from one window and paste it in Vim.
123 set pastetoggle=<F6>
124
125 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
126 " Perl
127 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
128 let perl_extended_vars=1 " highlight advanced perl vars inside strings
129
130 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
131 " Custom Functions
132 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
133 "switch spellcheck languages
134 let g:myLangList = [ "none", "it", "en_us" ]
135 function! MySpellLang()
136 "loop through languages
137 if !exists( "b:myLang" )
138       let b:myLang=0
139 endif 
140 let b:myLang = b:myLang + 1
141 if b:myLang >= len(g:myLangList) | let b:myLang = 0 | endif
142
143 if b:myLang== 0 | setlocal spell nospell | endif
144 if b:myLang== 1 | setlocal spell spelllang=it | endif
145 if b:myLang== 2 | setlocal spell spelllang=en_us | endif
146
147 echo "language spell:" g:myLangList[b:myLang]
148 endfunction
149
150 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
151 " Mappings
152 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
153 " alt-i (normal mode) inserts a single char, and then switches back to normal
154 map <A-i> i <ESC>r 
155 " set F4 to toogle number/nonumber
156 map <silent><F4> :set invnumber<CR>
157 " encypt the file (toggle)
158 map <F12> ggVGg?
159 map <F8> :call MySpellLang()<CR>
160 " Map NERDTree show and hide
161 map <F2> :NERDTreeToggle<CR>
162 imap <F2> <Esc>:NERDTreeToggle<CR>
163 " Tagbar toggle
164 map <F3> :TagbarToggle<CR>
165 imap <F3> <Esc>:TagbarToggle<CR>
166
167 " Alt-right/left to navigate forward/backward in the tags stack
168 map <M-Left> <C-T>
169 map <M-Right> <C-]>
170
171 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
172 " Autocommands
173 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
174 if has ("autocmd")
175     " Enable file type detection ('filetype on').
176     " Syntax of these languages is fussy over tabs Vs spaces
177     autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab
178     autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
179     " Customisations based on house-style (arbitrary)
180     autocmd FileType html setlocal ts=2 sts=2 sw=2 expandtab
181     autocmd FileType css setlocal ts=2 sts=2 sw=2 expandtab
182     " Treat sh correctly
183     autocmd FileType sh setlocal ts=4 sts=4 sw=4 expandtab
184     " Treat .rss files as XML
185     autocmd BufNewFile,BufRead *.rss,*.atom setfiletype xml
186
187     autocmd FileType c,cpp,slang set cindent
188     autocmd FileType c,cpp,slang set textwidth=79
189
190     autocmd BufEnter * :syntax sync fromstart " ensure every file does syntax highlighting (full)
191     autocmd BufNewFile *.sh call append(0, "#!/bin/bash")
192     autocmd BufNewFile *.pl call append(0, "#!/usr/bin/perl")
193     autocmd BufNewFile *.py call append(0, "#!/bin/python")
194
195
196     " PHP documenter script bound to Control-P
197     autocmd FileType php inoremap <C-p> <ESC>:call PhpDocSingle()<CR>i
198     autocmd FileType php nnoremap <C-p> :call PhpDocSingle()<CR>
199     autocmd FileType php vnoremap <C-p> :call PhpDocRange()<CR> 
200
201     " When editing a file, always jump to the last known cursor position.
202     " Don't do it when the position is invalid or when inside an event handler
203     " (happens when dropping a file on gvim).
204     autocmd BufReadPost *
205         \ if line("'\"") > 0 && line("'\"") <= line("$") |
206         \ exe "normal g`\"" |
207         \ endif
208 endif
209  
210
211 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
212 " Useful abbrevs
213 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
214 iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr> 
215
216 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
217 " General configs
218 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
219 set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:h\")})%)%(\ %a%)\ -\ %{v:servername}
220 if &term == "screen"
221   set t_ts=^[k
222   set t_fs=^[\
223 endif
224 if &term == "screen" || &term == "xterm"
225   set title
226 endif
227
228
229    
230 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
231 " Plugin activation 
232 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
233 " vim-addon-manager 
234 "
235 let vam_install_path = expand('$HOME') . '/.vim/addons'
236 exec 'set runtimepath+='.vam_install_path.'/vim-addon-manager'
237 " Enable addons with vim-addon-manager using file type recognition
238 let ft_addons = {
239     \ 'always': ['surround', 'checksyntax', 'LargeFile', 'snipmate', 'snipmate-snippets', 'The_NERD_tree', 'SuperTab%1643'],
240     \ 'r': [ 'Screen_vim__gnu_screentmux', 'Vim-R-plugin' ],
241     \ '^\%(c\|cpp\|javascript\|python\|php\|html\|xml\|r\|sh\|css\|java\|make\|xslt\|vim\)$': [ 'Tagbar', 'checksyntax', 'TagHighlight'],
242     \ '^\%(c\|cpp\)$': [ 'clang_complete' ],
243     \ 'python': ['pythoncomplete', 'python_pydoc'],
244     \ 'php': ['phpcomplete', 'PDV_-_phpDocumentor_for_Vim'],
245     \ 'gpg': ['gnupg'],
246     \ }
247 call vam#ActivateAddons(ft_addons['always'], {'auto_install': 1})
248 au FileType * for l in values(filter(copy(ft_addons), string(expand('<amatch>')).' =~ v:key')) | call vam#ActivateAddons(l, {'force_loading_plugins_now':1}) | endfor
249
250 " SuperTab option for context aware completion
251 let g:SuperTabDefaultCompletionType = "context"
252
253 let g:clang_complete_copen = 1
254 let g:clang_complete_auto = 1
255 let g:clang_user_options='|| exit 0'