Mon fichier .vimrc

" #####################
" # Options generales #
" #####################

" ## Ne pas utiliser le mode de compatibilité vi
"set nocompatible (inutile)
set runtimepath+=~/.local/share/vim/

" ## Encodage

" Encodage par défaut des buffers en utf-8
set encoding=utf-8
" Encodage par défaut des fichiers en utf-8
set fileencoding=utf-8

" ## Sauvegarde

" Fait une copie de sauvegarde lors de l'écrasement d'un fichier
set backup
" Dossier contenant la sauvegarde. N'oubliez pas de le créer et de lui faire un
" chmod 700
set backupdir=~/.cache/vim/backup

" ## Sessions et Views
set viewdir=~/.local/var/vim/views


" #######################
" # Terminal, X et Unix #
" #######################

" ## Pour le terminal

" On transmet les 'beep' au terminal, on ne 'flash' pas
set noerrorbells

" Bien interpréter les caractères de contrôle
nmap <ESC>Od <C-Left>
nmap <ESC>Oc <C-Right>
nmap <ESC>Oa <C-Up>
nmap <ESC>Ob <C-Down>
nmap <ESC>[D <C-Left>
nmap <ESC>[C <C-Right>
nmap <ESC>[B <C-Down>
nmap <ESC>[A <C-Up>
nmap [1;5D <C-Left>
nmap [1;5C <C-Right>
nmap [1;5B <C-Down>

" ## Unixage

" Path pour la recherche de fichier avec :find, :sfind et :tabfind
set path=.,/usr/include,/usr/X11R6/include,/usr/local/include
" Shell par défaut
set shell=/bin/sh

" ## X

" Pas de souris, boudiou !
set mouse=
" Le texte sélectionné en mode visuel est collé dans le presse-papier CLIPBOARD
set clipboard=autoselect

" ############################
" # Indentation et formatage #
" ############################

" Taille maximale d'une ligne
set textwidth=80

" Indentation gérée par les plugins plutôt que par autoindent
set noautoindent
filetype plugin on
filetype indent on

" On remplace les \t par des espaces
set expandtab

" Largeur de l'autoindentation
set shiftwidth=2
" Largeur de l'indentation avec <tab>
set softtabstop=2
" Largeur du caractère <tab>
set tabstop=1

" Mappings
vnoremap <C-F> =$
vnoremap <tab> =
nnoremap <tab> =$
nnoremap <C-tab> mzvip=`z

" #########################
" # Coloration syntaxique #
" #########################

" ## Général

" Parenthèses électriques
set showmatch

" Coloration des caractères particuliers
set list
set listchars=nbsp:~,trail:¤,extends:>,precedes:<,tab:>-

" Coloration syntaxique
syntax on

" Configuration du parsing pour la coloration syntaxique
"syn sync minlines=10000 maxlines=10000

" Configuration du hilight quand vim est dans un terminal couleur
"hi Normal ctermfg=gray ctermbg=black

" ## Particularité des langages

" Pour les fichiers en général
autocmd FileType * set formatoptions=tcql nocindent comments&

" Pour les fichiers c/cpp :
" - numérotation automatique des lignes
" - indentation top moumoutte (je ne sais plus ce que ça fait)
autocmd FileType c,cpp set number cinoptions={.5s,+.5s,t0,n-1,p2s,(03s,=.5s,>1s,=1s,:1s formatoptions=croql cindent comments=sr:/*,mb:*,el:*/,://
autocmd FileType c,cpp let Tlist_Ctags_Cmd = "/usr/bin/ctags"
autocmd FileType c,cpp let Tlist_WinWidth = 50
autocmd FileType c,cpp map <F4> :TlistToggle<cr>
autocmd FileType c,cpp map <F8> :!/usr/bin/ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . <CR> <CR>


" Pour les fichiers shell script
" - corrige la coloration syntaxique
autocmd FileType sh let g:is_posix = 1

" #############
" # Recherche #
" #############

" La recherche reprend au début du fichier (resp à la fin) une fois la fin (resp
" le début) atteint.
set wrapscan

" Highlight les paterns recherchés
set hlsearch

" Recherche en live
set incsearch

" #############
" # Interface #
" #############

" Complétion en mode insertion (<C-n>)
set completeopt=longest,menuone

" ## Ligne de statut et Menu

" Complétion dans la barre de commande
set wmnu
set wildmode=list:longest,list:full
" Fichiers ignorés lors de la complétion
set wildignore=*.o,*.r,*.so,*.sl
" Taille de l'historique de la barre de commandes
set history=2000
set viminfo='100,<50,s10,h,n~/.cache/vim/info
" Affichage de la position dans le fichier dans la barre de statut
set ruler
" Configuration de l'affichage de la date et de la position dans le fichier
set rulerformat=%27(%{strftime('%a\ %e\ %b\ %I:%M\ %p')}\ %2l,%-2(%c%V%)\ %P%)
" Affichage du mode dans la barre de statut
set showmode
" Affichage intelligent des avertissements (file format, file status, etc.)
set shm=a
" La ligne de statut est l'avant dernière ligne
set laststatus=2

" Affichage ligne/colonne
au WinLeave * set nocursorline nocursorcolumn
au WinEnter * set cursorline cursorcolumn
set cursorline cursorcolumn

" ## Fenetres

" Hauteur minimale d'une fenêtre active
set winheight=1
" Hauteur minimale d'une fenêtre
set winminheight=0
" Ne redimensionne pas automatiquement toutes les fenêtres lors de
" l'ouverture/fermeture de l'une d'entre elles
set noequalalways
" Ajoute les nouvelles fenêtres en dessous ou à droite
set splitbelow
set splitright

" ## Tabs

" Raccourcis claviers pour les Tabs
map <C-Down>  :tabnew <CR>
nmap <C-Right> :tabnext <CR>
nmap <C-Left>  :tabprevious <CR> 



" ############################
" # Configuration des plugin #
" ############################

" ## vim-scripts
"source /usr/share/vim-scripts/games/VimSokoban/sokoban.vim
"source /usr/share/vim-scripts/plugin/bufexplorer.vim
"source /usr/share/vim-scripts/plugin/taglist.vim

" ## TOHtml
" Le plugin 2html utilise le CSS
let html_use_css = 1

" ## Vérification orthographique
" en français, 10 suggestions
let loaded_vimspell = 1
set spelllang=fr
set spellsuggest=10
let spell_executable = "aspell"
let spell_auto_type = ''
let spell_insert_mode = 0

" ## ctags
" génération automatique pour les extensions connues
let generate_tags=1
" affichage dans la statusline
let g:ctags_statusline=1

" Configuration OmniCpp (C++)
let OmniCpp_DefaultNamespaces=["std", "_GLIBCXX_STD"]
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_NamespaceSearch = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_ShowPrototypeInAbbr = 1

" Configuration de taglist
"set tags+=~/.vim/tags/stl

" ################
" # Abréviations #
" ################

" ## Complétion par dictionnaire
" (Ctrl-x Ctrl-k)
set dictionary+=/usr/share/dict/american-english
set dictionary+=/usr/share/dict/french

" ## Latex
let g:tex_flavor='latex'
set foldenable
imap <buffer> <C>it <Plug>Tex_InsertItemOnThisLine
set grepprg=grep\ -nH\ $*
iabbrev \N \mathbb{N}
iabbrev \P \mathbb{P}
iabbrev \p \Sub{p}
iabbrev \c \Sub{c}

colo desert "elflord default torte darkblue

set t_Co=16
hi Cursor       ctermbg=12
hi CursorLine   ctermbg=16
hi CursorColumn ctermbg=16

" Siff
autocmd BufWritePost * if &diff == 1 | diffupdate | endif
hi DiffChange term=reverse cterm=bold ctermbg=cyan ctermfg=black
hi DiffText term=reverse cterm=bold ctermbg=gray ctermfg=black
hi DiffAdd term=reverse cterm=bold ctermbg=green ctermfg=white
hi DiffDelete term=reverse cterm=bold ctermbg=red ctermfg=black 


"set runtimepath+=/srv/gaia64/usr/share/lilypond/2.12.2/vim

map <F5> <esc>:!lftp ftp.mecreant.fr -u mecreant -e 'cd www; put index.html; exit' <cr>