6de923f156c6b0db1f455dcf0e2a90bc5321c1a4
[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 " real man don't use backups ;)
12 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
13 " Theme/Colors
14 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
15 syntax on " syntax highlighting on
16
17 set background=dark
18 set t_Co=256
19 colorscheme desert 
20 "colorscheme xoria256 
21 "let g:solarized_termcolors=256
22
23 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
24 " Vim UI
25 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
26 set wildmenu " turn on wild menu
27 set ruler " Always show current positions along the bottom 
28 "set number " turn on line numbers
29 set lz " do not redraw while running macros (much faster) (LazyRedraw)
30 set hid " you can change buffer without saving
31 set backspace=2 " make backspace work normal    
32 set whichwrap+=<,>,h,l  " backspace and cursor keys wrap to
33 set shortmess=atI " shortens messages to avoid 'press a key' prompt 
34 set report=0 " tell us when anything is changed via :...
35 " make the splitters between windows be blank
36 set fillchars=vert:\ ,stl:\ ,stlnc:\ 
37
38 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
39 " Visual Cues
40 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
41 set showmatch " show matching brackets
42 set mat=5 " how many tenths of a second to blink matching brackets for
43 set nohlsearch " do not highlight searched for phrases
44 set incsearch " BUT do highlight as you type you search phrase
45 set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$ " what to show when I hit :set list
46 set so=10 " Keep 10 lines (top/bottom) for scope
47 set novisualbell " don't blink
48 set noerrorbells " no noises
49 "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
50 set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%04l,%04v][%p%%]
51 set laststatus=2 " always show the status line
52
53 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
54 " Text Formatting/Layout
55 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
56 set fo=tcrqn " See Help (complex)
57 set si " smartindent 
58 set tabstop=4 " tab spacing (settings below are just to unify it)
59 set softtabstop=4 " unify
60 set shiftwidth=4 " unify 
61 set expandtab " space instead of tabs please!
62 set nowrap " do not wrap lines  
63 autocmd FileType c,cpp,slang set cindent
64 autocmd FileType c,cpp,slang set textwidth=79
65
66
67 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
68 " Folding
69 "    Enable folding, but by default make it act like folding is off, because folding is annoying in anything but a few rare cases
70 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
71 set foldenable " Turn on folding
72 set foldmethod=indent " Make folding indent sensitive
73 set foldlevel=100 " Don't autofold anything (but I can still fold manually)
74 set foldopen-=search " don't open folds when you search into them
75 set foldopen-=undo " don't open folds when you undo stuff
76
77 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
78 " Mouse Settings
79 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
80 set mouse=a                     " mouse support in all modes
81 set mousehide                   " hide the mouse when typing text
82
83 " ,p and shift-insert will paste the X buffer, even on the command line
84 nmap <LocalLeader>p i<S-MiddleMouse><ESC>
85 imap <S-Insert> <S-MiddleMouse>
86 cmap <S-Insert> <S-MiddleMouse>
87
88 " this makes the mouse paste a block of text without formatting it 
89 " (good for code)
90 map <MouseMiddle> <esc>"*p
91
92 " Convenient for non italian keyboard
93 map ò :
94
95 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
96 " Matchit
97 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
98 let b:match_ignorecase = 1
99
100 " make tab in v mode ident code
101 vmap <tab> >gv
102 vmap <s-tab> <gv
103
104 " make tab in normal mode ident code
105 nmap <tab> I<tab><esc>
106 nmap <s-tab> ^i<bs><esc>
107
108 "Easy to access esc key
109 map! <C-h> <Esc>
110 map <C-h> <Esc>
111
112 " paste mode - this will avoid unexpected effects when you
113 " cut or copy some text from one window and paste it in Vim.
114 set pastetoggle=<F6>
115
116 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
117 " Perl
118 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
119 let perl_extended_vars=1 " highlight advanced perl vars inside strings
120
121 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
122 " Custom Functions
123 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
124 " Select range, then hit :SuperRetab($width) - by p0g and FallingCow
125 function! SuperRetab(width) range
126     silent! exe a:firstline . ',' . a:lastline . 's/\v%(^ *)@<= {'. a:width .'}/\t/g'
127 endfunction
128
129 "switch spellcheck languages
130 let g:myLangList = [ "none", "it", "en_us" ]
131 function! MySpellLang()
132 "loop through languages
133 if !exists( "b:myLang" )
134       let b:myLang=0
135 endif 
136 let b:myLang = b:myLang + 1
137 if b:myLang >= len(g:myLangList) | let b:myLang = 0 | endif
138
139 if b:myLang== 0 | setlocal spell nospell | endif
140 if b:myLang== 1 | setlocal spell spelllang=it | endif
141 if b:myLang== 2 | setlocal spell spelllang=en_us | endif
142
143 echo "language spell:" g:myLangList[b:myLang]
144 endfunction
145
146 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
147 " Mappings
148 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
149 " alt-i (normal mode) inserts a single char, and then switches back to normal
150 map <A-i> i <ESC>r 
151 map <F10> <ESC>ggVG:call SuperRetab()<left>
152 " encypt the file (toggle)
153 map <F12> ggVGg?
154 map <F8> :call MySpellLang()<CR>
155 map <F7> :TlistOpen<ESC>
156 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
157 " Autocommands
158 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
159 autocmd BufEnter * :syntax sync fromstart " ensure every file does syntax highlighting (full)
160 autocmd BufNewFile *.sh call append(0, "#!/bin/bash")
161 autocmd BufNewFile *.pl call append(0, "#!/usr/bin/perl")
162 autocmd BufNewFile *.py call append(0, "#!/bin/python")
163
164 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
165 " Useful abbrevs
166 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
167 iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr> 
168
169 " Latex abbrevs
170 "iab cha \chapter{}<ESC>i
171 "iab sub \subsection{}
172 "iab sec \section{}
173 "iab ite \item
174 "iab enu \begin{enumerate}<CR>\end{enumerate}<ESC>O
175 "iab footn \footnote{}
176 "iab tabb \begin{tabbing}<CR>\end{tabbing}<ESC>O
177
178 """""""""""""""""""""""""""
179 set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:h\")})%)%(\ %a%)\ -\ %{v:servername}
180 if &term == "screen"
181   set t_ts=^[k
182   set t_fs=^[\
183 endif
184 if &term == "screen" || &term == "xterm"
185   set title
186 endif
187
188 " vim-addon-manager 
189 "
190 fun SetupVAM()
191   let addons_base = expand('$HOME') . '/.vim/addons'
192   exec 'set runtimepath+='.addons_base.'/vim-addon-manager'
193
194   try
195
196     " Plugins that should be always enabled 
197     call vam#ActivateAddons(['surround','checksyntax','snipmate','snipmate-snippets','gnupg','LargeFile','taglist-plus'], {'auto_install' : 0})
198
199    catch /.*/
200    echoe v:exception
201    endtry
202 endf
203 call SetupVAM()
204
205 " Enable addons with vim-addon-manager using file type recognition
206 let ft_addons = {
207     \ '^\%(R\|r\)$': [ 'Screen_vim__gnu_screentmux', 'Vim-R-plugin' ],
208     \ }
209 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
210
211
212
213