Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Configuration Neovim

Configuration personnelle de Neovim (Lua + lazy.nvim), orientée Python et Lua : LSP via Mason, formatage automatique à la sauvegarde, complétion nvim-cmp, Telescope, Treesitter, thème Catppuccin.

Structure du dépôt

.
├── init.lua                  # Bootstrap de lazy.nvim + chargement des modules
└── lua/
    ├── vim-options.lua       # Options générales (leader = espace, undo persistant, numérotation relative)
    ├── plugins.lua           # Spec vide (les plugins sont dans lua/plugins/)
    └── plugins/              # Un fichier = un plugin (chargés automatiquement par lazy.nvim)
        ├── autopairs.lua     # nvim-autopairs : fermeture auto des paires
        ├── catppuccin.lua    # Thème
        ├── comment.lua       # Comment.nvim : gcc / gbc
        ├── completions.lua   # nvim-cmp + LuaSnip + friendly-snippets
        ├── lsp-config.lua    # Mason + mason-lspconfig + nvim-lspconfig (lua_ls, pylsp)
        ├── neo-tree.lua      # Explorateur de fichiers
        ├── none-ls.lua       # Formatage : stylua, black, isort (à la sauvegarde)
        ├── telescope.lua     # Recherche de fichiers / grep (+ extension fzf native)
        ├── treesitter.lua    # Coloration / indentation (branche master épinglée)
        └── undotree.lua      # Historique d'annulation visuel

Installation sur une nouvelle machine

Testé sur Ubuntu (26.04). Adapter les noms de paquets pour une autre distribution.

1. Prérequis système

sudo apt-get install -y neovim git build-essential ripgrep unzip \
    python3-venv python3-pip

Pourquoi chaque paquet :

Paquet Utilisé par
neovim (≥ 0.11)
git lazy.nvim (clonage des plugins)
build-essential (gcc, make) Compilation de telescope-fzf-native et des parsers Treesitter
ripgrep (rg) Telescope live_grep
unzip Mason (extraction des archives, ex. stylua)
python3-venv, python3-pip Mason crée un venv pour installer pylsp, black, isort — sans python3-venv, ces installations échouent avec spawn: python3 failed with exit code 1

2. Police à icônes (Nerd Font)

Les icônes de Neo-tree, Telescope et nvim-web-devicons nécessitent une police patchée « Nerd Font », sinon elles s'affichent en carrés vides. Installation sans sudo :

cd /tmp
wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
mkdir -p ~/.local/share/fonts/JetBrainsMonoNerd
unzip -o JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMonoNerd
fc-cache -f ~/.local/share/fonts

