"" 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 colorscheme chocolateliquor " 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 100 lignes set textwidth=100 " Utilisation de ag a la place de grep set grepprg=ag " 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 " Mode 256 couleurs set t_Co=256 " Personnalisation de la barre de status " Utilisation de vim-airline [https://github.com/bling/vim-airline] à la place "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [Line=%04l]\ [Col=%04v]\ [%p%%] let g:airline_powerline_fonts = 1 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 macro use '^$': this is so " that searches over '#include " 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 s :cs find s =expand("") nmap g :cs find g =expand("") nmap c :cs find c =expand("") nmap t :cs find t =expand("") nmap f :cs find f =expand("") nmap i :cs find i ^=expand("")$ " 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 s :cs find s =expand("") nmap ss :scs find s =expand("") nmap sd :scs find g =expand("") nmap sc :scs find c =expand("") nmap st :scs find t =expand("") nmap sf :scs find f =expand("") nmap si :scs find i ^=expand("")$ """"""""""""" 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 ), 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 ). " "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="" 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'extension du fichier chargé autocmd BufNewFile * silent! call LoadTemplate('%:e', 'all') autocmd BufRead * silent! call LoadTemplate('%:e', 'noTemplate') " Surlignement des champs à remplir dans les templates match 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 /^.\+\ \+:/ match 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 " Lecture configuration locale source $HOME/.vimrc.local " Should be moved into specific, but since Jenkinsfiles do not have extensions... au BufNewFile,BufRead Jenkinsfile setf groovy