1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145

Neovim sous Windows from scratch

25/01/25 - Dernière mise à jour 16/02/25 (en cours d'écriture).

Nous installons Neovim et Neovide sur Windows. Nous n'utiliserons pas de distributions pour Neovim.

Démarrage

J'utilise habituellement le thème Desert avec juste le style des numéros de ligne modifié pour être plus discret (un peu comme j'ai fait là avec le style de cette page web). J'ai aussi les tabs configurés pour être à 4 espaces.

Choisir un terminal intégré

On configure MSYS2 UCRT64 comme terminal. Ainsi c'est facile d'avoir un split où je peux lancer gcc et faire un exe. En utilisant :terminal plutôt que tmux, je peux switcher avec ctrl+w comme n'importe quel split et rapidement copier du texte dans un sens comme dans l'autre (par exemple pour documenter les commandes que je lance).

Il y a un sujet de performance avec MSYS2. Voir la section "Note sur MSYS2" à la fin de ce document.

Un explorateur de fichier sous forme d'arbre

On installe nvim-tree https://github.com/nvim-tree/nvim-tree.lua

C'est l'explorateur de fichiers qui est présent par défaut dans les distributions https://www.lazyvim.org/ et https://www.lunarvim.org/

Le déposer dans C:\Users\<USERNAME>\AppData\Local\nvim\lua

Attention, une fois ce plugin installé un ":sp ." va faire un split vertical car en ouvrant le dossier courant, on va ouvrir l'explorateur qui va se mettre en split vertical à gauche. Bien sûr lancer un ":sp" ou un ":sp <fichier>" va bien ouvrir un split horizontal. Lorsqu'on ouvre un fichier, il nous propose de choisir une fenêtre dans laquelle ouvrir. On peut aussi déplacer nos fenêtres avec Ctrl-w suivi par H, J, K ou L suivant la direction voulue.

Sous Windows, une option doit être activée : git = { cygwin_support = true }. On peut voir les options de nvim-tree ici. Cela évite une erreur [NvimTree] Could not start the fs_event watcher for path C:\test_project\.git : ENOENT (voir ici).

Dans mon cas, pour des questions de performance (pour éviter un lag à l'ouverture et aussi à la sélection d'un sous-dossier contenant un .git), je décide de désactiver le support de git par nvim-tree avec l'option git = { enable = false }.

La coloration syntaxique pour Haxe

On installe vaxe manuellement https://github.com/jdonaldson/vaxe

Pour cela déposer dans C:\Users\<USERNAME>\AppData\Local\nvim\pack\vendor\start le dossier vaxe récupéré depuis les releases sur GitHub.

On va voir plus tard qu'on passera par le package manager Lazy.nvim pour l'installer

Nécessaire pour vaxe :

install pynvim https://neovim.io/doc/user/provider.html

De manière optionnelle, indiquer le chemin de l'exec python, cela améliore les performances (évite à Neovim de le chercher) :

vim.g.python3_host_prog = 'C:/Users/<USERNAME>/AppData/Local/Programs/Python/Python311/python.exe'

Pour déclarer un plugin Vim classique avec Lazy.nvim, il faut ajouter une spec habituelle pour déclarer un plugin et cela suffit.

L'autocompletion

Nous voulons une autocompletion rapide et sans LSP. nvim-cmp ne propose qu'une installation par un package manager.

Ici nous choisissons le package manager Lazy.nvim pour installer hrsh7th/nvim-cmp.

Note sur l'install de Lazy.nvim

Dans config/lazy.lua nous insérons l'option rocks = { enabled = false } car nous n'utiliserons pas le gestionnaire de packets lua (nous n'avons pas installé luarocks et aucun plugin utilisé n'a besoin de luarocks).

Recherche de fichiers fuzzy dans le projet

On passe par Telescope qu'on installe avec Lazy.nvim. Celui-ci ajoute une dépendance vers plenary qui est une bibliothèque Lua.

Un raccourci est placé pour activer la recherche de fichiers (sur <leader>ff). <leader> est la key qu'on peut utiliser pour lancer des commandes qui prendraient normalement des emplacements déjà pris. Elle est classiquement mappée sur \. Je la map habituellement sur space (ultra facile d'accès).

Un menu pour lister les derniers dossiers ouverts

On pourrait utiliser neovim-dashboard et le configurer pour n'afficher qu'une liste de projets (qui seraient dans ce cas uniquement des dossiers) mais les options de personnalisations m'intéressent peu et je voudrais garder les onglets ouverts, les splits et l'historique de chaque projet.

Pour répondre à ça, on installe neovim-project avec Lazy.nvim. Dans la config, on indique une dépendance sur la branche 0.1.x de telescope pour être en accord avec la conf de ce dernier. On indique comme liste de projets les dossiers dans le home. Neovim-project utilise vim.fn.glob() sur le pattern fourni (voir ici et ici) donc on ne peut pas passer d'expressions négatives pour faire des exclusions par exemple.

Je ne veux pas ouvrir la dernière session au démarrage donc j'ajoute les options last_session_on_startup = false et dashboard_mode = true.

Man pages

Neovim fournit une commande :Man. Celle-ci nécessite une commande man accessible.

Ici sous Windows, elle n'est pas présente par défaut et lancer :Man produit une erreur "ENOENT no such file or directory" dans man.lua.

Pour installer man dans MSYS2 UCRT64, pacman -S man. Cela va installer groff, libpipeline et man-db.

Ensuite il suffit de relancer Neovim.

Note sur le debug

On peut faire des print() qui s'affichent dans le footer de Neovim.

Il existe une commande :checkhealth pour vérifier l'état des plugins et de Neovim.

Note sur MSYS2

Pour un lancement plus rapide de MSYS2 : voir ici ou ici. Cela fait gagner plus de 2 secondes.

Par ailleurs, le script de lancement par défaut C:\msys64\msys2_shell.cmd est long car il doit en particulier gérer des options. Je fais une version C:\msys64\msys2_fast.bat qui correspond exactement au résultat d'un lancement de 'C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64'.

Cela fait gagner 1 seconde.

A partir de là, :checkhealth ne remonte plus de warning concernant une lenteur du lancement du terminal.

Retour à l'accueil