new config, more plugins divided per file type and config cleaning
[stack/conf/vim.git] / .vimrc
diff --git a/.vimrc b/.vimrc
index bc78eb3..a03fc2c 100644 (file)
--- a/.vimrc
+++ b/.vimrc
@@ -8,7 +8,8 @@ set cf " enable error files and error jumping
 set ffs=unix,dos,mac " support all three, in this order
 set viminfo+=! " make sure it can save viminfo
 set isk+=_,@,- " none of these should be word dividers, so make them not be
-set nobackup " real man don't use backups ;)
+set nobackup
+
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Theme/Colors
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@@ -19,19 +20,17 @@ set t_Co=256
 colorscheme desert 
 "colorscheme xoria256 
 "let g:solarized_termcolors=256
-"colorscheme solarized
 
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Vim UI
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 set wildmenu " turn on wild menu
 set ruler " Always show current positions along the bottom 
-"set number " turn on line numbers
+set number " turn on line numbers
 set lz " do not redraw while running macros (much faster) (LazyRedraw)
 set hid " you can change buffer without saving
 set backspace=2 " make backspace work normal    
 set whichwrap+=<,>,h,l  " backspace and cursor keys wrap to
-set mouse=a " use mouse everywhere
 set shortmess=atI " shortens messages to avoid 'press a key' prompt 
 set report=0 " tell us when anything is changed via :...
 " make the splitters between windows be blank
@@ -42,13 +41,12 @@ set fillchars=vert:\ ,stl:\ ,stlnc:\
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 set showmatch " show matching brackets
 set mat=5 " how many tenths of a second to blink matching brackets for
-set nohlsearch " do not highlight searched for phrases
-set incsearch " BUT do highlight as you type you search phrase
+set hlsearch " highlight searched for phrases
+set incsearch " do highlight as you type you search phrase
 set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$ " what to show when I hit :set list
 set so=10 " Keep 10 lines (top/bottom) for scope
 set novisualbell " don't blink
 set noerrorbells " no noises
-"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
 set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%04l,%04v][%p%%]
 set laststatus=2 " always show the status line
 
@@ -60,12 +58,10 @@ set si " smartindent
 set tabstop=4 " tab spacing (settings below are just to unify it)
 set softtabstop=4 " unify
 set shiftwidth=4 " unify 
-set expandtab " space instead of tabs please!
+set expandtab " space instead of tabs 
+set smarttab "Use the "shiftwidth" setting for inserting <TAB>s instead of the "tabstop" setting, when at the beginning of a line.
 set nowrap " do not wrap lines  
-autocmd FileType c,cpp,slang set cindent
-autocmd FileType c,cpp,slang set textwidth=79
-
-
+  
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Folding
 "    Enable folding, but by default make it act like folding is off, because folding is annoying in anything but a few rare cases
@@ -87,6 +83,9 @@ nmap <LocalLeader>p i<S-MiddleMouse><ESC>
 imap <S-Insert> <S-MiddleMouse>
 cmap <S-Insert> <S-MiddleMouse>
 
+" map <C-k> to clear search
+nmap <silent><C-k> :nohlsearch<CR>
+
 " this makes the mouse paste a block of text without formatting it 
 " (good for code)
 map <MouseMiddle> <esc>"*p
@@ -123,11 +122,6 @@ let perl_extended_vars=1 " highlight advanced perl vars inside strings
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Custom Functions
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-" Select range, then hit :SuperRetab($width) - by p0g and FallingCow
-function! SuperRetab(width) range
-    silent! exe a:firstline . ',' . a:lastline . 's/\v%(^ *)@<= {'. a:width .'}/\t/g'
-endfunction
-
 "switch spellcheck languages
 let g:myLangList = [ "none", "it", "en_us" ]
 function! MySpellLang()
@@ -150,34 +144,61 @@ endfunction
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " alt-i (normal mode) inserts a single char, and then switches back to normal
 map <A-i> i <ESC>r 
-map <F10> <ESC>ggVG:call SuperRetab()<left>
+" set F4 to toogle number/nonumber
+map <silent><F4> :set invnumber<CR>
 " encypt the file (toggle)
 map <F12> ggVGg?
 map <F8> :call MySpellLang()<CR>
