On peut très bien apprendre à coder dans un terminal shell avec un simple éditeur de texte comme Vim
et utiliser le compilateur. C-a-d Ouvrir un terminal sous Linux:
$ vim hello.cpp
// Premier programme en C++
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
On compile en manuel, normalement gcc est intégré en natif dans le système Linux:
$ g++ hello.cpp -o hello
On lance le fichier binaire:
$ ./hello
Output:
Hello World!"
Voila, pour apprendre à utiliser Vim plus en détail, l'éditeur de texte pour les professionnels de l'informatique:
Ce chapitre est un incontournable de la maîtrise d’un système Linux. Dans 99,99 % des cas, l’éditeur VI est présent sur votre système. Pourquoi s’en passer ?
Egalement le livre numérique [PDF] gratuit "Vim pour les humains" est une très bonne ressource pour apprendre Vim.
Transformer Vim en IDE (environnement de développement intégré)
Vim est un peu lite, c'est du brute de décoffrage mais il est customisable et extensible. Pour avoir des fonctions supplémentaires et d'automatisation:
- Recherche dans le code
- Navigation dans les fichiers
- Controle de version Git
- Refactoring
- Coloration syntaxique
- Code complétion
- Assistance avec une IA
- ctags
- Intégration de makefile / cmake
- Intégration du debugger
- multi-fenetrage / tabs
- snippet
- CI/CD
- test unitaire
etc...
On va donc apprendre à configurer le fork de Vim: Neovim
avec Coc. Qui a plus de fonctionnalité pour du code en C/C++.
Prérequis sur le système:
$ sudo pacman -S clang ctags neovim nodejs npm gdb
Vérifier l'installation
$ clangd --version
clangd version 15.0.7
Features: linux
Platform: x86_64-pc-linux-gnu
Introduction à Neovim
lancer le tutorial dans un terminal vimtutor
Vidéo explicative pour configurer Neovim:
- Setting up (Neo)vim for C++: An IDE like experience with coc!
- Setting up (Neo)vim for C++ Part 2: IDE like Files, CMake and GTest integrations!
Configuration de Neovim
Installation du gestionnaire de plugin "vim-plug" cf: 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'
Création du fichier init.vim
dans ~/.config/nvim/
" Neovim configuration file init.vim
" author: Anthony J.R Le Goff legoff.ant@gmail.com
" date: 16th april 2022
:set number
:set autoindent
:set tabstop=4
:set shiftwidth=4
:set smarttab
:set softtabstop=4
":set mouse=a
call plug#begin()
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-surround'
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/syntastic'
Plug 'vim-airline/vim-airline'
Plug 'tomasr/molokai'
Plug 'raimondi/delimitmate'
Plug 'nvim-telescope/telescope.nvim'
Plug 'ryanoasis/vim-devicons'
Plug 'majutsushi/tagbar'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'madox2/vim-ai'
set encoding=UTF-8
call plug#end()
:set statusline+=%#warningmsg#
:set statusline+=%{SyntasticStatuslineFlag()}
:set statusline+=%*
:let g:syntastic_always_populate_loc_list = 1
:let g:syntastic_auto_loc_list = 1
:let g:syntastic_check_on_open = 1
:let g:syntastic_check_on_wq = 0
nnoremap <C-f> :NERDTreeFocus<CR>
nnoremap <C-,> :NERDTree<CR>
nnoremap <C-;> :NERDTreeToggle<CR>
nmap <C-r> :TagbarToggle<CR>
nmap <C-q> :Telescope<CR>
:colorscheme molokai
let g:NERDTreeDirArrowExpandable="+"
let g:NERDTreeDirArrowCollapsible="~"
" air-line
let g:airline_powerline_fonts = 1
let g:vim_ai_chat = {
\ "options": {
\ "model": "gpt-4",
\ "temperature": 0.2,
\ },
\}
Sauvegarder le fichier, quitter et relancer nvim
puis lancer la commande:
:PlugInstall
Après cela vous aller pouvoir installer via le serveur de langage le code completion pour C/C++ avec Coc:
:CocInstall coc-clangd
Intégration de C++23 dans clangd
Créer le fichier ~/.config/clangd/config.yaml
config.yaml
CompileFlags:
Add: [-Wall, -Wextra, -std=c++23]
Utiliser le debugger sur un programme
Télécharger et lancer le plugin:
:packadd termdebug
:Termdebug
Lancer un terminal dans Vim
Si vous avez besoin de lancer un terminal dans Vim
:term
Lancer une commande make dans Vim pour automatiser la compilation
Un simple exemple de makefile:
# Le compilateur gcc pour le programme C
CC = g++
# Flags de compilation
CFLAGS = -Wall -Wextra -std=C++23
# fichier binaire construit
TARGET = hello
all: $(TARGET)
$(TARGET): main.cpp
$(CC) $(CFLAGS) -o $(TARGET) main.cpp
clean:
rm -f $(TARGET)
Lancer la commande dans Vim:
:make
Autres: 100 useful Vim commands