TMux ❤️ Neovim

A match made in heaven

Pablo COVES

Décembre 2022

Aperçu

Où, quoi, quand, comment?

TMux

Un multiplexer de terminal qu’il est bien

NVim

Un éditeur basé sur Vim qu’il est bien

Ensemble

  • Un workflow efficace, local ou distant
  • Robuste aux redémarrages et déconnexions
  • Incroyablement flexible et configurable
  • Moderne et dynamique comme un IDE

⚠️

Des exemples de configurations sont partagés dans cette présentation.

Copier-coller revient à s’imposer les choix d’autrui.

Mieux vaut les comprendre et s’en inspirer que les appliquer aveuglément.

TMux

  • Multi-session
  • Multi-window
  • Multi-pane
  • Extensible

Configuration

La configuration de TMux va dans

~/.tmux.conf

Un exemple accessible ici

Prefix

  • TMux se contrôle au clavier via un Prefix
  • Par défaut, le Prefix est <C-b>
  • Il est possible de le changer
  • Prefix + Commande dirigent TMux

Sessions

Toute action TMux s’effectue dans une session

Nouvelle session

tmux

Lister les sessions

Dans le terminal

tmux list-session
tmux ls

Dans une session

Prefix + w

Se détacher d’une session

Prefix + d

<C-b>d par défaut

S’attacher à une session existante

tmux attach -t $session_name
tmux a -t $session_name

Prefix + w est interactif

🎉 Bonus 🎊

S’attacher à une session si elle existe, la créer sinon

tmux new-session -A -s $session_name

Fenêtres

Une session contient des fenêtres

Manipulation

Création

Prefix + c

Suppression

Prefix + &

Déplacements

Précédente

Prefix + p

Suivante

Prefix + n

Panneaux

Une fenêtre contient des panneaux

Séparations

Verticale

Prefix + %

Configurable

Horizontale

Prefix + "

Configurable

Déplacements

Précédent

Prefix + ;

Suivant

Prefix + o

Plus à ce propos par la suite

🎉 Bonus 🎊

Zoom toggle

Prefix + z

De panneau à fenêtre

Prefix + !

Plugins

Il est possible d’étendre TMux avec des plugins

Continuum

Sauvegarde régulièrement l’état de TMux

Resurrect

Recharge l’état précédent de TMux au lancement

TMux Plugin Manager

Démonstration

Résumé

  • TMux contient des sessions
  • Une session contient des fenêtres
  • Une fenêtre contient des panneaux
  • Les plugins rendent TMux robuste aux redémarrages et déconnexions

NVim

  • Basé sur Vim
  • Extensible en lua
  • Fonctionnalités modernes
  • Mais toujours en console

⚠️

NVim évolue plus vite que certaines distributions.

Il est parfois nécessaire d’ajouter des dépôts pour avoir une version à jour.

👋 Debian 👋 Ubuntu 👋

Configuration

La configuration de NVim va dans

~/.config/nvim/init.lua

Un exemple accessible ici

Splits

Tout comme dans Vim

Création

Verticaux

:vsplit $path<CR>
:vsp $path<CR>

Horizontaux

:split $path<CR>
:sp $path<CR>

Déplacements

<C-w>k ⬆️
⬅️ <C-w>h <C-w>l ➡️
<C-w>j ⬇️

Plus à ce propos par la suite

Plugins

NVim c’est bien

NVim boosté aux plugins, c’est mieux

Packer

Packer est un plugin et un gestionnaire de plugins

Il permet de déclarer les plugins désirés en lua

Un exemple accessible ici

TreeSitter

Configuration pour la colloration syntaxique

Ajout d’une syntaxe

:TSInstall $syntaxe<CR>

Mise à jour des syntaxes

:TSUpdate<CR>

Une configuration accessible ici

Mason

Gestion des linters, formatters et LSP

Ajout d’une fonctionnalité

:MasonInstall $syntaxe<CR>

Mise à jour des Fonctionnalités

:Mason<CR>

Puis U quand Mason a mis ses dépôts à jour

LSP Config

  • Autocompletion intelligente
  • Renommage global
  • Affichage de documentation
  • Saut aux définitions

Une configuration accessible ici

Résumé

  • NVim est basé sur Vim
  • Dispose des fonctionnalités modernes d’un IDE
  • Tout en restant au chaud dans la console
  • Se configure de manière déclarative en IaC

Now, kiss

Ils vont si bien ensemble

Sessions NVim

Vim l’a fait, NVim l’a conservé

Nativement

Créer une session

:mksession<CR>
:mksession $file_name<CR>

Charger une session

nvim -S
nvim -S $file_name

Automagiquement

L’immense Tim POPE propose le plugin Obsession

Il permet de mettre à jour automatiquement le fichier de session à chaque changement dans NVim

Marions-les

  • Resurrect restore les sessions TMux
  • Obsession restore les sessions NVim
  • Les environnements de travail donc restaurés automagiquement à chaque lancement de la machine

Déplacements

Se déplacer différement entre TMux et NVim est vite lassant.

Chose promise, chose due.

🎉 Bonus 🎊

L’émulateur de terminal Alacritty peut lancer TMux au démarrage.

shell:
  program: bash
  args:
    - -l
    - -c
    - "tmux new-session -A -s TMux"

⚙️ Alacritty -> TMux -> Resurrect -> Nvim 🥳

Conclusion

TMux et NVim sont chacun des outils en console extrêmement puissants.

Ensemble, ils décuplent leurs potentiels et apportent une nouvelle expérience de travail sobre et efficace.

Bien intégrés à l’émulateur de terminal, aucun effort n’est à fournir.