" ============================================================================== " Configuration VIM pour Erwin " ============================================================================== " Fichier : C:\Users\Erwin\_vimrc copy " Chemin réel : D:\Users\Erwin\_vimrc (via junction point) " Dernière mise à jour : 2025 " " Structure : " 1. En-tête et configuration de base VIM " 2. Configuration Pathogen " 3. Configuration des types de fichiers et syntaxe " 4. Options générales (encoding, tabs, search, etc.) " 5. Interface utilisateur (curseur, police, cloche) " 6. Raccourcis personnalisés (leader, navigation) " 7. Plugins configuration (via fichiers séparés si nécessaire) " 8. Fonctions personnalisées " 9. Autocompletion par type de fichier " 10. Configurations spécifiques Windows " ============================================================================== " ============================================================================== " 1. CONFIGURATION DE BASE VIM " ============================================================================== " Désactiver la compatibilité avec vi (nécessaire pour toutes les fonctionnalités) set nocompatible set nocp " Charger les configurations d'exemple et Windows source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin " ============================================================================== " 2. CONFIGURATION PATHOGEN " ============================================================================== " Pathogen permet de charger les plugins depuis le dossier bundle/ " Les plugins doivent être installés dans : D:\Users\Erwin\vimfiles\bundle\ " Pathogen se trouve dans : D:\Users\Erwin\vimfiles\autoload\pathogen.vim " " Configuration : charger uniquement les plugins depuis vimfiles\bundle\ " (même emplacement que ce _vimrc) " ============================================================================== " ACTIVATION DES MODULES VIMOUTLINER (AVANT PATHOGEN) " ============================================================================== " IMPORTANT : Cette variable doit être définie AVANT execute pathogen#infect() " pour que les modules VimOutliner (checkbox, tags, etc.) soient chargés " Format : "module1:module2:module3" " Modules disponibles : checkbox, tags, smart_paste, math, newhoist, format, clock if !exists('g:vo_modules_load') let g:vo_modules_load = "checkbox:tags:smart_paste" endif " ============================================================================== " CONFIGURATION MINIBUFEXPLORER (AVANT PATHOGEN) " ============================================================================== " IMPORTANT : Cette variable doit être définie AVANT le chargement du plugin " pour empêcher MiniBufExplorer de créer des liens de surlignage par défaut " Cela permet de définir nos propres couleurs personnalisées let g:did_minibufexplorer_syntax_inits = 1 execute pathogen#infect('bundle/{}') " ============================================================================== " 3. CONFIGURATION DES TYPES DE FICHIERS ET SYNTAXE " ============================================================================== " Activer la détection automatique des types de fichiers filetype plugin indent on " Activer la coloration syntaxique syntax on " Charger tous les fichiers de détection de type de fichier runtime! ftdetect\*.vim " ============================================================================== " 3.1. CONFIGURATION VIMOUTLINER " ============================================================================== " VimOutliner gère les fichiers .otl (outline files) " Plugin installé dans : D:\Users\Erwin\vimfiles\bundle\vimoutliner-master\ " Configuration séparée dans : D:\Users\Erwin\vimoutlinerrc " " IMPORTANT : maplocalleader doit être défini AVANT le chargement de vimoutliner " (c'est fait dans la section 6, mais on le vérifie ici) " " IMPORTANT : g:vo_modules_load doit être défini AVANT le chargement pour activer " les plugins (checkbox, tags, smart_paste, etc.) " Cette variable est définie dans vimoutlinerrc, mais on peut aussi la définir ici " si nécessaire AVANT execute pathogen#infect() " " Vimoutliner charge automatiquement ses plugins via Pathogen " Le fichier vimoutlinerrc est chargé automatiquement par le plugin s'il existe dans $HOME " Charger la configuration vimoutliner personnalisée après Pathogen " Note : VimOutliner cherche automatiquement vimoutlinerrc dans plusieurs emplacements : " - .vimoutlinerrc (avec point) dans $HOME " - vimoutlinerrc (sans point) dans $HOME, $HOME/.vimoutliner, ou $HOME/.vim " - vimoutlinerrc dans le répertoire du plugin " Le fichier est chargé automatiquement par le plugin, pas besoin de le sourcer ici " ============================================================================== " 4. OPTIONS GÉNÉRALES " ============================================================================== " ---- Encodage ---- " Configuration de l'encodage pour supporter UTF-8 set encoding=utf-8 set termencoding=utf-8 set fileencoding=utf-8 " ---- Tabulations et indentation ---- " Configuration par défaut : tabstop=4, shiftwidth=4 set shiftwidth=4 set tabstop=4 " Note : Pour les fichiers .otl, vimoutliner configure tabstop=1 " ---- Recherche ---- " Recherche intelligente : si on utilise des majuscules, recherche sensible à la casse " Si uniquement minuscules, recherche insensible à la casse set smartcase set ignorecase " ---- Cloche système ---- " Désactiver le bip et utiliser un flash visuel à la place set visualbell " ---- Variables d'environnement ---- " Configuration du répertoire temporaire pour diff (évite erreur E97) " Sur Windows, utiliser un chemin valide ou laisser la variable système let $TMP=expand('$TEMP') . '\vimtmp' " ============================================================================== " 5. INTERFACE UTILISATEUR " ============================================================================== " ---- Police de caractères ---- " Définir la police pour l'interface graphique VIM set guifont=Consolas:h10:cANSI " ---- Configuration du curseur ---- " Définir les couleurs et le style du curseur highlight Cursor guifg=black guibg=green highlight iCursor guifg=white guibg=steelblue highlight CursorLine guifg=red guibg=blue " Configuration du style du curseur selon le mode set guicursor=n-v-c:block-Cursor set guicursor+=i:ver100-iCursor set guicursor+=n-v-c:blinkon0 set guicursor+=i:blinkwait11 " ---- Numérotation des lignes ---- " Afficher les numéros de ligne set number " Optionnel : afficher aussi les numéros relatifs " set relativenumber " ---- Statusline ---- " Toujours afficher la barre de statut (nécessaire pour airline/powerline) set laststatus=2 " ---- Colorscheme par défaut ---- " Définir un colorscheme par défaut (sera surchargé par vimoutliner pour les fichiers .otl) " Vous pouvez changer ce colorscheme selon vos préférences " colorscheme desert colorscheme toshiro_light " ============================================================================== " 6. RACCOURCIS PERSONNALISÉS " ============================================================================== " ---- Définition des leaders ---- " Définir les raccourcis de leader pour les commandes personnalisées " IMPORTANT : maplocalleader doit être défini AVANT le chargement de vimoutliner " car vimoutliner utilise maplocalleader pour ses raccourcis (,,c, ,,x, ,,d, etc.) let maplocalleader=",," let mapleader=",," " ---- Édition du vimrc ---- " Ouvrir le fichier _vimrc dans une nouvelle fenêtre nnoremap ev :vsp $MYVIMRC " Recharger le fichier _vimrc nnoremap sv :source $MYVIMRC " ---- Navigation entre fenêtres avec Alt ---- " Utiliser Alt + flèches pour naviguer entre les fenêtres nmap :wincmd k nmap :wincmd j nmap :wincmd h nmap :wincmd l " ---- Navigation entre fenêtres avec Ctrl ---- " Utiliser Ctrl + hjkl pour naviguer entre les fenêtres nnoremap h nnoremap j nnoremap k nnoremap l " ---- Escape avec jk ---- " Utiliser jk comme raccourci pour Escape (plus rapide) inoremap jk " ---- Copier/Coller vers le presse-papiers système ---- " Copier vers le presse-papiers système (Ctrl+C) vmap "+y " Couper vers le presse-papiers système (Ctrl+X) vmap "+c " Coller depuis le presse-papiers système (Ctrl+V en mode visuel) vmap c"+p " Coller depuis le presse-papiers système (Ctrl+V en mode insertion) imap "+pa " ---- Désactiver la recherche sur Escape ---- " Désactiver le surlignage de recherche quand on appuie sur Escape nnoremap :noh " ---- Ouvrir un fichier à gauche ---- " Ouvrir le fichier sous le curseur dans une nouvelle fenêtre à droite " La nouvelle fenêtre fait 25% de la largeur totale, la fenêtre actuelle garde sa position function! OpenFileInNewWindow() " Sauvegarder le numéro de la fenêtre actuelle let l:current_win = winnr() " Créer une nouvelle fenêtre verticale avec le même buffer (pour garder le curseur sur le fichier) execute "rightbelow vsplit" let l:new_win = winnr() " Utiliser gf dans la nouvelle fenêtre pour ouvrir le fichier sous le curseur " gf utilise la logique native de Vim pour trouver les fichiers normal! gf " Redimensionner la nouvelle fenêtre à 25% de la largeur totale let l:new_width = float2nr(&columns * 0.25) execute "vertical resize " . l:new_width " Le curseur est maintenant dans la nouvelle fenêtre avec le fichier ouvert endfunction nnoremap gF :call OpenFileInNewWindow() " ---- Largeur des fenêtres ---- " Redimensionner la fenêtre courante à 100 caractères nnoremap 1 100 " Redimensionner la fenêtre courante à 120 caractères nnoremap 2 120 " Redimensionner la fenêtre courante à toute la largeur nnoremap 3 " ---- Sélectionner le texte collé ---- " Sélectionner le texte qui vient d'être collé nnoremap gp `[v`] " ---- Mettre des guillemets autour d'une sélection ---- " Mettre des guillemets doubles autour du mot sous le curseur nnoremap q" ciw""P " Mettre des guillemets simples autour du mot sous le curseur nnoremap q' ciw''P " ---- Tlist (TagList) ---- " Basculer l'affichage de la liste des tags avec F11 nnoremap :TlistToggle " ---- Ouvrir le fichier courant dans un navigateur ---- " Ouvrir le fichier courant dans Firefox nnoremap f :exe ':silent !firefox %' " Ouvrir le fichier courant dans Chromium nnoremap c :exe ':silent !chromium-browser %' " Ouvrir le fichier courant dans Opera nnoremap o :exe ':silent !opera %' " Ouvrir le fichier courant dans Internet Explorer nnoremap e :exe ':silent !iexplore %' " ---- Zoom police de caractères ---- " Augmenter la taille de la police (leader+) nnoremap + :silent! let &guifont = substitute( \ &guifont, \ ':h\zs\d\+', \ '\=eval(submatch(0)+1)', \ '') " Diminuer la taille de la police (leader-) nnoremap - :silent! let &guifont = substitute( \ &guifont, \ ':h\zs\d\+', \ '\=eval(submatch(0)-1)', \ '') " ---- Abréviations de date ---- " Insérer la date actuelle (dt -> YYYY-MM-DD) iabbrev dt =strftime("%Y-%m-%d") " Insérer la date et l'heure actuelles (dts -> YYYY-MM-DD@HH:MM:SS) iabbrev dts =strftime("%Y-%m-%d@%H:%M:%S") " ---- Chemin du fichier courant ---- " Insérer le chemin complet du dossier du fichier courant (\fn) inoremap \fn =expand("%:p:h") " ============================================================================== " 7. CONFIGURATION DES PLUGINS " ============================================================================== " ---- UltiSnips ---- " Configuration pour les snippets (modèles de code) let g:UltiSnipsSnippetDirectories = ['~/.vim/UltiSnips', 'UltiSnips'] let g:UltiSnipsExpandTrigger = "" let g:UltiSnipsListSnippets = "" let g:UltiSnipsJumpForwardTrigger = "" let g:UltiSnipsJumpBackwardTrigger = "" let g:UltiSnipsUsePythonVersion = 2 " ---- EasyMotion ---- " Plugin de navigation rapide dans le fichier let g:EasyMotion_do_mapping = 0 " Désactiver les mappings par défaut let g:EasyMotion_startofline = 0 " Garder la colonne du curseur lors des mouvements JK " Activer la recherche insensible à la casse let g:EasyMotion_smartcase = 1 " Mappings avec le leader : utiliser pour toutes les commandes " Bi-directional find motion : `s{char}{label}` pour aller n'importe où nmap s (easymotion-s) " Navigation par mots nmap w (easymotion-w) nmap b (easymotion-b) " Navigation par lignes nmap j (easymotion-j) nmap k (easymotion-k) " Alternative : navigation par lignes avec leader simple map j (easymotion-j) map k (easymotion-k) " Personnalisation des couleurs EasyMotion hi link EasyMotionTarget ErrorMsg hi link EasyMotionShade Comment hi link EasyMotionTarget2First MatchParen hi link EasyMotionTarget2Second MatchParen hi link EasyMotionMoveHL Search " ---- MiniBufExplorer (Minibuffer) ---- " Affiche une liste des buffers ouverts dans une fenêtre séparée let g:miniBufExplMapWindowNavVim = 1 " Navigation avec Ctrl+hjkl entre fenêtres let g:miniBufExplMapWindowNavArrows = 1 " Navigation avec flèches let g:miniBufExplMapCTabToBufs = 1 " Ctrl+Tab pour naviguer entre buffers let g:miniBufExplModSelTarget = 1 " Améliore la sélection de buffer let g:miniBufExplUseSingleClick = 1 " Un clic pour ouvrir un buffer let g:miniBufExplMaxHeight = 1 " Hauteur minimale (1 ligne) " Raccourci pour ouvrir/fermer MiniBufExplorer nnoremap mb :MBEToggle " ---- Personnalisation des couleurs MiniBufExplorer ---- " La variable g:did_minibufexplorer_syntax_inits est définie AVANT Pathogen (ligne 52) " pour empêcher le plugin de créer des liens par défaut " Définir les couleurs personnalisées (sans liens) " Buffer actif : surligné en vert (très visible) hi MBEVisibleActiveNormal guifg=white guibg=#00ff00 ctermfg=white ctermbg=green gui=bold cterm=bold hi MBEVisibleActiveChanged guifg=black guibg=#00ff00 ctermfg=black ctermbg=green gui=bold,italic cterm=bold,italic " Buffers modifiés : en jaune/orange pour attirer l'attention hi MBEChanged guifg=black guibg=#ffaa00 ctermfg=black ctermbg=yellow gui=bold cterm=bold hi MBEVisibleChanged guifg=black guibg=#ffaa00 ctermfg=black ctermbg=yellow gui=bold cterm=bold " Buffers normaux : en bleu clair pour une bonne lisibilité hi MBENormal guifg=#0066cc guibg=#e6f2ff ctermfg=blue ctermbg=lightblue hi MBEVisibleNormal guifg=#0066cc guibg=#e6f2ff ctermfg=blue ctermbg=lightblue " Fonction pour réappliquer les couleurs après chaque rafraîchissement de MiniBufExplorer function! ReapplyMiniBufExplColors() " Réappliquer les couleurs (le plugin peut les avoir écrasées) hi MBEVisibleActiveNormal guifg=white guibg=#00ff00 ctermfg=white ctermbg=green gui=bold cterm=bold hi MBEVisibleActiveChanged guifg=black guibg=#00ff00 ctermfg=black ctermbg=green gui=bold,italic cterm=bold,italic hi MBEChanged guifg=black guibg=#ffaa00 ctermfg=black ctermbg=yellow gui=bold cterm=bold hi MBEVisibleChanged guifg=black guibg=#ffaa00 ctermfg=black ctermbg=yellow gui=bold cterm=bold hi MBENormal guifg=#0066cc guibg=#e6f2ff ctermfg=blue ctermbg=lightblue hi MBEVisibleNormal guifg=#0066cc guibg=#e6f2ff ctermfg=blue ctermbg=lightblue endfunction " Appliquer les couleurs après chaque rafraîchissement de MiniBufExplorer autocmd BufEnter *-MiniBufExplorer-* call ReapplyMiniBufExplColors() autocmd WinEnter * if &filetype == "" && bufname("%") =~ "-MiniBufExplorer-" | call ReapplyMiniBufExplColors() | endif " ---- vim-airline (Powerline pour Vim) ---- " Barre de statut améliorée - alternative moderne à Powerline " Ne nécessite pas Python, fonctionne directement avec Vim " Pathogen charge automatiquement le plugin depuis bundle/vim-airline " Configuration minimale pour éviter les bugs let g:airline#extensions#tabline#enabled = 0 " Désactiver la tabline (peut créer une fenêtre supplémentaire) let g:airline#extensions#branch#enabled = 1 " Afficher la branche git si disponible let g:airline#extensions#hunks#enabled = 0 " Désactiver les hunks git (peut causer des problèmes) " Thème simple let g:airline_theme = 'dark' let g:airline_powerline_fonts = 0 " Désactiver les symboles Powerline (évite les bugs d'affichage) " Simplifier les symboles pour éviter les problèmes d'affichage if !exists('g:airline_symbols') let g:airline_symbols = {} endif let g:airline_symbols.branch = 'branch:' let g:airline_symbols.readonly = 'RO' let g:airline_symbols.linenr = 'ln' let g:airline_symbols.dirty = '*' " ---- UndoTree ---- " Visualisation de l'arbre d'annulation (undo tree) " Permet de naviguer dans l'historique des modifications let g:undotree_SetFocusWhenToggle = 1 " Mettre le focus sur UndoTree quand on l'ouvre let g:undotree_WindowLayout = 2 " Layout : arbre à gauche, diff à droite let g:undotree_SplitWidth = 30 " Largeur de la fenêtre UndoTree let g:undotree_DiffpanelHeight = 10 " Hauteur du panneau de différence let g:undotree_DiffAutoOpen = 1 " Ouvrir automatiquement le panneau de différence let g:undotree_TreeNodeShape = '◯' " Forme des nœuds de l'arbre let g:undotree_HighlightChangedText = 1 " Surligner le texte modifié let g:undotree_HighlightChangedWithSign = 1 " Afficher un signe pour les changements " Raccourci pour ouvrir/fermer UndoTree nnoremap u :UndotreeToggle " ---- Calendar ---- " Plugin calendrier avec intégration Google let g:calendar_google_calendar = 1 let g:calendar_google_task = 1 " ---- Personnalisation des couleurs ---- " Commentaires en gris clair highlight Comment guifg=#888888 ctermfg=gray " Numéros de ligne en gris clair highlight LineNr guifg=#cccccc ctermfg=252 " ---- Dictionary & Spelling ---- " Configuration de la correction orthographique highlight clear SpellBad highlight SpellBad cterm=underline,bold ctermfg=red " ============================================================================== " 8. FONCTIONS PERSONNALISÉES " ============================================================================== " ---- Fonctions navigateur ---- " Ajouter les navigateurs au PATH let $PATH = $PATH . ';C:\Program Files (x86)\Internet Explorer' let $PATH = $PATH . ';C:\Program Files (x86)\Mozilla Firefox' " Fonction pour ouvrir l'URL sous le curseur dans Internet Explorer function! BrowserIE() let line = getline(".") exec ":silent !iexplore.exe ".line endfunction " Fonction pour ouvrir l'URL sous le curseur dans Firefox function! BrowserFF() let line = getline(".") exec ":silent !firefox.exe ".line endfunction " Mappings pour les fonctions navigateur map w :call BrowserFF() & map ww :call BrowserIE() & " ---- Fonction MyDiff pour Windows ---- " Configuration de diff pour Windows (évite les erreurs) set diffexpr=MyDiff() function! MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif if $VIMRUNTIME =~ ' ' if &sh =~ '\ ' . arg3 if exists('l:shxq_sav') let &shellxquote=l:shxq_sav endif endfunction " ---- Fonctions de zoom police (alternative) ---- " Fonctions pour augmenter/diminuer la taille de la police " Note : Les raccourcis + et - sont déjà définis dans la section 6 function! AdjustFontSize(amount) let fontname = substitute(&guifont, '^\(.* \)\([1-9][0-9]*\)$', '\1', '') let cursize = substitute(&guifont, '^\(.* \)\([1-9][0-9]*\)$', '\2', '') let newsize = cursize + a:amount if (newsize >= 6) && (newsize <= 16) let newfont = fontname . newsize let &guifont = newfont endif endfunction function! LargerFont() call AdjustFontSize(1) endfunction command! LargerFont call LargerFont() function! SmallerFont() call AdjustFontSize(-1) endfunction command! SmallerFont call SmallerFont() " ============================================================================== " 9. AUTOCOMPLETION PAR TYPE DE FICHIER " ============================================================================== " Configuration de l'autocomplétion (omnifunc) pour chaque type de fichier autocmd FileType python set omnifunc=pythoncomplete#Complete autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS autocmd FileType html set omnifunc=htmlcomplete#CompleteTags autocmd FileType css set omnifunc=csscomplete#CompleteCSS autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags autocmd FileType php set omnifunc=phpcomplete#CompletePHP autocmd FileType c set omnifunc=ccomplete#Complete autocmd FileType votl set omnifunc=votlcomplete#Complete autocmd FileType ps1 set omnifunc=poshcomplete#CompleteCommand " ============================================================================== " 10. CONFIGURATIONS SPÉCIFIQUES WINDOWS " ============================================================================== " ---- Configuration Python ---- " Définir le chemin Python 3 pour VIM set pythonthreehome="C:\Users\Erwin\AppData\Local\Programs\Python\Python310-32" set pythonthreedll="C:\Users\Erwin\AppData\Local\Programs\Python\Python310-32\python310.dll" " ---- PoshComplete (PowerShell completion) ---- " Configuration pour l'autocomplétion PowerShell (si le plugin est installé) let g:PoshComplete_Port='1234' " Note : Les chemins suivants doivent être ajustés selon votre installation " set rtp+=C:\Users\pombette\.vim\bundle\poshcomplete-vim " set rtp+=C:\Users\pombette\.vim\bundle\vimproc.vim\autoload " ============================================================================== " FIN DE LA CONFIGURATION " ==============================================================================