Vim pour la programmation

Prérequis

  • Utilisation basique de Vim
  • Gestion de version
    • git commit, git push, git pull
    • notion d'index, de zone de transit

Installer des extensions

  • version facile : utiliser le gestionnaire de paquet de la distrib, par exemple
    apt install vim-fugitive
    
  • vieille methode avec pathogen :
    • commencer par installer pathogen
      mkdir -p ~/.vim/autoload ~/.vim/bundle && \
      curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
      
      et rajouter
      execute pathogen#infect()
      
      à votre ~/.vimrc
    • pour installer un nouveau paquet, il suffit de le decompresser dans ~/vim/bundle
  • recente (depuis vim8) : utiliser les «packages» ( pas reussi a faire marcher )

Edition

  • répétition
    • le «point»
    • macro
      • taper «q+lettre»
      • taper une «sequence»
      • finir avec «q»
      • appliquer la macro : «@+lettre»
    • substitution
      :<domaine>s/texte_à_remplacer/texte_de_remplacement/options
      
      avec domaine є {., % <,>} et options є { g, c}
  • complétion
    • contexte : Ctrl-P, Ctrl-N
    • omniccpcomplete Ctrl-X, Ctrl-O
  • coloration syntaxique
    • mettre dans ~/.vimrc
      filetype on
      filetype plugin on
      filetype plugin indent on
      
  • indentation
    • régler le nombre d'espaces
      :set cindent shiftwidth=4
      
    • indenter : ==

Orthographe

  • dictionnaires (e.g. pour latex)

    • choisir un dictionnaire
      :setlocal spell spelllang=fr_FR
      
    • se deplacer sur les erreurs : ]s,s]
    • corriger : z=
    • ajouter des mots : zg, zG
  • correction à la volée :

naviguer dans les fichiers

  • historique
    • avance : Ctrl-I
    • arrière : Ctrl-O
  • relativement aux structures
    • fonctions : ]], [[
    • declarations : gd
  • suivre les occurences d'un mot
    • Dans le même fichier
      • recherche avant *
      • recherche arrière #
  • avec une expression rationnelle /<expr>
    • insensible à la casse `/\c
    • rappeler les dernieres recherche q/
  • Dans un projet
    • on lance un grep externe avec résultat dans la fenêtre de localisation
      :lgrep -R <expr> path/to/project
      :lop
      
      • naviguer sans la fenêtre de localisation ouverte : lne, lpre
      • on peut coller une selection sur la ligne de commande : Ctrl-R, "

Étiquettes (tags)

  • Construire le fichier d'étiquettes avec exuberant ctags [http://ctags.sourceforge.net/] ou Gnu global [https://www.gnu.org/software/global])
    $ cd /path/to/sources
    $ ctags -R --sort=yes --kinds-Fortran=+istmp --exclude=@.ctagsignore .
    
    ou
    $ cd /path/to/sources
    $ gtags
    
  • navigation :
  • :tj nom_de_fonction ⇒ liste de choix
  • se placer sur un identifiant : g Ctrl-] ⇒ liste de choix
  • remonter dans la pile des étiquettes : Ctrl-T
  • :tn, :tp pour suivre les différentes étiquettes

Fenetres

  • diviser verticalement ou horizontalement : new ou vnew
  • bouger : `Ctrl W + {i,j,k,l}
  • fermer : Ctrl W + c
  • garder une seule fenetre : only

Tampons (buffers)

  • Vim a un système intégré de tampons d'édition
    • liste des tampons: :ls
    • basculer au tampon précédent: Ctrl-^
    • accéder au tampon <num>: b <num>
    • supprimer le tampon <num> : bd <num>
  • Extension Bufexplorer http://www.vim.org/scripts/script.php?script_id=42, utilisation aisée, avec un menu
  • <leader>be
  • ouverture d'un tampon : Return
    • suppression d'un tampon : d

Compilation - Gestion des Erreurs

  • outils externes :
    • executer une commande
      :! <commande>
      
    • executer une commande en récuperant la sortie
      :r! <commande>
      
    • fenêtre d'édition du mode commande : permet de réediter des commandes précédentes «q:»
  • compilation
    • executer make en récupérant les erreurs dans une liste de localisation
      :lmake <command>
      
    • on peut aussi redéfinir la variable make
      :set makeprg=pdflatex\ %
      

Gestion de version

utilisation de diff

  • prendre en compte la fenêtre courante
    :diffthis
    
    • se deplacer dans les différences : «[c», «]c»
    • donner la modif courante au voisin
      dp
      :[domaine]diffput
      
    • prendre la modif elementaire du voisin
      do
      :[domaine]diffget
      
    • mettre-à jour les différences
      :diffupdate
      

vimfugitive

  • Télécharger depuis [[https://github.com/tpope/vim-fugitive/]]
  • appel classique a ''Git'' : :Git command
  • Pour faire un commit
    • Gstatus : selectionner les fichiers ou bout de fichiers (Ctrl-N bouger et - pour selectionner)
    • cc : ecrire un message de commit + sauvegarde (:w)
  • Gblame : équivalent d'un Git blame
  • Gdiff : permet d'ouvrir un mode difference avec une version de revision
  • Gdiff : ouvre un diff entre le fichier courant et sa version d'index ; → utile pour faire un commit sur une partie du fichier
  • Ggrep : enveloppe pour git grep
  • Gread : charge dans le buffer courant la version du fichier courant de l'index
  • Gread :% : charge dans le buffer courant une version de revision
  • Gwrite : ajoute le fichier courant a l'index (ou la zone de transit)

Quelques extensions interressantes

  • vimwiki → pour prendre des notes
  • vimOrganizer → lire du org
  • vimSlime → a utiliser avec tmux, screen ou autre quand on a une REPL
  • vinfo → pour naviguer dans la doc gnu info
  • w3m.vim → navigateur mode texte dans vim base sur w3m

Références

In [ ]: