Mise à jour init.vim

Installer Neovim, ctags, fzf et ripgrep (requis pour fzf)

sudo pacman -S neovim ctags fzf ripgrep

Installer nodejs pour CoC

sudo pacman -S nodejs npm

Installer plugins manager

Puis installer le plugins manager https://github.com/junegunn/vim-plug:

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

Voici un fichier de configuration simple pour Neovim utilisant les fonctionnalités que tu as demandées Berivan : un explorateur de fichiers (NERDTree), ctags pour la génération de tags de code, Git pour le suivi des versions, CoC pour l'autocomplétion, et fuzzing pour la recherche rapide (via fzf). Ce fichier de configuration se présente sous la forme d'un fichier init.vim.

Mettre à jour du fichier de configuration

Ajouter dans ~/.config/nvim/init.vim

" ===========================
" Neovim Basic Configuration
" ===========================

" author: Anthony J.R Le Goff legoff.ant@gmail.com
" date: 25th october 2024

" --- Basics ---
:syntax on
:set encoding=UTF-8              " Encodage
:set title                       " Met à jour le titre de la fenetre ou terminal 
:set number                      " Affiche les numéros de ligne
:set clipboard=unnamedplus       " Utilise le presse-papiers du système
:set tabstop=4                   " Largeur de la tabulation
:set shiftwidth=4                " Largeur de l'indentation
:set smarttab                    " Gestion auto de l'indentation
:set expandtab                   " Convertit les tabs en espaces
:set autoindent                  " Indentation automatique
:set cursorline                  " Met en surbrillance la ligne du curseur
:set wildmenu                    " Améliore la complétion de la ligne de commande
:set ignorecase                  " Ignore la casse lors des recherches
:set smartcase                   " Respecte la casse si la recherche contient une majuscule

" Activer la détection de type de fichier et charger les plugins et l'indentation
:filetype plugin on
:filetype indent on

"Active le comportement habituel de la touche retour arrière
:set backspace=indent,eol,start

" --- Package Manager ---
call plug#begin('~/.local/share/nvim/plugged')

" NERDtree pour l'explorateur de fichiers
Plug 'scrooloose/nerdtree'
Plug 'ryanoasis/vim-devicons' " Icônes pour NERDtree

" CoC pour l'autocomplétion et la gestion de langages
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'Raimondi/delimitMate' " Ajout auto de [], (), ""

" fzf pour la recherche fuzzy
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" vim-gitgutter pour afficher les changements Git
Plug 'airblade/vim-gitgutter'

" Tagbar pour afficher les tags générés par ctags
Plug 'preservim/tagbar'

" Style de Neovim
Plug 'vim-airline/vim-airline'
Plug 'tomasr/molokai'

" CodeGPT AI API > https://github.com/dpayne/CodeGPT.nvim
" Plug("nvim-lua/plenary.nvim")
" Plug("MunifTanjim/nui.nvim")
" Plug("dpayne/CodeGPT.nvim")

call plug#end()

" ===========================
" Configurations spécifiques
" ===========================

" --- Configuration leader ---
:let mapleader = " "
:let g:mapleader = " "


" --- jeu de couleur ---
:set background=dark
:colorscheme molokai
:let g:airline_powerline_fonts = 1 " airline status style

" --- NERDtree ---
"
" Activer NERDTree à l'ouverture de Neovim si aucun fichier n'est spécifié
autocmd VimEnter * if !argc() | NERDTree | endif

" Mapper les touches pour ouvrir et fermer NERDTree
nnoremap <C-t> :NERDTreeToggle<CR> " configurer pour ouvrir NERDTree ctrl+t

" Afficher les fichiers cachés
:let NERDTreeShowHidden=1 

" --- CoC Configuration ---
" Utilisez CoC pour l'autocomplétion
" Active l'autocomplétion lorsque vous tapez.
:inoremap <silent><expr> <C-Space> coc#refresh()

" Navigation rapide entre les erreurs diagnostiquées
:nmap <silent> [g <Plug>(coc-diagnostic-prev)
:nmap <silent> ]g <Plug>(coc-diagnostic-next)

" Liste des suggestions
:nmap <silent> <leader>rn <Plug>(coc-rename)
:nmap <silent> <leader>ca <Plug>(coc-codeaction)

" --- fzf ---
:nnoremap <C-f> :Files<CR>          " Rechercher des fichiers dans le répertoire courant ctrl+f
:nnoremap <C-z> :FZF<CR>            " Rechercher dans les fichiers, buffers, commits ctrl+z
:nnoremap <C-r> :Rg<CR>             " Rechercher un mot-clé avec ripgrep ctrl+r
:nnoremap <leader>b :Buffers<CR>    " Liste des buffers ouverts

" --- Tagbar ---
:nnoremap <F8> :TagbarToggle<CR>    " Toggle Tagbar avec F8

" --- vim-gitgutter ---
:let g:gitgutter_map_keys = 0
:nmap <leader>gh :GitGutterNextHunk<CR>
:nmap <leader>gp :GitGutterPrevHunk<CR>
:nmap <leader>gu :GitGutterUndoHunk<CR>

" ===========================
" Configuration ctags
" ===========================
" Fonction pour mettre à jour les tags de ctags à la racine du projet courant
function! CtagsUpdate()
    " Trouve le répertoire racine du projet (là où se trouve le dossier .git)
    let l:project_root = finddir('.git', '.;')

    " Si aucun répertoire .git n'est trouvé, utilise le répertoire courant
    if empty(l:project_root)
        let l:project_root = getcwd()
    else
        let l:project_root = fnamemodify(l:project_root, ':h')
    endif

    " Construire le chemin pour le fichier 'tags'
    let l:tags_file = l:project_root . '/tags'

    " Exécute ctags pour générer les tags de manière récursive à partir de la racine du projet
    execute 'silent !ctags -R -f ' . l:tags_file . ' ' . l:project_root

    " Affiche un message de confirmation
    echom 'Ctags updated at ' . l:tags_file
endfunction

" Map la fonction à la touche F5 pour la lancer manuellement (tu peux changer la touche si tu le souhaites)
nnoremap <silent> <F5> :call CtagsUpdate()<CR>

" ===========================
" Autres Paramètres
" ===========================
" :set mouse=a                      " Active la souris dans tous les modes
:set updatetime=300               " Réduit le délai pour les mises à jour (ex : gitgutter)

" Installation de clangd (C++) via Coc
" :CocInstall coc-clangd

Après installer dans Neovim les plugins une fois le fichier de configuration défini via la commande :PlugInstall. Vous pouvez ensuite une fois Coc installer lancer la commande :CocInstall coc-clangd pour installer l'auto-completion pour C++