diff options
| author | ertopogo <erwin.t.pombett@gmail.com> | 2025-11-26 19:52:23 +0100 |
|---|---|---|
| committer | ertopogo <erwin.t.pombett@gmail.com> | 2025-11-26 19:52:23 +0100 |
| commit | b33ff5f1fa86a8989ef1be65fd636b0458c0e9d1 (patch) | |
| tree | 8fe8eb9e67450e27c62a0903c8175cecf1f7c50a | |
| parent | 65c3cd080d112ad92aa6399c8c6c8090ccec90cb (diff) | |
Chore: Normalisation des fin de ligne (LF) via .gittattributsmain
| -rw-r--r-- | .gitattributes | 20 | ||||
| -rw-r--r-- | .gitignore | 54 | ||||
| -rw-r--r-- | PROJECT.md | 340 | ||||
| -rw-r--r-- | configs/windows/var_APPDATA_Cursor_User_settings.json | 8 | ||||
| -rw-r--r-- | configs/windows/var_USERPROFILE__vimrc | 1102 | ||||
| -rw-r--r-- | files-config.txt | 26 | ||||
| -rw-r--r-- | path-mapping.json | 24 | ||||
| -rw-r--r-- | scripts/sync-from-project.ps1 | 308 | ||||
| -rw-r--r-- | scripts/sync-to-project.ps1 | 440 |
9 files changed, 1205 insertions, 1117 deletions
diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ee0e0c9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,20 @@ +# Normaliser les fins de ligne sur LF (standard Git/Linux) +# Cela assure que quel que soit l'OS (Windows/Linux), les fichiers sont stockés en LF dans le dépôt +# Et Git gère la conversion automatiquement si besoin + +* text=auto eol=lf + +# Fichiers spécifiques Windows qui doivent garder CRLF (optionnel, mais souvent mieux en LF aussi pour git) +# *.bat text eol=crlf +# *.cmd text eol=crlf +# *.ps1 text eol=lf + +# Fichiers binaires (ne pas toucher aux fins de ligne) +*.exe binary +*.dll binary +*.so binary +*.jpg binary +*.png binary +*.gif binary +*.ico binary + @@ -1,27 +1,27 @@ -# Fichiers temporaires
-*.tmp
-*.temp
-*.log
-
-# Fichiers système
-.DS_Store
-Thumbs.db
-desktop.ini
-
-# Fichiers d'éditeur
-.vscode/
-.idea/
-*.swp
-*.swo
-*~
-
-# Fichiers de sauvegarde
-*.bak
-*.backup
-
-# Ne pas ignorer les fichiers de configuration et scripts
-!files-config.txt
-!path-mapping.json
-!scripts/
-!configs/
-
+# Fichiers temporaires +*.tmp +*.temp +*.log + +# Fichiers système +.DS_Store +Thumbs.db +desktop.ini + +# Fichiers d'éditeur +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Fichiers de sauvegarde +*.bak +*.backup + +# Ne pas ignorer les fichiers de configuration et scripts +!files-config.txt +!path-mapping.json +!scripts/ +!configs/ + @@ -1,136 +1,204 @@ -# Projet : Synchronisation de fichiers de configuration
-
-## Objectif
-
-Ce projet permet de centraliser et synchroniser tous les fichiers de configuration (vim, bash, screen, cursor, documentation, etc.) depuis Windows et WSL vers un dépôt git sur chillka.
-
-## Structure du projet
-
-```
-config-files-keyvault/
-├── .git/ # Dépôt git local
-├── configs/
-│ ├── windows/ # Fichiers provenant de Windows
-│ └── wsl/ # Fichiers provenant de WSL
-├── scripts/
-│ ├── sync-to-project.ps1 # Script pour copier fichiers vers le projet
-│ └── sync-from-project.ps1 # Script pour restaurer fichiers depuis le projet
-├── files-config.txt # Liste des fichiers à synchroniser
-├── path-mapping.json # Mapping chemins originaux <-> chemins dans le projet
-└── PROJECT.md # Documentation du projet
-```
-
-## Utilisation
-
-### 1. Ajouter des fichiers à synchroniser
-
-Éditer le fichier `files-config.txt` et ajouter les fichiers au format :
-```
-windows|%USERPROFILE%\.vimrc
-wsl|~/.bashrc
-```
-
-### 2. Copier les fichiers vers le projet
-
-Exécuter le script PowerShell :
-```powershell
-.\scripts\sync-to-project.ps1
-```
-
-Ce script va :
-- Lire `files-config.txt`
-- Copier chaque fichier vers `configs/{system}/`
-- Créer/mettre à jour `path-mapping.json` avec les chemins originaux
-
-### 3. Restaurer les fichiers depuis le projet
-
-Exécuter le script PowerShell :
-```powershell
-.\scripts\sync-from-project.ps1
-```
-
-Ce script va :
-- Lire `path-mapping.json`
-- Copier chaque fichier depuis `configs/{system}/` vers son emplacement original
-- Créer les répertoires parents si nécessaire
-
-### 4. Synchronisation Git
-
-Le dépôt git est configuré avec le remote :
-```
-toshiro@chillka:/var/data/git/repositories/config-files-keyvault.git
-```
-
-Pour synchroniser :
-```powershell
-git add .
-git commit -m "Mise à jour des fichiers de configuration"
-git push origin main
-```
-
-### 5. Diagnostic et Commandes Git Utiles
-
-Pour vérifier l'état du dépôt et diagnostiquer les problèmes :
-
-**Voir les dépôts distants configurés :**
-```powershell
-git remote -v
-```
-
-**Voir l'historique des commits :**
-```powershell
-git log --oneline --graph --decorate --all
-```
-
-**Voir l'état des fichiers (modifiés, ajoutés, non suivis) :**
-```powershell
-git status
-```
-
-**Créer le dépôt distant sur le serveur (si "fatal: repository not found") :**
-```powershell
-ssh toshiro@chillka "mkdir -p /var/data/git/repositories/config-files-keyvault.git && git init --bare /var/data/git/repositories/config-files-keyvault.git"
-```
-
-## Format de fichiers-config.txt
-
-Chaque ligne doit suivre le format :
-```
-{système}|{chemin}
-```
-
-Où :
-- `{système}` : `windows` ou `wsl`
-- `{chemin}` : Chemin du fichier avec support des variables d'environnement Windows (`%VAR%`) ou expansion WSL (`~`)
-
-Exemples :
-```
-windows|%USERPROFILE%\.vimrc
-windows|%APPDATA%\Cursor\User\settings.json
-wsl|~/.bashrc
-wsl|~/.bash_aliases
-wsl|~/.screenrc
-```
-
-## Format de path-mapping.json
-
-Ce fichier est généré automatiquement par le script `sync-to-project.ps1`. Il contient le mapping entre les chemins originaux et les chemins dans le projet :
-
-```json
-{
- "windows": {
- "%USERPROFILE%\\.vimrc": "configs/windows/.vimrc"
- },
- "wsl": {
- "~/.bashrc": "configs/wsl/.bashrc"
- }
-}
-```
-
-## Notes
-
-- Les fichiers sont organisés par système d'origine (windows/wsl) pour faciliter la gestion
-- Le mapping des chemins permet de restaurer les fichiers à leur emplacement exact
-- Les répertoires parents sont créés automatiquement lors de la restauration
-- Les fichiers WSL sont accessibles via le chemin Windows `\\wsl.localhost\Ubuntu\` pour une meilleure performance et fiabilité
-
+# Projet : Synchronisation de fichiers de configuration + +## Objectif + +Ce projet permet de centraliser et synchroniser tous les fichiers de configuration (vim, bash, screen, cursor, documentation, etc.) depuis Windows et WSL vers un dépôt git sur chillka. + +## Structure du projet + +``` +config-files-keyvault/ +├── .git/ # Dépôt git local +├── configs/ +│ ├── windows/ # Fichiers provenant de Windows +│ └── wsl/ # Fichiers provenant de WSL +├── scripts/ +│ ├── sync-to-project.ps1 # Script pour copier fichiers vers le projet +│ └── sync-from-project.ps1 # Script pour restaurer fichiers depuis le projet +├── files-config.txt # Liste des fichiers à synchroniser +├── path-mapping.json # Mapping chemins originaux <-> chemins dans le projet +└── PROJECT.md # Documentation du projet +``` + +## Utilisation + +### 1. Ajouter des fichiers à synchroniser + +Éditer le fichier `files-config.txt` et ajouter les fichiers au format : +``` +windows|%USERPROFILE%\.vimrc +wsl|~/.bashrc +``` + +### 2. Copier les fichiers vers le projet + +Exécuter le script PowerShell : +```powershell +.\scripts\sync-to-project.ps1 +``` + +Ce script va : +- Lire `files-config.txt` +- Copier chaque fichier vers `configs/{system}/` +- Créer/mettre à jour `path-mapping.json` avec les chemins originaux + +### 3. Restaurer les fichiers depuis le projet + +Exécuter le script PowerShell : +```powershell +.\scripts\sync-from-project.ps1 +``` + +Ce script va : +- Lire `path-mapping.json` +- Copier chaque fichier depuis `configs/{system}/` vers son emplacement original +- Créer les répertoires parents si nécessaire + +### 4. Synchronisation Git + +Le dépôt git est configuré avec le remote : +``` +toshiro@chillka:/var/data/git/repositories/config-files-keyvault.git +``` + +**Pousser les changements (workflow standard) :** +```powershell +git add . +git commit -m "Message décrivant les changements" +git push +``` + +**Premier push (si la branche n'est pas encore liée) :** +```powershell +git push --set-upstream origin main +``` + +### 5. Diagnostic et Commandes Git Utiles + +Pour vérifier l'état du dépôt et diagnostiquer les problèmes : + +**Voir les dépôts distants configurés :** +```powershell +git remote -v +``` + +**Voir l'historique des commits :** +```powershell +git log --oneline --graph --decorate --all +``` + +**Voir l'état des fichiers (modifiés, ajoutés, non suivis) :** +```powershell +git status +``` + +**Créer le dépôt distant sur le serveur (si "fatal: repository not found") :** +```powershell +ssh toshiro@chillka "mkdir -p /var/data/git/repositories/config-files-keyvault.git && git init --bare /var/data/git/repositories/config-files-keyvault.git" +``` + +### 6. Administration du Serveur (Chillka) + +Commandes pour interagir directement avec le dépôt distant via SSH : + +**Vérifier si le dépôt existe et voir les 5 derniers commits sur le serveur :** +```powershell +ssh toshiro@chillka "cd /var/data/git/repositories/config-files-keyvault.git && git log --oneline -n 5" +``` + +**Vérifier l'intégrité du dépôt distant (fsck) :** +```powershell +ssh toshiro@chillka "cd /var/data/git/repositories/config-files-keyvault.git && git fsck" +``` + +### 7. Gestion des Branches et Workflow Avancé + +**Scénario A : Créer une branche locale et la publier** +```powershell +# 1. Créer la branche et basculer dessus +git checkout -b ma-nouvelle-branche + +# 2. Travailler, ajouter, commiter... +git add . +git commit -m "Travail sur ma branche" + +# 3. Publier la branche sur le serveur (crée la branche distante) +git push -u origin ma-nouvelle-branche +``` + +**Scénario B : Récupérer une branche existante sur le serveur** +```powershell +# 1. Mettre à jour la liste des branches distantes +git fetch --all + +# 2. Voir toutes les branches (locales et distantes) +git branch -a + +# 3. Créer une copie locale d'une branche distante et basculer dessus +# (Git comprend automatiquement qu'il doit suivre origin/nom-branche) +git checkout nom-branche-distante +``` + +**Maintenance et Nettoyage (Admin)** +```powershell +# Supprimer une branche locale +git branch -d nom-branche + +# Supprimer une branche sur le serveur (DANGER) +git push origin --delete nom-branche + +# Nettoyer les références locales vers des branches distantes supprimées +git fetch --prune +``` + +**Commandes utiles pour l'historique** +```powershell +# Voir les différences entre la branche actuelle et main +git diff main + +# Voir quel fichier a été modifié par qui et quand (blame) +git blame chemin/vers/fichier +``` + +## Format de fichiers-config.txt + +Chaque ligne doit suivre le format : +``` +{système}|{chemin} +``` + +Où : +- `{système}` : `windows` ou `wsl` +- `{chemin}` : Chemin du fichier avec support des variables d'environnement Windows (`%VAR%`) ou expansion WSL (`~`) + +Exemples : +``` +windows|%USERPROFILE%\.vimrc +windows|%APPDATA%\Cursor\User\settings.json +wsl|~/.bashrc +wsl|~/.bash_aliases +wsl|~/.screenrc +``` + +## Format de path-mapping.json + +Ce fichier est généré automatiquement par le script `sync-to-project.ps1`. Il contient le mapping entre les chemins originaux et les chemins dans le projet : + +```json +{ + "windows": { + "%USERPROFILE%\\.vimrc": "configs/windows/.vimrc" + }, + "wsl": { + "~/.bashrc": "configs/wsl/.bashrc" + } +} +``` + +## Notes + +- Les fichiers sont organisés par système d'origine (windows/wsl) pour faciliter la gestion +- Le mapping des chemins permet de restaurer les fichiers à leur emplacement exact +- Les répertoires parents sont créés automatiquement lors de la restauration +- Les fichiers WSL sont accessibles via le chemin Windows `\\wsl.localhost\Ubuntu\` pour une meilleure performance et fiabilité + diff --git a/configs/windows/var_APPDATA_Cursor_User_settings.json b/configs/windows/var_APPDATA_Cursor_User_settings.json index a9c7f11..93377b8 100644 --- a/configs/windows/var_APPDATA_Cursor_User_settings.json +++ b/configs/windows/var_APPDATA_Cursor_User_settings.json @@ -1,5 +1,5 @@ -{
- "window.commandCenter": true,
- "workbench.colorTheme": "Default Light Modern",
- "powershell.powerShellDefaultVersion": "Windows PowerShell (x86)"
+{ + "window.commandCenter": true, + "workbench.colorTheme": "Default Light Modern", + "powershell.powerShellDefaultVersion": "Windows PowerShell (x86)" }
\ No newline at end of file diff --git a/configs/windows/var_USERPROFILE__vimrc b/configs/windows/var_USERPROFILE__vimrc index d0eb449..b9caa86 100644 --- a/configs/windows/var_USERPROFILE__vimrc +++ b/configs/windows/var_USERPROFILE__vimrc @@ -1,551 +1,551 @@ -" ==============================================================================
-" 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 <leader>ev :vsp $MYVIMRC<CR>
-" Recharger le fichier _vimrc
-nnoremap <leader>sv :source $MYVIMRC<CR>
-
-" ---- Navigation entre fenêtres avec Alt ----
-" Utiliser Alt + flèches pour naviguer entre les fenêtres
-nmap <silent> <A-Up> :wincmd k<CR>
-nmap <silent> <A-Down> :wincmd j<CR>
-nmap <silent> <A-Left> :wincmd h<CR>
-nmap <silent> <A-Right> :wincmd l<CR>
-
-" ---- Navigation entre fenêtres avec Ctrl ----
-" Utiliser Ctrl + hjkl pour naviguer entre les fenêtres
-nnoremap <C-h> <C-w>h
-nnoremap <C-j> <C-w>j
-nnoremap <C-k> <C-w>k
-nnoremap <C-l> <C-w>l
-
-" ---- Escape avec jk ----
-" Utiliser jk comme raccourci pour Escape (plus rapide)
-inoremap jk <esc>
-
-" ---- Copier/Coller vers le presse-papiers système ----
-" Copier vers le presse-papiers système (Ctrl+C)
-vmap <C-c> "+y
-" Couper vers le presse-papiers système (Ctrl+X)
-vmap <C-x> "+c
-" Coller depuis le presse-papiers système (Ctrl+V en mode visuel)
-vmap <C-v> c<ESC>"+p
-" Coller depuis le presse-papiers système (Ctrl+V en mode insertion)
-imap <C-v> <ESC>"+pa
-
-" ---- Désactiver la recherche sur Escape ----
-" Désactiver le surlignage de recherche quand on appuie sur Escape
-nnoremap <Esc> :noh<CR><Esc>
-
-" ---- 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 <silent> gF :call OpenFileInNewWindow()<CR>
-
-" ---- Largeur des fenêtres ----
-" Redimensionner la fenêtre courante à 100 caractères
-nnoremap <C-w>1 <C-w>100<bar>
-" Redimensionner la fenêtre courante à 120 caractères
-nnoremap <C-w>2 <C-w>120<bar>
-" Redimensionner la fenêtre courante à toute la largeur
-nnoremap <C-w>3 <C-w><bar>
-
-" ---- 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 <Leader>q" ciw""<Esc>P
-" Mettre des guillemets simples autour du mot sous le curseur
-nnoremap <Leader>q' ciw''<Esc>P
-
-" ---- Tlist (TagList) ----
-" Basculer l'affichage de la liste des tags avec F11
-nnoremap <F11> :TlistToggle<cr>
-
-" ---- Ouvrir le fichier courant dans un navigateur ----
-" Ouvrir le fichier courant dans Firefox
-nnoremap <F12>f :exe ':silent !firefox %'<CR>
-" Ouvrir le fichier courant dans Chromium
-nnoremap <F12>c :exe ':silent !chromium-browser %'<CR>
-" Ouvrir le fichier courant dans Opera
-nnoremap <F12>o :exe ':silent !opera %'<CR>
-" Ouvrir le fichier courant dans Internet Explorer
-nnoremap <F12>e :exe ':silent !iexplore %'<CR>
-
-" ---- Zoom police de caractères ----
-" Augmenter la taille de la police (leader+)
-nnoremap <leader>+ :silent! let &guifont = substitute(
- \ &guifont,
- \ ':h\zs\d\+',
- \ '\=eval(submatch(0)+1)',
- \ '')<CR>
-" Diminuer la taille de la police (leader-)
-nnoremap <leader>- :silent! let &guifont = substitute(
- \ &guifont,
- \ ':h\zs\d\+',
- \ '\=eval(submatch(0)-1)',
- \ '')<CR>
-
-" ---- Abréviations de date ----
-" Insérer la date actuelle (dt -> YYYY-MM-DD)
-iabbrev dt <c-r>=strftime("%Y-%m-%d")<CR>
-" Insérer la date et l'heure actuelles (dts -> YYYY-MM-DD@HH:MM:SS)
-iabbrev dts <c-r>=strftime("%Y-%m-%d@%H:%M:%S")<CR>
-
-" ---- Chemin du fichier courant ----
-" Insérer le chemin complet du dossier du fichier courant (\fn)
-inoremap \fn <C-R>=expand("%:p:h")<CR>
-
-" ==============================================================================
-" 7. CONFIGURATION DES PLUGINS
-" ==============================================================================
-
-" ---- UltiSnips ----
-" Configuration pour les snippets (modèles de code)
-let g:UltiSnipsSnippetDirectories = ['~/.vim/UltiSnips', 'UltiSnips']
-let g:UltiSnipsExpandTrigger = "<tab>"
-let g:UltiSnipsListSnippets = "<c-tab>"
-let g:UltiSnipsJumpForwardTrigger = "<c-j>"
-let g:UltiSnipsJumpBackwardTrigger = "<c-k>"
-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 <leader><leader> pour toutes les commandes
-" Bi-directional find motion : `<leader><leader>s{char}{label}` pour aller n'importe où
-nmap <leader><leader>s <Plug>(easymotion-s)
-" Navigation par mots
-nmap <leader><leader>w <Plug>(easymotion-w)
-nmap <leader><leader>b <Plug>(easymotion-b)
-" Navigation par lignes
-nmap <leader><leader>j <Plug>(easymotion-j)
-nmap <leader><leader>k <Plug>(easymotion-k)
-" Alternative : navigation par lignes avec leader simple
-map <leader>j <Plug>(easymotion-j)
-map <leader>k <Plug>(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 <leader>mb :MBEToggle<CR>
-
-" ---- 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 <leader>u :UndotreeToggle<CR>
-
-" ---- 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 <Leader>w :call BrowserFF() &<CR>
-map <Leader>ww :call BrowserIE() &<CR>
-
-" ---- 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 =~ '\<cmd'
- if empty(&shellxquote)
- let l:shxq_sav = ''
- set shellxquote&
- endif
- let cmd = '"' . $VIMRUNTIME . '\diff"'
- else
- let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
- endif
- else
- let cmd = $VIMRUNTIME . '\diff'
- endif
- silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . 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 <leader>+ et <leader>- 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
-" ==============================================================================
+" ============================================================================== +" 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 <leader>ev :vsp $MYVIMRC<CR> +" Recharger le fichier _vimrc +nnoremap <leader>sv :source $MYVIMRC<CR> + +" ---- Navigation entre fenêtres avec Alt ---- +" Utiliser Alt + flèches pour naviguer entre les fenêtres +nmap <silent> <A-Up> :wincmd k<CR> +nmap <silent> <A-Down> :wincmd j<CR> +nmap <silent> <A-Left> :wincmd h<CR> +nmap <silent> <A-Right> :wincmd l<CR> + +" ---- Navigation entre fenêtres avec Ctrl ---- +" Utiliser Ctrl + hjkl pour naviguer entre les fenêtres +nnoremap <C-h> <C-w>h +nnoremap <C-j> <C-w>j +nnoremap <C-k> <C-w>k +nnoremap <C-l> <C-w>l + +" ---- Escape avec jk ---- +" Utiliser jk comme raccourci pour Escape (plus rapide) +inoremap jk <esc> + +" ---- Copier/Coller vers le presse-papiers système ---- +" Copier vers le presse-papiers système (Ctrl+C) +vmap <C-c> "+y +" Couper vers le presse-papiers système (Ctrl+X) +vmap <C-x> "+c +" Coller depuis le presse-papiers système (Ctrl+V en mode visuel) +vmap <C-v> c<ESC>"+p +" Coller depuis le presse-papiers système (Ctrl+V en mode insertion) +imap <C-v> <ESC>"+pa + +" ---- Désactiver la recherche sur Escape ---- +" Désactiver le surlignage de recherche quand on appuie sur Escape +nnoremap <Esc> :noh<CR><Esc> + +" ---- 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 <silent> gF :call OpenFileInNewWindow()<CR> + +" ---- Largeur des fenêtres ---- +" Redimensionner la fenêtre courante à 100 caractères +nnoremap <C-w>1 <C-w>100<bar> +" Redimensionner la fenêtre courante à 120 caractères +nnoremap <C-w>2 <C-w>120<bar> +" Redimensionner la fenêtre courante à toute la largeur +nnoremap <C-w>3 <C-w><bar> + +" ---- 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 <Leader>q" ciw""<Esc>P +" Mettre des guillemets simples autour du mot sous le curseur +nnoremap <Leader>q' ciw''<Esc>P + +" ---- Tlist (TagList) ---- +" Basculer l'affichage de la liste des tags avec F11 +nnoremap <F11> :TlistToggle<cr> + +" ---- Ouvrir le fichier courant dans un navigateur ---- +" Ouvrir le fichier courant dans Firefox +nnoremap <F12>f :exe ':silent !firefox %'<CR> +" Ouvrir le fichier courant dans Chromium +nnoremap <F12>c :exe ':silent !chromium-browser %'<CR> +" Ouvrir le fichier courant dans Opera +nnoremap <F12>o :exe ':silent !opera %'<CR> +" Ouvrir le fichier courant dans Internet Explorer +nnoremap <F12>e :exe ':silent !iexplore %'<CR> + +" ---- Zoom police de caractères ---- +" Augmenter la taille de la police (leader+) +nnoremap <leader>+ :silent! let &guifont = substitute( + \ &guifont, + \ ':h\zs\d\+', + \ '\=eval(submatch(0)+1)', + \ '')<CR> +" Diminuer la taille de la police (leader-) +nnoremap <leader>- :silent! let &guifont = substitute( + \ &guifont, + \ ':h\zs\d\+', + \ '\=eval(submatch(0)-1)', + \ '')<CR> + +" ---- Abréviations de date ---- +" Insérer la date actuelle (dt -> YYYY-MM-DD) +iabbrev dt <c-r>=strftime("%Y-%m-%d")<CR> +" Insérer la date et l'heure actuelles (dts -> YYYY-MM-DD@HH:MM:SS) +iabbrev dts <c-r>=strftime("%Y-%m-%d@%H:%M:%S")<CR> + +" ---- Chemin du fichier courant ---- +" Insérer le chemin complet du dossier du fichier courant (\fn) +inoremap \fn <C-R>=expand("%:p:h")<CR> + +" ============================================================================== +" 7. CONFIGURATION DES PLUGINS +" ============================================================================== + +" ---- UltiSnips ---- +" Configuration pour les snippets (modèles de code) +let g:UltiSnipsSnippetDirectories = ['~/.vim/UltiSnips', 'UltiSnips'] +let g:UltiSnipsExpandTrigger = "<tab>" +let g:UltiSnipsListSnippets = "<c-tab>" +let g:UltiSnipsJumpForwardTrigger = "<c-j>" +let g:UltiSnipsJumpBackwardTrigger = "<c-k>" +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 <leader><leader> pour toutes les commandes +" Bi-directional find motion : `<leader><leader>s{char}{label}` pour aller n'importe où +nmap <leader><leader>s <Plug>(easymotion-s) +" Navigation par mots +nmap <leader><leader>w <Plug>(easymotion-w) +nmap <leader><leader>b <Plug>(easymotion-b) +" Navigation par lignes +nmap <leader><leader>j <Plug>(easymotion-j) +nmap <leader><leader>k <Plug>(easymotion-k) +" Alternative : navigation par lignes avec leader simple +map <leader>j <Plug>(easymotion-j) +map <leader>k <Plug>(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 <leader>mb :MBEToggle<CR> + +" ---- 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 <leader>u :UndotreeToggle<CR> + +" ---- 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 <Leader>w :call BrowserFF() &<CR> +map <Leader>ww :call BrowserIE() &<CR> + +" ---- 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 =~ '\<cmd' + if empty(&shellxquote) + let l:shxq_sav = '' + set shellxquote& + endif + let cmd = '"' . $VIMRUNTIME . '\diff"' + else + let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' + endif + else + let cmd = $VIMRUNTIME . '\diff' + endif + silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . 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 <leader>+ et <leader>- 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 +" ============================================================================== diff --git a/files-config.txt b/files-config.txt index 1011005..8b17e23 100644 --- a/files-config.txt +++ b/files-config.txt @@ -1,13 +1,13 @@ -# Format: {système}|{chemin}
-# Système: windows ou wsl
-# Chemin: supporte les variables d'environnement Windows (%VAR%) et expansion WSL (~)
-#
-# Exemples:
-windows|%USERPROFILE%\_vimrc
-windows|%APPDATA%\Cursor\User\settings.json
-windows|%APPDATA%\Mozilla\NativeMessagingHosts\tridactyl.json
-windows|%USERPROFILE%\.tridactylrc
-wsl|~/.bashrc
-wsl|~/.bash_aliases
-wsl|~/.screenrc
-
+# Format: {système}|{chemin} +# Système: windows ou wsl +# Chemin: supporte les variables d'environnement Windows (%VAR%) et expansion WSL (~) +# +# Exemples: +windows|%USERPROFILE%\_vimrc +windows|%APPDATA%\Cursor\User\settings.json +windows|%APPDATA%\Mozilla\NativeMessagingHosts\tridactyl.json +windows|%USERPROFILE%\.tridactylrc +wsl|~/.bashrc +wsl|~/.bash_aliases +wsl|~/.screenrc + diff --git a/path-mapping.json b/path-mapping.json index d34b89d..24fe977 100644 --- a/path-mapping.json +++ b/path-mapping.json @@ -1,12 +1,12 @@ -{
- "windows": {
- "%APPDATA%\\Cursor\\User\\settings.json": "configs\\windows\\var_APPDATA_Cursor_User_settings.json",
- "%USERPROFILE%\\_vimrc": "configs\\windows\\var_USERPROFILE__vimrc",
- "%APPDATA%\\Mozilla\\NativeMessagingHosts\\tridactyl.json": "configs\\windows\\var_APPDATA_Mozilla_NativeMessagingHosts_tridactyl.json",
- "%USERPROFILE%\\.tridactylrc": "configs\\windows\\var_USERPROFILE_.tridactylrc"
- },
- "wsl": {
- "~/.bashrc": "configs\\wsl\\home_.bashrc",
- "~/.screenrc": "configs\\wsl\\home_.screenrc"
- }
-}
+{ + "windows": { + "%APPDATA%\\Cursor\\User\\settings.json": "configs\\windows\\var_APPDATA_Cursor_User_settings.json", + "%USERPROFILE%\\_vimrc": "configs\\windows\\var_USERPROFILE__vimrc", + "%APPDATA%\\Mozilla\\NativeMessagingHosts\\tridactyl.json": "configs\\windows\\var_APPDATA_Mozilla_NativeMessagingHosts_tridactyl.json", + "%USERPROFILE%\\.tridactylrc": "configs\\windows\\var_USERPROFILE_.tridactylrc" + }, + "wsl": { + "~/.bashrc": "configs\\wsl\\home_.bashrc", + "~/.screenrc": "configs\\wsl\\home_.screenrc" + } +} diff --git a/scripts/sync-from-project.ps1 b/scripts/sync-from-project.ps1 index 73ba1c5..7ad43a7 100644 --- a/scripts/sync-from-project.ps1 +++ b/scripts/sync-from-project.ps1 @@ -1,154 +1,154 @@ -# Script pour restaurer les fichiers de configuration depuis le projet
-# Lit path-mapping.json et copie chaque fichier vers son emplacement original
-
-param(
- [string]$MappingFile = "path-mapping.json"
-)
-
-$ErrorActionPreference = "Stop"
-
-# Vérifier que le fichier de mapping existe
-if (-not (Test-Path $MappingFile)) {
- Write-Error "Le fichier de mapping '$MappingFile' n'existe pas. Exécutez d'abord sync-to-project.ps1"
- exit 1
-}
-
-# Charger le mapping
-try {
- $mapping = Get-Content $MappingFile -Raw | ConvertFrom-Json
-} catch {
- Write-Error "Impossible de charger le fichier de mapping: $_"
- exit 1
-}
-
-$restoredCount = 0
-$skippedCount = 0
-$errorCount = 0
-
-# Fonction pour résoudre un chemin Windows
-function Resolve-WindowsPath {
- param([string]$path)
-
- # Remplacer les variables d'environnement
- $resolved = $path
- $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
- $resolved = $resolved -replace '%APPDATA%', $env:APPDATA
- $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA
- $resolved = $resolved -replace '%HOME%', $env:HOME
-
- # Remplacer les autres variables d'environnement
- $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved)
-
- return $resolved
-}
-
-# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible
-function Resolve-WSLPath {
- param([string]$path)
-
- # Détecter la distribution WSL (par défaut Ubuntu)
- $wslDistro = "Ubuntu"
-
- # Expansion de ~ vers /home/toshiro (ou autre utilisateur)
- if ($path -match '^~') {
- $homePath = wsl bash -c "echo ~" 2>$null
- if ($LASTEXITCODE -eq 0 -and $homePath) {
- $path = $path -replace '^~', $homePath
- } else {
- # Fallback: utiliser toshiro
- $path = $path -replace '^~', "/home/toshiro"
- }
- }
-
- # Convertir le chemin WSL en chemin Windows accessible
- # Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc
- if ($path -match '^/') {
- # Enlever le slash initial
- $relativePath = $path.Substring(1)
- # Convertir en chemin Windows
- $windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\'
- return $windowsPath
- }
-
- return $path
-}
-
-# Traiter les fichiers Windows
-if ($mapping.windows) {
- $mapping.windows.PSObject.Properties | ForEach-Object {
- $originalPath = $_.Name
- $projectPath = $_.Value
-
- try {
- # Vérifier que le fichier source existe dans le projet
- if (-not (Test-Path $projectPath)) {
- Write-Warning "Fichier source introuvable dans le projet: $projectPath"
- $skippedCount++
- return
- }
-
- # Résoudre le chemin de destination
- $destinationPath = Resolve-WindowsPath $originalPath
-
- # Créer le répertoire parent si nécessaire
- $destinationDir = Split-Path $destinationPath -Parent
- if ($destinationDir -and -not (Test-Path $destinationDir)) {
- New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null
- Write-Host "Créé le répertoire: $destinationDir"
- }
-
- # Copier le fichier
- Copy-Item -Path $projectPath -Destination $destinationPath -Force
-
- Write-Host "Restauré: $projectPath -> $destinationPath"
- $restoredCount++
-
- } catch {
- Write-Error "Erreur lors de la restauration de '$originalPath': $_"
- $errorCount++
- }
- }
-}
-
-# Traiter les fichiers WSL
-if ($mapping.wsl) {
- $mapping.wsl.PSObject.Properties | ForEach-Object {
- $originalPath = $_.Name
- $projectPath = $_.Value
-
- try {
- # Vérifier que le fichier source existe dans le projet
- if (-not (Test-Path $projectPath)) {
- Write-Warning "Fichier source introuvable dans le projet: $projectPath"
- $skippedCount++
- return
- }
-
- # Résoudre le chemin de destination WSL en chemin Windows accessible
- $destinationPath = Resolve-WSLPath $originalPath
-
- # Créer le répertoire parent si nécessaire
- $destinationDir = Split-Path $destinationPath -Parent
- if ($destinationDir -and -not (Test-Path $destinationDir)) {
- New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null
- Write-Host "Créé le répertoire: $destinationDir"
- }
-
- # Copier le fichier directement (maintenant que le chemin WSL est converti en chemin Windows)
- Copy-Item -Path $projectPath -Destination $destinationPath -Force
-
- Write-Host "Restauré (WSL): $projectPath -> $destinationPath"
- $restoredCount++
-
- } catch {
- Write-Error "Erreur lors de la restauration WSL de '$originalPath': $_"
- $errorCount++
- }
- }
-}
-
-Write-Host "`nRésumé:"
-Write-Host " Fichiers restaurés: $restoredCount"
-Write-Host " Fichiers ignorés: $skippedCount"
-Write-Host " Erreurs: $errorCount"
-
+# Script pour restaurer les fichiers de configuration depuis le projet +# Lit path-mapping.json et copie chaque fichier vers son emplacement original + +param( + [string]$MappingFile = "path-mapping.json" +) + +$ErrorActionPreference = "Stop" + +# Vérifier que le fichier de mapping existe +if (-not (Test-Path $MappingFile)) { + Write-Error "Le fichier de mapping '$MappingFile' n'existe pas. Exécutez d'abord sync-to-project.ps1" + exit 1 +} + +# Charger le mapping +try { + $mapping = Get-Content $MappingFile -Raw | ConvertFrom-Json +} catch { + Write-Error "Impossible de charger le fichier de mapping: $_" + exit 1 +} + +$restoredCount = 0 +$skippedCount = 0 +$errorCount = 0 + +# Fonction pour résoudre un chemin Windows +function Resolve-WindowsPath { + param([string]$path) + + # Remplacer les variables d'environnement + $resolved = $path + $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE + $resolved = $resolved -replace '%APPDATA%', $env:APPDATA + $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA + $resolved = $resolved -replace '%HOME%', $env:HOME + + # Remplacer les autres variables d'environnement + $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved) + + return $resolved +} + +# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible +function Resolve-WSLPath { + param([string]$path) + + # Détecter la distribution WSL (par défaut Ubuntu) + $wslDistro = "Ubuntu" + + # Expansion de ~ vers /home/toshiro (ou autre utilisateur) + if ($path -match '^~') { + $homePath = wsl bash -c "echo ~" 2>$null + if ($LASTEXITCODE -eq 0 -and $homePath) { + $path = $path -replace '^~', $homePath + } else { + # Fallback: utiliser toshiro + $path = $path -replace '^~', "/home/toshiro" + } + } + + # Convertir le chemin WSL en chemin Windows accessible + # Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc + if ($path -match '^/') { + # Enlever le slash initial + $relativePath = $path.Substring(1) + # Convertir en chemin Windows + $windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\' + return $windowsPath + } + + return $path +} + +# Traiter les fichiers Windows +if ($mapping.windows) { + $mapping.windows.PSObject.Properties | ForEach-Object { + $originalPath = $_.Name + $projectPath = $_.Value + + try { + # Vérifier que le fichier source existe dans le projet + if (-not (Test-Path $projectPath)) { + Write-Warning "Fichier source introuvable dans le projet: $projectPath" + $skippedCount++ + return + } + + # Résoudre le chemin de destination + $destinationPath = Resolve-WindowsPath $originalPath + + # Créer le répertoire parent si nécessaire + $destinationDir = Split-Path $destinationPath -Parent + if ($destinationDir -and -not (Test-Path $destinationDir)) { + New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null + Write-Host "Créé le répertoire: $destinationDir" + } + + # Copier le fichier + Copy-Item -Path $projectPath -Destination $destinationPath -Force + + Write-Host "Restauré: $projectPath -> $destinationPath" + $restoredCount++ + + } catch { + Write-Error "Erreur lors de la restauration de '$originalPath': $_" + $errorCount++ + } + } +} + +# Traiter les fichiers WSL +if ($mapping.wsl) { + $mapping.wsl.PSObject.Properties | ForEach-Object { + $originalPath = $_.Name + $projectPath = $_.Value + + try { + # Vérifier que le fichier source existe dans le projet + if (-not (Test-Path $projectPath)) { + Write-Warning "Fichier source introuvable dans le projet: $projectPath" + $skippedCount++ + return + } + + # Résoudre le chemin de destination WSL en chemin Windows accessible + $destinationPath = Resolve-WSLPath $originalPath + + # Créer le répertoire parent si nécessaire + $destinationDir = Split-Path $destinationPath -Parent + if ($destinationDir -and -not (Test-Path $destinationDir)) { + New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null + Write-Host "Créé le répertoire: $destinationDir" + } + + # Copier le fichier directement (maintenant que le chemin WSL est converti en chemin Windows) + Copy-Item -Path $projectPath -Destination $destinationPath -Force + + Write-Host "Restauré (WSL): $projectPath -> $destinationPath" + $restoredCount++ + + } catch { + Write-Error "Erreur lors de la restauration WSL de '$originalPath': $_" + $errorCount++ + } + } +} + +Write-Host "`nRésumé:" +Write-Host " Fichiers restaurés: $restoredCount" +Write-Host " Fichiers ignorés: $skippedCount" +Write-Host " Erreurs: $errorCount" + diff --git a/scripts/sync-to-project.ps1 b/scripts/sync-to-project.ps1 index dc7423a..09cade6 100644 --- a/scripts/sync-to-project.ps1 +++ b/scripts/sync-to-project.ps1 @@ -1,220 +1,220 @@ -# Script pour copier les fichiers de configuration vers le projet
-# Lit files-config.txt et copie chaque fichier vers configs/{system}/
-
-param(
- [string]$ConfigFile = "files-config.txt",
- [string]$MappingFile = "path-mapping.json"
-)
-
-$ErrorActionPreference = "Stop"
-
-# Vérifier que le fichier de configuration existe
-if (-not (Test-Path $ConfigFile)) {
- Write-Error "Le fichier de configuration '$ConfigFile' n'existe pas."
- exit 1
-}
-
-# Créer les répertoires de destination
-$configsDir = "configs"
-$windowsDir = Join-Path $configsDir "windows"
-$wslDir = Join-Path $configsDir "wsl"
-
-foreach ($dir in @($configsDir, $windowsDir, $wslDir)) {
- if (-not (Test-Path $dir)) {
- New-Item -ItemType Directory -Path $dir -Force | Out-Null
- Write-Host "Créé le répertoire: $dir"
- }
-}
-
-# Charger le mapping existant ou créer un nouveau
-$mapping = @{
- windows = @{}
- wsl = @{}
-}
-
-if (Test-Path $MappingFile) {
- try {
- $existingMapping = Get-Content $MappingFile -Raw | ConvertFrom-Json
- if ($existingMapping.windows) {
- $mapping.windows = @{}
- $existingMapping.windows.PSObject.Properties | ForEach-Object {
- $mapping.windows[$_.Name] = $_.Value
- }
- }
- if ($existingMapping.wsl) {
- $mapping.wsl = @{}
- $existingMapping.wsl.PSObject.Properties | ForEach-Object {
- $mapping.wsl[$_.Name] = $_.Value
- }
- }
- } catch {
- Write-Warning "Impossible de charger le mapping existant, création d'un nouveau mapping."
- }
-}
-
-# Fonction pour résoudre un chemin Windows
-function Resolve-WindowsPath {
- param([string]$path)
-
- # Remplacer les variables d'environnement
- $resolved = $path
- $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
- $resolved = $resolved -replace '%APPDATA%', $env:APPDATA
- $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA
- $resolved = $resolved -replace '%HOME%', $env:HOME
- $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
-
- # Remplacer les autres variables d'environnement
- $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved)
-
- return $resolved
-}
-
-# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible
-function Resolve-WSLPath {
- param([string]$path)
-
- # Détecter la distribution WSL (par défaut Ubuntu)
- $wslDistro = "Ubuntu"
-
- # Expansion de ~ vers /home/toshiro (ou autre utilisateur)
- if ($path -match '^~') {
- $homePath = wsl bash -c "echo ~" 2>$null
- if ($LASTEXITCODE -eq 0 -and $homePath) {
- $path = $path -replace '^~', $homePath
- } else {
- # Fallback: utiliser toshiro
- $path = $path -replace '^~', "/home/toshiro"
- }
- }
-
- # Convertir le chemin WSL en chemin Windows accessible
- # Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc
- if ($path -match '^/') {
- # Enlever le slash initial
- $relativePath = $path.Substring(1)
- # Convertir en chemin Windows
- $windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\'
- return $windowsPath
- }
-
- return $path
-}
-
-# Fonction pour obtenir le chemin relatif dans le projet
-function Get-ProjectPath {
- param(
- [string]$system,
- [string]$originalPath
- )
-
- # Nettoyer chaque partie du chemin
- $parts = $originalPath -split '[\\/]'
- $safeParts = @()
-
- foreach ($part in $parts) {
- # Nettoyer chaque partie : remplacer les caractères invalides et les variables
- $safePart = $part -replace '[\\/:*?"<>|]', '_'
- $safePart = $safePart -replace '^%', 'var_' -replace '%$', '' -replace '%', '_'
- $safePart = $safePart -replace '^~', 'home'
-
- # Si la partie est vide après nettoyage, utiliser un nom par défaut
- if ([string]::IsNullOrWhiteSpace($safePart)) {
- $safePart = "root"
- }
-
- $safeParts += $safePart
- }
-
- # Rejoindre toutes les parties avec des underscores
- $safeName = $safeParts -join '_'
-
- # Construire le chemin final
- $basePath = Join-Path "configs" $system
- return Join-Path $basePath $safeName
-}
-
-# Lire et traiter le fichier de configuration
-$lines = Get-Content $ConfigFile | Where-Object {
- $_ -notmatch '^\s*#' -and $_.Trim() -ne ''
-}
-
-$copiedCount = 0
-$skippedCount = 0
-$errorCount = 0
-
-foreach ($line in $lines) {
- $line = $line.Trim()
- if ($line -eq '' -or $line -match '^\s*#') {
- continue
- }
-
- # Parser la ligne: système|chemin
- if ($line -notmatch '^(\w+)\|(.+)$') {
- Write-Warning "Ligne ignorée (format invalide): $line"
- continue
- }
-
- $system = $matches[1]
- $originalPath = $matches[2]
-
- if ($system -notin @('windows', 'wsl')) {
- Write-Warning "Système invalide '$system' dans la ligne: $line"
- continue
- }
-
- try {
- # Résoudre le chemin selon le système
- if ($system -eq 'windows') {
- $resolvedPath = Resolve-WindowsPath $originalPath
- } else {
- # Pour WSL, convertir en chemin Windows accessible
- $resolvedPath = Resolve-WSLPath $originalPath
- }
-
- # Vérifier que le fichier existe
- if (-not (Test-Path $resolvedPath)) {
- Write-Warning "Fichier introuvable: $resolvedPath (original: $originalPath)"
- $skippedCount++
- continue
- }
-
- # Obtenir le chemin de destination dans le projet
- $projectPath = Get-ProjectPath $system $originalPath
-
- # Créer le répertoire parent si nécessaire
- $projectDir = Split-Path $projectPath -Parent
- if (-not (Test-Path $projectDir)) {
- New-Item -ItemType Directory -Path $projectDir -Force | Out-Null
- }
-
- # Copier le fichier
- # Maintenant que les chemins WSL sont convertis en chemins Windows, on peut utiliser Copy-Item pour les deux
- Copy-Item -Path $resolvedPath -Destination $projectPath -Force
-
- # Enregistrer le mapping
- $mapping[$system][$originalPath] = $projectPath
-
- Write-Host "Copié: $originalPath -> $projectPath"
- $copiedCount++
-
- } catch {
- Write-Error "Erreur lors du traitement de '$line': $_"
- $errorCount++
- }
-}
-
-# Sauvegarder le mapping
-$mappingJson = @{
- windows = $mapping.windows
- wsl = $mapping.wsl
-} | ConvertTo-Json -Depth 10
-
-Set-Content -Path $MappingFile -Value $mappingJson -Encoding UTF8
-
-Write-Host "`nRésumé:"
-Write-Host " Fichiers copiés: $copiedCount"
-Write-Host " Fichiers ignorés: $skippedCount"
-Write-Host " Erreurs: $errorCount"
-Write-Host " Mapping sauvegardé dans: $MappingFile"
-
+# Script pour copier les fichiers de configuration vers le projet +# Lit files-config.txt et copie chaque fichier vers configs/{system}/ + +param( + [string]$ConfigFile = "files-config.txt", + [string]$MappingFile = "path-mapping.json" +) + +$ErrorActionPreference = "Stop" + +# Vérifier que le fichier de configuration existe +if (-not (Test-Path $ConfigFile)) { + Write-Error "Le fichier de configuration '$ConfigFile' n'existe pas." + exit 1 +} + +# Créer les répertoires de destination +$configsDir = "configs" +$windowsDir = Join-Path $configsDir "windows" +$wslDir = Join-Path $configsDir "wsl" + +foreach ($dir in @($configsDir, $windowsDir, $wslDir)) { + if (-not (Test-Path $dir)) { + New-Item -ItemType Directory -Path $dir -Force | Out-Null + Write-Host "Créé le répertoire: $dir" + } +} + +# Charger le mapping existant ou créer un nouveau +$mapping = @{ + windows = @{} + wsl = @{} +} + +if (Test-Path $MappingFile) { + try { + $existingMapping = Get-Content $MappingFile -Raw | ConvertFrom-Json + if ($existingMapping.windows) { + $mapping.windows = @{} + $existingMapping.windows.PSObject.Properties | ForEach-Object { + $mapping.windows[$_.Name] = $_.Value + } + } + if ($existingMapping.wsl) { + $mapping.wsl = @{} + $existingMapping.wsl.PSObject.Properties | ForEach-Object { + $mapping.wsl[$_.Name] = $_.Value + } + } + } catch { + Write-Warning "Impossible de charger le mapping existant, création d'un nouveau mapping." + } +} + +# Fonction pour résoudre un chemin Windows +function Resolve-WindowsPath { + param([string]$path) + + # Remplacer les variables d'environnement + $resolved = $path + $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE + $resolved = $resolved -replace '%APPDATA%', $env:APPDATA + $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA + $resolved = $resolved -replace '%HOME%', $env:HOME + $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE + + # Remplacer les autres variables d'environnement + $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved) + + return $resolved +} + +# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible +function Resolve-WSLPath { + param([string]$path) + + # Détecter la distribution WSL (par défaut Ubuntu) + $wslDistro = "Ubuntu" + + # Expansion de ~ vers /home/toshiro (ou autre utilisateur) + if ($path -match '^~') { + $homePath = wsl bash -c "echo ~" 2>$null + if ($LASTEXITCODE -eq 0 -and $homePath) { + $path = $path -replace '^~', $homePath + } else { + # Fallback: utiliser toshiro + $path = $path -replace '^~', "/home/toshiro" + } + } + + # Convertir le chemin WSL en chemin Windows accessible + # Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc + if ($path -match '^/') { + # Enlever le slash initial + $relativePath = $path.Substring(1) + # Convertir en chemin Windows + $windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\' + return $windowsPath + } + + return $path +} + +# Fonction pour obtenir le chemin relatif dans le projet +function Get-ProjectPath { + param( + [string]$system, + [string]$originalPath + ) + + # Nettoyer chaque partie du chemin + $parts = $originalPath -split '[\\/]' + $safeParts = @() + + foreach ($part in $parts) { + # Nettoyer chaque partie : remplacer les caractères invalides et les variables + $safePart = $part -replace '[\\/:*?"<>|]', '_' + $safePart = $safePart -replace '^%', 'var_' -replace '%$', '' -replace '%', '_' + $safePart = $safePart -replace '^~', 'home' + + # Si la partie est vide après nettoyage, utiliser un nom par défaut + if ([string]::IsNullOrWhiteSpace($safePart)) { + $safePart = "root" + } + + $safeParts += $safePart + } + + # Rejoindre toutes les parties avec des underscores + $safeName = $safeParts -join '_' + + # Construire le chemin final + $basePath = Join-Path "configs" $system + return Join-Path $basePath $safeName +} + +# Lire et traiter le fichier de configuration +$lines = Get-Content $ConfigFile | Where-Object { + $_ -notmatch '^\s*#' -and $_.Trim() -ne '' +} + +$copiedCount = 0 +$skippedCount = 0 +$errorCount = 0 + +foreach ($line in $lines) { + $line = $line.Trim() + if ($line -eq '' -or $line -match '^\s*#') { + continue + } + + # Parser la ligne: système|chemin + if ($line -notmatch '^(\w+)\|(.+)$') { + Write-Warning "Ligne ignorée (format invalide): $line" + continue + } + + $system = $matches[1] + $originalPath = $matches[2] + + if ($system -notin @('windows', 'wsl')) { + Write-Warning "Système invalide '$system' dans la ligne: $line" + continue + } + + try { + # Résoudre le chemin selon le système + if ($system -eq 'windows') { + $resolvedPath = Resolve-WindowsPath $originalPath + } else { + # Pour WSL, convertir en chemin Windows accessible + $resolvedPath = Resolve-WSLPath $originalPath + } + + # Vérifier que le fichier existe + if (-not (Test-Path $resolvedPath)) { + Write-Warning "Fichier introuvable: $resolvedPath (original: $originalPath)" + $skippedCount++ + continue + } + + # Obtenir le chemin de destination dans le projet + $projectPath = Get-ProjectPath $system $originalPath + + # Créer le répertoire parent si nécessaire + $projectDir = Split-Path $projectPath -Parent + if (-not (Test-Path $projectDir)) { + New-Item -ItemType Directory -Path $projectDir -Force | Out-Null + } + + # Copier le fichier + # Maintenant que les chemins WSL sont convertis en chemins Windows, on peut utiliser Copy-Item pour les deux + Copy-Item -Path $resolvedPath -Destination $projectPath -Force + + # Enregistrer le mapping + $mapping[$system][$originalPath] = $projectPath + + Write-Host "Copié: $originalPath -> $projectPath" + $copiedCount++ + + } catch { + Write-Error "Erreur lors du traitement de '$line': $_" + $errorCount++ + } +} + +# Sauvegarder le mapping +$mappingJson = @{ + windows = $mapping.windows + wsl = $mapping.wsl +} | ConvertTo-Json -Depth 10 + +Set-Content -Path $MappingFile -Value $mappingJson -Encoding UTF8 + +Write-Host "`nRésumé:" +Write-Host " Fichiers copiés: $copiedCount" +Write-Host " Fichiers ignorés: $skippedCount" +Write-Host " Erreurs: $errorCount" +Write-Host " Mapping sauvegardé dans: $MappingFile" + |
