Explications des différents éléments d'un IDE et quelques conseils de configuration et d'utilisation de Vim.
Les éditeurs de texte
Généralement, les éditeurs de texte sont simples. Mais pour ce qui est de la programmation, nous avons rapidement besoin de fonctionnalités supplémentaires, ce qui revient le plus souvent est :
De la coloration syntaxique
Un debuggueur
Un hinter (conseils, suggestions, mises en valeur d'erreurs de syntaxe)
De la Complétion (snippets, auto-complétion de mots, des suggestions IA)
Les environnements de travails prévoyant ce genre de fonctionnalités de manière native sont appelés des IDE. Vous vous en doutez, les debuggers, snippets, hinters, sont propres à chaque langage. Un IDE n'est alors pas forcément fait pour coder dans n'importe quel langage.
Vim
Plusieurs IDE existent, personnellement je préfère en utiliser un seul et bien le maîtriser. Mon choix s'est porté sur NeoVim, un fork de Vim. En raison du gain apporté par les raccourcis Vim qui permettent d'améliorer la vitesse de travail, surtout sans souris, ainsi que sa flexibilité. En effet, cet éditeur de texte permet d'installer facilement et de manière très extensible et légère, beaucoup de plugins permettant d'en faire un IDE pour n'importe quel langage.
Les raccourcis
Les raccourcis Vim peuvent être impressionnants à première vue, mais ils ont une logique qui, une fois intégrée, est facile à utiliser sans avoir besoin de retenir des centaines de combinaisons par cœur. Il faut bien comprendre qu'il y a 3 modes, le mode NORMAL, le mode INSERT et le mode VISUAL. Le mode VISUAL permet de sélectionner des zones avec le curseur, afin de faire différentes opérations avec la sélection concernée. Le mode INSERT permet d'insérer des caractères, donc de passer en écriture sur le document. Le mode NORMAL permet d'avoir accès aux commandes et différents raccourcis qui ne sont en lien ni avec le mode INSERT ni avec le mode VISUAL.
Voici la liste des raccourcis que j'utilise très régulièrement, ordonnés de manière "logique" :
Modes
i#Insert modea#Insert mode en avançant d'un caractèreo#Insert mode avec un retour à la ligne automatiquev#Visual mode^c#Normal mode
Gestion de fichiers
:q#Quitter vim:qa#Quitter toutes les fenêtres d'un coup:w#Sauvegarder le fichier actif:wq#Quitter en sauvagardant:q!#Forcer à quitter sans sauvegarder:ls#Liste des buffers ouverts:e<file>#Ouvre le fichier dans un buffer:CtrlP<file>#Ouvre un fichier mais avec le plugin CtrlP:bn#Basculer vers le buffer suivant:b<number> #Avec <number> qui est un chiffre, basculer vers le buffer numéro <number>:bd#Fermer le buffer actif:term#Ouvrir un terminal en haut du buffer courant:boterm#Ouvrir un terminal en bas du buffer courant
Remplacement
:/MOT#Chercher les occurences de "MOT"*#Chercher les occurances du mot courant:s/MOT/DEUX#Remplacer la première occurence de "MOT" par "DEUX" de la ligne courante:s/MOT/DEUX/g#De même mais pour toutes les occurences de la ligne courante:p,ns/MOT/DEUX/g#De même mais pour la ligne p jusqu'à la ligne n:%s/MOT/DEUX/g#De même mais pour toutes les lignes:noh#Supprimer le surlignage jusqu'à la prochaine recherche
Déplacement
b#Mot précédentw#Mot suivantFLECHE#Se déplacer caractère par caractèregg#Aller au début du fichierG#Aller à la fin du fichier_#Aller au premier caractère imprimable de la ligne courante0#Aller au premier caractère de la ligne courante$#Aller au dernier caractère de la ligne courantef+CHAR#Aller au prochain caractère CHARF+CHAR#Aller au précédent caractère CHARn+FLECHE#Se déplacer avec la flèche "n" fois d'un coup{ #Monter d'un paragraphe} #Descendre d'un paragraphe%#Aller à l'autre caractère d'une paire de caractèresmA#Poser une marque "A" a la ligne correspondante (minuscule pour marquer uniquement le buffer courant)'A #Se déplacer à la marque:delm A #Supprimer la marque A
Scrolling
Shift+FLECHE#Se déplacer rapidement^d#Descendre de moitié de l'écran^u#Monter de moitié de l'écranzz#Centrer le scroll sur la ligne courantezt#Mettre la ligne courante en première ligne de scrollzb#Mettre la ligne courante tout en bas du scrollM#Mettre le curseur au milieu de l'écran
Sélection
vi+CHAR#Sélectionner l'intérieur délimité par le caractère CHARviw#Sélectionner le mot courantviB#Sélectionner à l'intérieur de {}vib#Sélectionner à l'intérieur de ()vit#Sélectionner à l'intérieur de tags <>v+DEPLACEMENT#Sélectionner grâce aux raccourcis de déplacementV#Sélectionner la ligne courante
Manipulations
u#Undo^r#Redop#Collery#Copierd#Couperc#Couper et rentrer en mode INSERTdi+CHAR#Supprimer l'intérieur délimité par le caractère CHARci+CHAR#Supprimer l'intérieur délimité par le caractère CHAR et rentrer en mode INSERTdiw#Supprimer le mot courantyy#Copier la ligne courantedd#Supprimer la ligne courantecc#Supprimer la ligne courante et rentrer en mode INSERT
Les composants d'IDE
Il existe plusieurs mots de vocabulaires autour des fonctionnalités d'un IDE. Vous avez besoin d'être familiarisés avec ces derniers afin de configurer votre Vim correctement :
Terme
Description
LSP (Language Service Provider)
Permet de fournir des informations diverses comme des conseils, des alertes ainsi que des suggestions en lisant notre code et en le comprenant ainsi que de vérifier la bonne importation de modules externes (autres fichiers), etc..
Parser
Permet d'analyser le contenu d'un fichier voire de plusieurs fichiers afin de déterminer l'indentation, le highlight ainsi que des erreurs de syntaxe de base.
Hinter
Souvent contenu dans un LSP, permet d'obtenir des conseils et des alertes sur notre code.
Debugger
Permet de vérifier si notre code est compilable et met à disposition certains outils afin d'analyser plus en profondeur les erreurs.
Snippets
Des suggestions par complétion pour aider à la rapidité d'écriture du code.
Mes plugins favoris
Pour ces différents besoins, j'ai quelques suggestions de plugins que vous pouvez utiliser, voici ceux que j'utilise et que je conseille :
Plugin
Pour LSP & Hinters & Debuggers. On les installe avec Mason, en fonction du langage dont on a besoin.
C'est un parser qui améliore le highlight et l'indentation. Il a une commande TSInstall pour installer facilement le parser pour le langage de notre choix.
Une très grande bibliothèque de snippets pour tous les langages les plus populaires.
Ces plugins sont pratiques car ils permettent d'installer facilement et depuis l'éditeur de texte directement, les fonctionnalités dont nous avons besoin sans dénicher et installer de nouveaux plugins manuellement. Ce qui rend l'installation légère et très polyvalente.
Les distributions NeoVim
Un énorme inconvénient pour moi, qui, j'en ai conscience, représente un avantage pour certains, c'est l'enfer de la personnalisation. Tout est personnalisable, tout est configurable pour répondre à nos exigeances. Sauf que j'aime utiliser un éditeur de texte de manière efficace sans perdre plusieurs heures à devoir le configurer pour le rendre fonctionnel.
Pour palier à ce problème, qui est le seul que j'ai trouvé à Vim, c'est d'utiliser des distributions. En effet, certains projets ont émergés pour résoudre ce problème. Des configurations déjà faites, très extensibles et fonctionnelles out-of-the-box ! Voici la liste des distributions les plus populaires :
Le fichier .vimrc dans votre dossier /home est essentiel si vous n'utilisez pas distribution. Voici un petit exemple de fichier .vimrc pour vous aider à mettre en place une configuration minimale :
" vim personnalisation" status line ------------------------------------------------------------ {{{" clear status line when vimrc is reloaded.set statusline=" status line left side.set statusline+=\ %f\ %m\ %y\ %r" transparency" use a divider to separate the left side from the right side.set statusline+=%=" Status line right side.set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%%" Show the status on the second to last line.set laststatus=2" }}}" Setup Colorschemecolorscheme molokai" Transparencyautocmd ColorScheme * highlight Normal guibg=NONE ctermbg=NONEautocmd ColorScheme * highlight SignColumn guibg=NONE ctermbg=NONEautocmd ColorScheme * highlight diffAdded guibg=NONE ctermbg=NONEautocmd ColorScheme * highlight diffChanged guibg=NONE ctermbg=NONEautocmd ColorScheme * highlight diffRemoved guibg=NONE ctermbg=NONE" Display hybrid lines numberset numberrelativenumberset nurnuset cursorlineset cursorlineopt=numberautocmd ColorScheme * highlight CursorLineNr cterm=bold term=bold gui=bold" Turn syntax highlighting on.syntax on" Disable compatibility with vi which can cause unexpected issues.set nocompatible" Enable type file detection. Vim will be able to try to detect the type of file in use.filetype on" Enable plugins and load plugin for the detected file type.filetype plugin on" Load an indent file for the detected file type.filetype indent on" Ignore capital letters during search.set ignorecase" Show the mode you are on the last line.set showmode" Show matching words during a search.set showmatch" Use highlighting when doing a search.set hlsearch" Fuzzing CtrlP current vim directory as root dirlet g:ctrlp_working_path_mode =''" CocPlugin" Use tab for trigger completion with characters ahead and navigate" NOTE: There's always complete item selected by default, you may want to enable" no select by `"suggest.noselect": true` in your configuration file" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by" other plugin before putting this into your configinoremap <silent><expr> <TAB>\coc#pum#visible() ?coc#pum#next(1) :\CheckBackspace() ?"\<Tab>" :\coc#refresh()inoremap <expr><S-TAB> coc#pum#visible() ?coc#pum#prev(1) : "\<C-h>"inoremap <silent><expr> <CR> coc#pum#visible() ?coc#pum#confirm() : "\<CR>"function!CheckBackspace() abort let col =col('.') - 1return!col || getline('.')[col - 1] =~#'\s'endfunction" Install Plug automatically if not already installed let data_dir =has('nvim') ?stdpath('data') . '/site' : '~/.vim'ifempty(glob(data_dir . '/autoload/plug.vim'))silentexecute'!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' autocmd VimEnter * cacaInstall --sync | source $MYVIMRCendifcall plug#begin()" The default plugin directory will be as follows:" - Vim (Linux/macOS): '~/.vim/plugged'" - Vim (Windows): '~/vimfiles/plugged'" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'" You can specify a custom plugin directory by passing it as the argument" - e.g. `call plug#begin('~/.vim/plugged')`" - Avoid using standard Vim directory names like 'plugin'" Make sure you use single quotesPlug 'neoclide/coc.nvim', {'branch': 'release'}Plug 'tomasr/molokai'Plug 'ctrlpvim/ctrlp.vim'Plug 'honza/vim-snippets'Plug 'scrooloose/nerdtree'" Initialize plugin system" - Automatically executes `filetype plugin indent on` and `syntax enable`.call plug#end()" You can revert the settings after the call like so:" filetype indent off " Disable file-type-specific indentation" syntax off " Disable syntax highlighting