diff options
Diffstat (limited to 'vim/vimrc')
| -rw-r--r-- | vim/vimrc | 374 | 
1 files changed, 374 insertions, 0 deletions
diff --git a/vim/vimrc b/vim/vimrc new file mode 100644 index 0000000..36f9b6b --- /dev/null +++ b/vim/vimrc @@ -0,0 +1,374 @@ +"" Fichier de configuration perso de VIM + +""""""""""""" +" Pathogen - Charge les plugins dans .vim/bundle +" Doit etre fait AVANT filetype plugin indent on +""""""""""""" +call pathogen#infect() + +""""""""""""" +" Configuration générale +""""""""""""" + +" 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  | 
