summaryrefslogtreecommitdiffstats
path: root/vim/.vimrc
diff options
context:
space:
mode:
Diffstat (limited to 'vim/.vimrc')
-rw-r--r--vim/.vimrc365
1 files changed, 365 insertions, 0 deletions
diff --git a/vim/.vimrc b/vim/.vimrc
new file mode 100644
index 0000000..e7bace8
--- /dev/null
+++ b/vim/.vimrc
@@ -0,0 +1,365 @@
+"Fichier de configuration perso de VIM
+
+" Enlève la compatibilité avec le "vieux vi"
+set nocompatible
+
+" Affiche la commande que vous êtes en train de taper, le mode en cours, et
+" votre position dans le texte
+set showcmd
+set showmode
+set ruler
+
+" Une petite fenêtre pour voir les complétions possibles
+set wildmenu
+
+"" Indentation
+"Auto-indentation
+"set autoindent
+" Indentation à la C
+"set cindent
+" Indentation intelligente
+set smartindent
+
+" Copie l'indentation lors d'une nouvelle ligne
+set copyindent
+
+" Le terminal a un fond foncé
+set background=dark
+
+" Coloration syntaxique
+syntax on
+
+" Détection automatique du type de fichier & activation des plugins/indentations
+filetype plugin on
+
+" Animation lors de la fermeture des parenthèses
+set showmatch
+
+" Retour à la ligne auto au bout de 80 lignes
+set textwidth=80
+
+" Utilisation de ack a la place de grep
+set grepprg=ack\ -a
+
+" Utilisation de la souris
+set mouse=a
+set nopaste
+
+
+"""""""""""""
+" Options d'affichage
+"""""""""""""
+
+" Surligne la ligne courante
+"set cursorline
+"highlight CursorLine term=reverse cterm=reverse
+
+" Taille des tabs
+set shiftwidth=4
+set softtabstop=4
+set tabstop=4
+
+" Affiche les numéros des lignes
+"set number
+highlight LineNr ctermbg=black ctermfg=gray
+
+" Personnalisation de la barre de status
+set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [Line=%04l]\ [Col=%04v]\ [%p%%]
+set laststatus=2
+
+" Amélioration de la lisibilité des noms des onglets
+highlight TabLine term=none cterm=none
+highlight TabLineSel ctermbg=darkblue
+
+" On ouvre le fichier avec le curseur à la position de la dernière édition
+autocmd BufReadPost * silent! call s:CursorOldPosition()
+
+" Activation de la gestion des ouvertures/fermetures de code
+set foldenable
+" Affichage de "=" sur les pliages
+set fillchars=fold:=
+" Définition de la fonction perso d'affichage du pliage
+set foldtext=MyFoldFunction()
+
+"""""""""""""
+" Dictionnaire
+"""""""""""""
+
+"setlocal spell spelllang=fr
+set spellfile=~/.vim/spellfile.utf-8.add
+
+"""""""""
+" Recherche
+""""""""""
+
+" Recherche insensible à la casse lorsque qu'auncune majuscule n'est utilisée.
+" Les deux options suivantes sont nécéssaires.
+set ignorecase
+set smartcase
+" Recherche incrémentielle
+set incsearch
+
+" Colore les recherches en cours
+set hlsearch
+
+""""""""""
+" Programmation
+""""""""""
+set tags+=~/.vim/ctags/c
+set tags+=~/.vim/ctags/c++
+
+""""""""""
+" Cscope plugin :
+""""""""""
+
+" This tests to see if vim was configured with the '--enable-cscope' option
+" when it was compiled. If it wasn't, time to recompile vim...
+if has("cscope")
+
+ """"""""""""" Standard cscope/vim boilerplate
+
+ " use both cscope and ctag for 'ctrl-]', ':ta', and 'vim -t'
+ set cscopetag
+
+ " check cscope for definition of a symbol before checking ctags: set to 1
+ " if you want the reverse search order.
+ set csto=0
+
+ " add any cscope database in current directory
+ if filereadable("cscope.out")
+ cs add cscope.out
+ " else add the database pointed to by environment variable
+ elseif $CSCOPE_DB != ""
+ cs add $CSCOPE_DB
+ endif
+
+ " do NOT show msg when any other cscope db added - annoying as hell
+ set nocscopeverbose
+
+
+ """"""""""""" My cscope/vim key mappings
+ "
+ " The following maps all invoke one of the following cscope search types:
+ "
+ " 's' symbol: find all references to the token under cursor
+ " 'g' global: find global definition(s) of the token under cursor
+ " 'c' calls: find all calls to the function name under cursor
+ " 't' text: find all instances of the text under cursor
+ " 'e' egrep: egrep search for the word under cursor
+ " 'f' file: open the filename under cursor
+ " 'i' includes: find files that include the filename under cursor
+ " 'd' called: find functions that function under cursor calls
+ "
+ " Below are three sets of the maps: one set that just jumps to your
+ " search result, one that splits the existing vim window horizontally and
+ " diplays your search result in the new window, and one that does the same
+ " thing, but does a vertical split instead (vim 6 only).
+ "
+ " I've used CTRL-\ and CTRL-@ as the starting keys for these maps, as it's
+ " unlikely that you need their default mappings (CTRL-\'s default use is
+ " as part of CTRL-\ CTRL-N typemap, which basically just does the same
+ " thing as hitting 'escape': CTRL-@ doesn't seem to have any default use).
+ " If you don't like using 'CTRL-@' or CTRL-\, , you can change some or all
+ " of these maps to use other keys. One likely candidate is 'CTRL-_'
+ " (which also maps to CTRL-/, which is easier to type). By default it is
+ " used to switch between Hebrew and English keyboard mode.
+ "
+ " All of the maps involving the <cfile> macro use '^<cfile>$': this is so
+ " that searches over '#include <time.h>" return only references to
+ " 'time.h', and not 'sys/time.h', etc. (by default cscope will return all
+ " files that contain 'time.h' as part of their name).
+
+
+ " To do the first type of search, hit 'CTRL-\', followed by one of the
+ " cscope search types above (s,g,c,t,e,f,i,d). The result of your cscope
+ " search will be displayed in the current window. You can use CTRL-T to
+ " go back to where you were before the search.
+ "
+
+ nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
+ nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
+
+
+ " Using 'CTRL-spacebar' (intepreted as CTRL-@ by vim) then a search type
+ " makes the vim window split horizontally, with search result displayed in
+ " the new window.
+ "
+ " (Note: earlier versions of vim may not have the :scs command, but it
+ " can be simulated roughly via:
+ " nmap <C-@>s <C-W><C-S> :cs find s <C-R>=expand("<cword>")<CR><CR>
+
+ nmap <C-@><C-@>ss :scs find s <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@><C-@>sd :scs find g <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@><C-@>sc :scs find c <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@><C-@>st :scs find t <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-@><C-@>sf :scs find f <C-R>=expand("<cfile>")<CR><CR>
+ nmap <C-@><C-@>si :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
+
+
+ """"""""""""" key map timeouts
+ "
+ " By default Vim will only wait 1 second for each keystroke in a mapping.
+ " You may find that too short with the above typemaps. If so, you should
+ " either turn off mapping timeouts via 'notimeout'.
+ "
+ "set notimeout
+ "
+ " Or, you can keep timeouts, by uncommenting the timeoutlen line below,
+ " with your own personal favorite value (in milliseconds):
+ "
+ "set timeoutlen=4000
+ "
+ " Either way, since mapping timeout settings by default also set the
+ " timeouts for multicharacter 'keys codes' (like <F1>), you should also
+ " set ttimeout and ttimeoutlen: otherwise, you will experience strange
+ " delays as vim waits for a keystroke after you hit ESC (it will be
+ " waiting to see if the ESC is actually part of a key code like <F1>).
+ "
+ "set ttimeout
+ "
+ " personally, I find a tenth of a second to work well for key code
+ " timeouts. If you experience problems and have a slow terminal or network
+ " connection, set it higher. If you don't set ttimeoutlen, the value for
+ " timeoutlent (default: 1000 = 1 second, which is sluggish) is used.
+ "
+ "set ttimeoutlen=100
+
+endif
+
+""""""""""
+" Fonctions d'affichage tirées de GLMF
+""""""""""
+
+" Affichage en inverse couleur
+function! s:DisplayStatus(msg)
+ echohl Todo
+ echo a:msg
+ echohl None
+endfunction
+
+"" Fonctions de gestion de la souris
+"Enregistrement de l'état de la gestion de la souris
+let s:mouseActivate = 1
+"Fonction permettant l'activation/désactivation de la gestion de la souris
+function! ToggleMouseActivate()
+ if (s:mouseActivate)
+ let s:mouseActivate = 0
+ set mouse=n
+ set paste
+ call s:DisplayStatus('Désactivation de la gestion de la souris (mode collage)')
+ else
+ let s:mouseActivate = 1
+ set mouse=a
+ set nopaste
+ call s:DisplayStatus('Activation de la gestion de la souris (mode normal)')
+ endif
+endfunction
+
+"" Fonction de "nettoyage" d'un fichier :
+" - Suppression des ^M en fin de ligne
+" - Encodage UTF-8
+function! ClearCode()
+ set fileformat=unix
+ set fileencoding=utf-8
+ call s:DisplayStatus('Code nettoyé')
+endfunction
+
+"" Déplacement de l'onglet courant vers la g ou la d
+function! MoveTab(direction)
+ if (a:direction == 'left')
+ let tabNum = tabpagenr()-2
+ if(tabNum < 0)
+ let tabNum = 0
+ endif
+ execute 'tabm' . tabNum
+ else
+ let tabNum = tabpagenr()
+ execute 'tabm' . tabNum
+ endif
+endfunction
+
+"" Ouverture des fichiers avec le curseur à la position de la dernière édition
+function! s:CursorOldPosition()
+ if line("'\"") > 0 && line("'\"") <= line("$")
+ exe "normal g`\""
+ end if
+endfunction
+
+"" Affichage personnalisé des replis de code
+function! MyFoldFunction()
+ let line = getline(v:foldstart)
+ let sub = substitute(line, '/\*\|\*/\|^\s+', '', 'g')
+ let lines = v:foldend - v:foldstart + 1
+ return '[+] ' . v:folddashes.sub . '...' . lines . 'lignes...' .
+ getline(v:foldend)
+endfunction
+
+
+" Activation des templates lors de la création d'un nouveau fichier, et
+" chargement des abbreviations et des commandes Vim spécifiques
+function! LoadTemplate(extension, type)
+ if (a:type == 'all')
+ silent! execute '0r ' . $HOME . '/.vim/templates/' . a:extension . '.tpl'
+ silent! execute 'source ' . $HOME . '/.vim/templates/autocompletion.vim'
+ endif
+ " Insertion des abbreviations
+ silent! execute 'source ' . $HOME . '/.vim/abbreviations/' . a:extension . '.abb.vim'
+ " Insertion du dictionnaire
+ set dictionary+=$HOME . '/.vim/dictionary/' . a:extension . '.dict'
+ " Insertion des commandes spécifiques Vim
+ silent! execute 'source ' . $HOME . '/.vim/specific/' . a:extension . '.vim'
+endfunction
+
+" Activation des templates et des chargements spécifiques en fonction de
+" l'extenion du fichier chargé
+autocmd BufNewFile * silent! call LoadTemplate('%:e', 'all')
+autocmd BufRead * silent! call LoadTemplate('%:e', 'noTemplate')
+
+" Surlignement des champs à remplir dans les templates
+3match Todo /<+.\++>/
+
+"" Aide mémoire
+" Variable indiquant l'état de l'affichage de l'aide
+let helpDisplay = 0
+" Affiche/Masque l'aide
+function! HelpMemory()
+ if g:helpDisplay == 0
+ silent! topleft vertical 40split +buffer helpMemory
+ let g:helpDisplay = 1
+ set buftype=nofile
+ 0read $HOME/.vim/memory.txt
+ highlight Memory ctermfg=white ctermbg=blue
+ "3match Memory /^.\+\ \+:/
+ 3match Memory /<.\+>/
+ else
+ bdelete helpMemory
+ let g:helpDisplay = 0
+ endif
+endfunction
+
+" Affiche/Masque les caracteres
+function! DisplayChar()
+ set list! lcs=tab:\|_,eol:¶,nbsp:~
+endfunction
+
+" Surligne les lignes trop longues
+" Variable indiquant l'état
+let hlTooLarge = 0
+function! HlTooLarge()
+ if g:hlTooLarge == 0
+ let g:hlTooLarge = 1
+ highlight OverLength ctermbg=red ctermfg=white guibg=#592929
+ match OverLength /\%81v.\+/
+ else
+ match
+ let g:hlTooLarge = 0
+ endif
+endfunction
+
+
+" Lecture des raccourcis claviers généraux
+source $HOME/.vim/shortkeys.vim