Puis configurer le terminal pour utiliser cette police. Avec Ptyxis (terminal par défaut d'Ubuntu) :

gsettings set org.gnome.Ptyxis use-system-font false
gsettings set org.gnome.Ptyxis font-name 'JetBrainsMono Nerd Font 11'

(Ouvrir un nouvel onglet pour voir le changement. Pour un autre terminal, choisir « JetBrainsMono Nerd Font » dans ses préférences. Les emoji couleur sont fournis par fonts-noto-color-emoji, installé par défaut sur Ubuntu.)

Alternative — garder sa police habituelle (ex. Monoisome sous Terminator) : installer uniquement les icônes et les déclarer en police de secours via fontconfig. Aucun changement de police dans le terminal n'est nécessaire :

cd /tmp
wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/NerdFontsSymbolsOnly.zip
mkdir -p ~/.local/share/fonts/NerdFontsSymbolsOnly
unzip -o NerdFontsSymbolsOnly.zip -d ~/.local/share/fonts/NerdFontsSymbolsOnly

mkdir -p ~/.config/fontconfig
cat > ~/.config/fontconfig/fonts.conf <<'EOF'
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <!-- Icônes Nerd Font en fallback pour les polices monospace -->
  <match target="pattern">
    <test name="family"><string>Monoisome</string></test>
    <edit name="family" mode="append" binding="weak"><string>Symbols Nerd Font Mono</string></edit>
  </match>
  <match target="pattern">
    <test name="family"><string>monospace</string></test>
    <edit name="family" mode="append" binding="weak"><string>Symbols Nerd Font Mono</string></edit>
  </match>
</fontconfig>
EOF
fc-cache -f

Redémarrer complètement le terminal (toutes les fenêtres) pour que la règle soit prise en compte.

3. Cloner et lier la configuration

git clone <url-du-depot> ~/Documents/nvim-config
ln -s ~/Documents/nvim-config ~/.config/nvim

Le lien symbolique permet de garder la config versionnée dans le dépôt : toute modification faite via ~/.config/nvim est directement commitable.

4. Installer les plugins

Au premier lancement de nvim, lazy.nvim se clone tout seul puis installe les plugins. Pour tout faire en une commande sans ouvrir l'interface :

nvim --headless "+Lazy! sync" +qa

5. Installer les serveurs LSP et les formatters

Mason installe lua_ls et pylsp automatiquement à la première ouverture d'un fichier, mais les formatters utilisés par none-ls doivent être installés explicitement :

nvim --headless "+Lazy! load mason.nvim" \
    "+MasonInstall lua-language-server python-lsp-server stylua black isort" +qa

(En mode headless, :MasonInstall est synchrone — la commande attend la fin des installations.)

6. Vérifier

ls ~/.local/share/nvim/mason/bin/
# attendu : black  isort  lua-language-server  pylsp  stylua

Puis ouvrir un fichier Python : le LSP doit s'attacher (:LspInfo) et la sauvegarde (:w) doit reformater le fichier avec black/isort. :checkhealth donne un diagnostic complet.

Raccourcis clavier

Leader = Espace.

Touche Mode Action
Ctrl+f n Telescope : chercher un fichier
<leader>f n Telescope : grep dans le projet (ripgrep)
Ctrl+n n Neo-tree : ouvrir l'explorateur à gauche
<leader>u n Undotree : basculer l'historique d'annulation
K n LSP : documentation sous le curseur
gd n LSP : aller à la définition
<leader>ca n LSP : actions de code
gcc / gbc n Commenter la ligne / le bloc
gc / gb n, v Commenter (opérateur / sélection)
gnn, grn, grm, grc n Treesitter : sélection incrémentale
Alt+e i Autopairs : fast wrap
Ctrl+j / Ctrl+k i Complétion : élément suivant / précédent
Ctrl+Espace i Complétion : déclencher
Entrée i Complétion : valider
Tab i Complétion : suivant, ou étendre/sauter dans le snippet
Ctrl+e i Complétion : annuler

Maintenance

nvim --headless "+Lazy! sync" +qa      # Mettre à jour les plugins

Dans Neovim : :Lazy (plugins), :Mason (LSP/outils), :TSUpdate (parsers Treesitter).

Points d'attention / pièges connus

  • nvim-treesitter est épinglé sur branch = "master" dans treesitter.lua. La branche par défaut du dépôt est devenue main, une réécriture qui supprime l'ancienne API (nvim-treesitter.configs) utilisée par cette config. Sans l'épinglage, le plugin échoue au chargement avec module 'nvim-treesitter.configs' not found. La branche master est archivée mais fonctionnelle ; une migration vers la nouvelle API sera nécessaire à terme.
  • API LSP : lsp-config.lua utilise l'API native vim.lsp.config / vim.lsp.enable de Neovim 0.11 (l'ancien framework require('lspconfig') est déprécié). nvim-lspconfig reste installé car il fournit les définitions des serveurs. mason-lspconfig (v2) active automatiquement les serveurs installés ; stylua est exclu de cette activation car c'est un formatter (none-ls), pas un serveur LSP.
  • Le formatage LSP est désactivé volontairement (documentFormattingProvider = false dans lsp-config.lua) : c'est none-ls (stylua, black, isort) qui formate, via un autocmd BufWritePre.
  • Undo persistant : l'historique d'annulation survit à la fermeture, stocké dans ~/.local/share/nvim/undodir (créé automatiquement).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages