vim

vi(-improved) est un logiciel d'édition de texte.

Lors d'un développement sous Linux, il est rarement utile d'avoir un traitement de texte (Bon sauf pour les rapports au chef), mais un éditeur de texte est indispensable.
Il ne faut pas confondre édition de texte et traitement de texte.

Un traitement de texte (comme OpenOffice Word ou Word) est un logiciel qui facilite la mise en forme (voir l'édition) d'un document.

Il peut par exemple permettre de mettre un titre en gras ou bien d'augmenter ou de baisser la taille d'une ligne d'un document.

L'éditeur de texte modifie juste des caractères dans un fichier.
Ainsi, donc, vi ne vous permettra pas de faire de traitement de texte, il faut le savoir.

Par contre si il faut:
Modifier un mot ou en ensemble de mot, dans un ou plusieurs fichiers. (Modifier un seul mot dans 10 fichiers avec un traitement de texte devient vite laborieux.)
L'utilisation des expressions régulières permettant de faire des manipulations de texte complexe est encore une des fonctionnalités majeurs d'un éditeur de texte.

Alors il existe deux grands logiciels d'édition de texte emacs et vi (rangés par ordre alphabétique), ne connaissant que vi, je ne donnerai mes impressions et expériences que sous vim (donc vi).
Alors pourquoi vi plutôt que emacs ? Parce-que j'ai appris avec lui :)

Après c'est à vous de vous faire une opinion.

Configuration : ~/.vimrc

Le fichier ~/.vimrc est le fichier de configuration de vim.

Il est possible de mettre dedans certaines options pour ne pas avoir à les activer une par une à chaque lancement de vim. (ouf :D)

Les plus intéressantes

set paste : Activer Copier/Coller.
set nu(mber) : Affiche le numéro de ligne dans la marge.
color enable : Active la coloration du texte.
set autoindent : Active l'indentation automatique.
set ruler : Active des informations intéressantes dans la barre du bas.
set sm : Affiche rapidement (par un mouvement du curseur) la parenthèse correspondante à celle que l'on tape.
set mouse=a : Active la souris (Utile avec la molette pour scroller).
set cursorline : Affiche la ligne courante.
set foldcolumn=2 : Active la colonne de fold de 2 caractères de large. (Ensuite utilisé les raccourcis de fold)
set ts=4 : Définir la tabulation valant 4 espaces.

Raccourcis

Classiques

:w : Sauvegarder.
:wq : Sauvegarder et quitter
i : Ajouter du texte avant le curseur.
I : Ajouter du texte en début de ligne.
:w fichier & Sauvegarder le buffer en court dans fichier.
a : Ajouter du texte après le curseur.
A : Ajouter du texte en fin de ligne.
o : Ajouter du texte à la ligne suivante.
O : Ajouter du texte à la ligne précédente.
w : Avancer d’un mot.
b : Reculer d’un mot.

Héxadécimal

%!xxd : Passer en héxadécimal
%!xxd -r : Revenir à l'affichage normal

Shell

:!commande : Exécuter la commande.&
'' : Aller à la dernière position.
:!! : Exécuter la dernière commande shell.
' puis a-z : Atteindre le signet identifié par la lettre.
:r! commande : Insérer le résultat dans le buffer courant.
CTRL+N : Active l’auto-complétion.

Macros

:map l commande : Affecte la commande à la touche l (CTRL+V + Esc = Esc).
:unmap l : Déaffecte la touche l.
:map : Liste des touches mappées.

Sélection

SHIFT+V & Sélectionner une zone par ligne.
CTRL+V : Sélectionner une zone par colonne.
~ : Inverse la case du caractère.
u : Annuler la dernière opération.
CTRL+R : Restaurer la dernière opération.

Registres

"ay : Copie dans le registre a.
"ap : Colle le registre a.

Splits

:sp fichier : Ouvre un split horizontal avec fichier.
:vs fichier : Ouvre un split horizontal avec fichier.
CTRL+W puis > : Augmente la taille du split.
CTRL+W puis < : Diminue la taille du split.
CTRL+W puis x : Inverse les splits.

Avancés

:10,20w fichier : Sauvegarder de la ligne 10 à la ligne 20 du buffer en court dans fichier.
:10,20w>> fichier : Sauvegarder de la ligne 10 à la ligne 20 du buffer en court à la suite de fichier.

:r fichier : Lit le fichier et l’insère après la ligne courante.
J : Joindre deux lignes.
:qa! & Quitte tous les buffers sans sauvegarder.
>> : Indenter une ligne.
<< : DéIndenter une ligne.
:ls : Lister les buffers ouverts.
Xy : Copier X lignes.
Xyw : Copier X mots.
:bX : Accéder au buffer X. (où X est le numéro retourné par :ls)
p : Coller après la ligne courante.
P : Coller après la ligne courante.
Xd : Effacer X lignes.
Xdw : Effacer X mots.
m puis a-z : Pose un signet identifié par la lettre.

Folds

zf : Créé un fold (et le ferme).
zo : Ouvre un fold.
zc : Ferme un fold.

Déplacements

:12 : Aller à la ligne 12.
12| : Aller à la colonne 12.
gg : Aller au début du fichier.
G : Aller à la fin du fichier.

Combos

xp : Inverse deux lettres.
ddp : Inverse deux lignes.

Macros

Ajouter du code devant plusieurs lignes : CTRL+V puis I puis le texte, et enfin ESC.
Ajouter du code derrière plusieurs lignes : CTRL+V puis A puis le texte, et enfin ESC.
. : Rejoue la dernière séquence effectuée.

Options ligne de commande

vi -o fichier1 fichier2 : Lance vim avec un split horizontal des deux fichiers.
vi -O fichier1 fichier2 : Lance vim avec un split vertical des deux fichiers.
vi -r fichier : Lancer vim et essaie de récupérer les données après un crash.
vi -R fichier : Lancer vim en mode lecture seule.
vi + fichier : Lancer vim à la dernière ligne de fichier.
vi +n fichier : Lancer vim à la ligne n de fichier.

Astuces

Définir la taille des tabulations dans un fichier
A la fin du fichier :
/* vi:set ts=4: */

Basculer le type d'un fichier : dos, unix, mac
Pour ce faire on utilise :e ++ff= dos / unix / mac

Supprimer les lignes vides:
:g/^$/d

Case sensitive :
/recherche\C

Case insensitive :
/recherche\c

Aller plus loin

A lire : http://www.pixelbeat.org/vim.tips.html