Aller au contenu
Développement medium

Markdown : guide complet avec cheatsheet et pièges à éviter

8 min de lecture

Si vous savez écrire ceci, vous maîtrisez 80% de Markdown :

## Titre
Texte **gras**, *italique*, `code inline`.
- Liste item 1
- Liste item 2
> Citation importante
[Lien](https://exemple.com)
```bash
echo "bloc de code"
```

Ce guide vous apprend la syntaxe complète, les différences entre variantes (CommonMark, GFM, Pandoc), et les pièges fréquents qui cassent votre mise en forme.

Aller à : C’est quoi ? · Cheatsheet · Pièges · Docs-as-code

Imaginons que vous écrivez un email. Vous voulez mettre un mot en gras ou créer une liste. Dans Word, vous cliquez sur des boutons. En HTML, vous écrivez des balises <strong> ou <ul>. C’est lourd.

Markdown résout ce problème : vous écrivez du texte quasi-normal, et il se transforme automatiquement en page web formatée.

Ce que vous écrivez (Markdown)Ce que vous voyez (rendu)
**important**important
*italique*italique
- item• item
[lien](https://blog.stephane-robert.info)lien
`code`code

En 2004, John Gruber (avec les contributions d’Aaron Swartz) crée Markdown avec un objectif simple : écrire pour le web sans connaître HTML.

L’idée géniale : le texte source doit être lisible tel quel, même sans rendu. Comparez :

HTML (illisible)Markdown (lisible)
<h2>Titre</h2>## Titre
<strong>gras</strong>**gras**
<a href="url">lien</a>[lien](url)
<ul><li>item</li></ul>- item

Markdown est devenu le standard de facto pour la documentation technique :

ContexteExemples
DéveloppementREADME, CHANGELOG, documentation de code
PlateformesGitHub, GitLab, Stack Overflow, Reddit
Blogs techniquesDev.to, Hashnode, ce blog
Notes personnellesObsidian, Notion, Logseq
DocumentationDocusaurus, Starlight, MkDocs
FormatAvantagesInconvénients
MarkdownSimple, portable, versionnableLimité pour mise en page complexe
HTMLContrôle totalVerbeux, difficile à lire
Word/Google DocsWYSIWYG, familierBinaire, pas versionnable, vendor lock-in
LaTeXParfait pour maths/publicationsCourbe d’apprentissage raide

Règle simple : si votre contenu est du texte structuré (documentation, articles, notes), Markdown est probablement le meilleur choix.

Markdown a un “problème” : il existe plusieurs variantes. Le Markdown original de 2004 était volontairement minimaliste. Depuis, chaque plateforme a ajouté ses propres extensions.

Conséquence pratique : une syntaxe qui marche sur GitHub peut ne pas fonctionner ailleurs. Avant d’écrire, identifiez votre contexte.

VarianteOù l’utiliserSpécificités
CommonMarkStandard portableBase stricte, sans ambiguïté
GFM (GitHub Flavored)GitHubTables, task lists, autolinks, footnotes
GLFM (GitLab Flavored)GitLabSimilar à GFM + extensions GitLab
PandocConversion multi-formatsExtensions riches (citations, métadonnées)
MDXAstro, Next.js, DocusaurusComposants JSX dans Markdown

Pensez à CommonMark comme le Markdown de base (le socle commun), et à GFM comme une version enrichie avec des bonus.

Analogie : CommonMark = français standard. GFM = français + argot parisien. Tout le monde comprend le français standard, mais certaines expressions ne marchent qu’à Paris.

FonctionnalitéCommonMarkGFMGLFM
Titres, emphase, listes
Blocs de code avec langage
Liens et images
Tableaux
Task lists - [x]
Strikethrough ~~texte~~
Autolinks (URLs cliquables)
Footnotes [^1]
Mermaid diagrams
Math LaTeX $x^2$

Voici les 12 syntaxes que vous utiliserez 90% du temps. Apprenez-les dans l’ordre : les premières sont les plus fréquentes.

# Titre niveau 1 (h1)
## Titre niveau 2 (h2)
### Titre niveau 3 (h3)
#### Titre niveau 4 (h4)
SyntaxeRenduCompatibilité
**gras** ou __gras__gras✅ Universel
*italique* ou _italique_italique✅ Universel
~~barré~~barréGFM/GLFM
***gras italique***gras italique✅ Universel
[Texte du lien](https://url.com)
[Texte du lien](https://url.com "Titre au survol")
![Texte alternatif](chemin/image.png)
![Alt](image.png "Légende")

Exemple : [Documentation Git](/docs/developper/version/git/) crée un lien interne.

- Premier élément
- Deuxième élément
- Sous-élément (indentation cohérente)
- Autre sous-élément
- Troisième élément

Rendu :

  • Premier élément
  • Deuxième élément
    • Sous-élément (indentation cohérente)
    • Autre sous-élément
  • Troisième élément
1. Premier
2. Deuxième
3. Troisième

Astuce : vous pouvez utiliser 1. partout, Markdown renumérote automatiquement :

1. Premier
1. Deuxième
1. Troisième
- [x] Tâche terminée
- [ ] Tâche à faire
- [ ] Autre tâche

Rendu (sur GitHub/GitLab) :

  • Tâche terminée
  • Tâche à faire
  • Autre tâche

Code inline : entourez de backticks simples.

Utilisez la commande `kubectl get pods` pour lister les pods.

Bloc de code : utilisez trois backticks avec le langage.

```bash
#!/bin/bash
echo "Hello DevOps"
kubectl get pods -n production
```
| Colonne 1 | Colonne 2 | Colonne 3 |
|-----------|:---------:|----------:|
| Gauche | Centré | Droite |
| Données | Données | Données |

Rendu :

Colonne 1Colonne 2Colonne 3
GaucheCentréDroite
DonnéesDonnéesDonnées

Alignement :

  • :--- aligné à gauche (défaut)
  • :---: centré
  • ---: aligné à droite
> Ceci est une citation.
> Elle peut s'étendre sur plusieurs lignes.
>
> > Et même être imbriquée.

Rendu :

Ceci est une citation. Elle peut s’étendre sur plusieurs lignes.

Et même être imbriquée.

Trois tirets, astérisques ou underscores créent une ligne horizontale :

---
***
___

Pour afficher un caractère Markdown littéralement, préfixez-le d’un backslash :

\*Ceci n'est pas en italique\*
\# Ceci n'est pas un titre

Caractères à échapper : \ ` * _ { } [ ] ( ) # + - . ! |

Voici une affirmation importante[^1].
[^1]: Source de l'affirmation avec lien.

Rendu : Voici une affirmation importante[^1].

Même les développeurs expérimentés tombent dans ces pièges. La bonne nouvelle : une fois que vous les connaissez, vous ne vous ferez plus avoir.

Piège 1 : le retour à la ligne ne fonctionne pas

Section intitulée « Piège 1 : le retour à la ligne ne fonctionne pas »

Problème : vous appuyez sur Entrée, mais le texte reste sur la même ligne.

Première ligne
Deuxième ligne

Rendu (collé) : Première ligne Deuxième ligne

Solutions :

Ajoutez deux espaces à la fin de la ligne :

Première ligne··
Deuxième ligne

(Les ·· représentent deux espaces invisibles)

Problème : votre sous-liste ne s’affiche pas correctement.

- Item 1
- Sous-item (indentation insuffisante)

Solution : indentez de façon cohérente. La sous-liste doit être plus à droite que le texte de l’item parent. Utilisez 2 ou 4 espaces selon votre convention :

- Item 1
- Sous-item (aligné correctement)

Problème : le code apparaît en dehors de la liste.

1. Étape 1
```bash
echo "code"
```

Solution : ajoutez une ligne vide après l’item, puis indentez le bloc de code pour qu’il soit visuellement aligné sous le texte de l’item :

1. Étape 1
```bash
echo "code"
```

Causes possibles :

SymptômeCauseSolution
Tableau en texte brutMoteur non-GFMVérifier la compatibilité
Colonnes décaléesPipes `` manquants
Pas de ligne d’en-têteLigne `---

Structure minimale obligatoire :

| Col1 | Col2 |
|------|------|
| A | B |

Piège 5 : les caractères spéciaux cassent le rendu

Section intitulée « Piège 5 : les caractères spéciaux cassent le rendu »

Problème : *, _, #, [ interprétés comme syntaxe.

Solution : échappez avec \ :

Le fichier \*.log contient les erreurs.
Prix : 10\$ (pas 10$)

En tant que professionnel DevOps/DevSecOps, vous écrirez énormément en Markdown. Voici les cas d’usage principaux.

Structure type d’un bon README :

# Nom du projet
Description en une phrase.
## Installation
```bash
pip install mon-projet
```
## Utilisation
```bash
mon-projet --help
```
## Configuration
| Variable | Description | Défaut |
|----------|-------------|--------|
| `API_KEY` | Clé d'API | - |
## Contribuer
Voir [CONTRIBUTING.md](CONTRIBUTING.md).
## Procédure : restart service en production
### Prérequis
- Accès SSH au serveur
- Droits sudo
### Étapes
1. Vérifier l'état actuel :
```bash
systemctl status mon-service
```
2. Redémarrer :
```bash
sudo systemctl restart mon-service
```
3. Valider :
```bash
curl -I https://mon-service.local/health
```
### Rollback
Si le service ne répond pas après 2 min, restaurer la version précédente.

L’approche docs-as-code traite la documentation comme du code :

  • Stockée dans Git (versionnée, historique, branches)
  • Revue en Pull Request (relecture, commentaires)
  • Lintée automatiquement (markdownlint, vale)
  • Déployée en CI/CD (preview, publication)
Fenêtre de terminal
# Installer markdownlint pour valider votre Markdown
# https://www.npmjs.com/package/markdownlint-cli
npm install -g markdownlint-cli
# Linter un fichier
markdownlint README.md
# Linter tout un dossier
markdownlint docs/

Checklist docs-as-code :

  • README structuré (Installation, Usage, Configuration)
  • Linter Markdown en CI (markdownlint, vale)
  • Preview automatique en PR
  • Déploiement automatique au merge
CatégorieExemples
Éditeur avec previewVS Code, Zed, Obsidian, Typora
Lintermarkdownlint-cli, vale
ConvertisseurPandoc (vers PDF, DOCX, HTML)
DiagrammesMermaid, Excalidraw, PlantUML
  1. Markdown = texte lisible même sans rendu, idéal pour la documentation versionnée.

  2. Identifiez votre variante : CommonMark (portable), GFM (GitHub), GLFM (GitLab), MDX (sites modernes).

  3. Les 5 syntaxes les plus utilisées : titres ##, emphase **gras**, listes -, code ```, liens []()

  4. Pièges majeurs : retours à la ligne, indentation des listes, blocs de code dans les listes.

  5. Spécifiez toujours le langage des blocs de code pour la coloration syntaxique.

  6. Docs-as-code : versionnez votre documentation dans Git, lintez avec markdownlint, reviewez en PR.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.