-map <F7> :TlistOpen<ESC>
+" Map NERDTree show and hide
+map <F2> :NERDTreeToggle<CR>
+imap <F2> <Esc>:NERDTreeToggle<CR>
+" Taglist toggle
+map <F3> :TlistOpen<CR>
+imap <F3> <Esc>:TlistClose<CR>
+
+
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Autocommands
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-autocmd BufEnter * :syntax sync fromstart " ensure every file does syntax highlighting (full)
-autocmd BufNewFile *.sh call append(0, "#!/bin/bash")
-autocmd BufNewFile *.pl call append(0, "#!/usr/bin/perl")
-autocmd BufNewFile *.py call append(0, "#!/bin/python")
+if has ("autocmd")
+    " Enable file type detection ('filetype on').
+    " Syntax of these languages is fussy over tabs Vs spaces
+    autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab
+    autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
+    " Customisations based on house-style (arbitrary)
+    autocmd FileType html setlocal ts=2 sts=2 sw=2 expandtab
+    autocmd FileType css setlocal ts=2 sts=2 sw=2 expandtab
+    " Treat sh correctly
+    autocmd FileType sh setlocal ts=4 sts=4 sw=4 expandtab
+    " Treat .rss files as XML
+    autocmd BufNewFile,BufRead *.rss,*.atom setfiletype xml
+
+    autocmd FileType c,cpp,slang set cindent
+    autocmd FileType c,cpp,slang set textwidth=79
+
+    autocmd BufEnter * :syntax sync fromstart " ensure every file does syntax highlighting (full)
+    autocmd BufNewFile *.sh call append(0, "#!/bin/bash")
+    autocmd BufNewFile *.pl call append(0, "#!/usr/bin/perl")
+    autocmd BufNewFile *.py call append(0, "#!/bin/python")
+
+    " When editing a file, always jump to the last known cursor position.
+    " Don't do it when the position is invalid or when inside an event handler
+    " (happens when dropping a file on gvim).
+    autocmd BufReadPost *
+        \ if line("'\"") > 0 && line("'\"") <= line("$") |
+        \ exe "normal g`\"" |
+        \ endif
+endif
 
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Useful abbrevs
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr> 
 
-" Latex abbrevs
-"iab cha \chapter{}<ESC>i
-"iab sub \subsection{}
-"iab sec \section{}
-"iab ite \item
-"iab enu \begin{enumerate}<CR>\end{enumerate}<ESC>O
-"iab footn \footnote{}
-"iab tabb \begin{tabbing}<CR>\end{tabbing}<ESC>O
-
-"""""""""""""""""""""""""""
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" General configs
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:h\")})%)%(\ %a%)\ -\ %{v:servername}
 if &term == "screen"
   set t_ts=^[k
@@ -187,36 +208,20 @@ if &term == "screen" || &term == "xterm"
   set title
 endif
 
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Plugin activation 
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " vim-addon-manager 
 "
-fun SetupVAM()
-  let addons_base = expand('$HOME') . '/.vim/addons'
-  exec 'set runtimepath+='.addons_base.'/vim-addon-manager'
-
-  " unix based os users may want to use this code checking out VAM
-  " if !isdirectory(addons_base.'/vim-addon-manager')
-  " exec '!p='.shellescape(addons_base).'; mkdir -p "$p" && cd "$p" && git clone --depth 1 git://github.com/MarcWeber/vim-addon-manager.git'
-  " endif
-
-  " commenting try .. endtry because trace is lost if you use it.
-  " There should be no exception anyway
-   try
-
-    let g:solarized_termcolors=256
-    call vam#ActivateAddons(['github:altercation/vim-colors-solarized'])
-    call vam#ActivateAddons(['surround','checksyntax','snipmate','snipmate-snippets','gnupg','LargeFile','taglist-plus'], {'auto_install' : 0})
-    " pluginA could be github:YourName see vam#install#RewriteName()
-   catch /.*/
-   echoe v:exception
-   endtry
-endf
-call SetupVAM()
-
+let vam_install_path = expand('$HOME') . '/.vim/addons'
+exec 'set runtimepath+='.vam_install_path.'/vim-addon-manager'
+" Enable addons with vim-addon-manager using file type recognition
 let ft_addons = {
-  \ '^\%(R\|r\)$': [ 'Screen_vim__gnu_screentmux', 'Vim-R-plugin' ],
-\ }
+    \ 'always': ['surround', 'checksyntax', 'LargeFile', 'snipmate', 'snipmate-snippets', 'The_NERD_tree'],
+    \ 'r': [ 'Screen_vim__gnu_screentmux', 'Vim-R-plugin' ],
+    \ '^\%(c\|cpp\|javascript\|python\|php\|html\|xml\|r\|sh\|css\|java\|make\|xslt\|vim\)$': [ 'taglist-plus' ],
+    \ 'python': ['pythoncomplete', 'pydoc', 'python%790'],
+    \ 'gpg': ['gnupg'],
+    \ }
+call vam#ActivateAddons(ft_addons['always'], {'auto_install': 1})
 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
-" experimental: run after gui has been started (gvim) [3]
-" option1: au VimEnter * call SetupVAM()
-" option2: au GUIEnter * call SetupVAM()
-" See BUGS sections below [*]