VIM puissance PHP = VI Improved !
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

VIM puissance PHP = VI Improved !

  • 3,416 views
Uploaded on

Vous utilisez un IDE complexe ?...

Vous utilisez un IDE complexe ?

Saviez vous qu'on ré-indenter son code d'une commande ? Enregistrer des macros dans VIM ? Lancer un grep ?

Venez découvrir la puissance d'un outil simple et évolutif à travers une présentation en direct du fonctionnement et des fon

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,416
On Slideshare
3,403
From Embeds
13
Number of Embeds
4

Actions

Shares
Downloads
15
Comments
0
Likes
1

Embeds 13

http://www.linkedin.com 8
https://www.linkedin.com 3
http://www.lmodules.com 1
https://twitter.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Forum PHP 2009 Paris - La Villette VIM = VI IMproved ! Frédéric Hardy Matthieu Valleton Questions Utilisateurs d'Eclipse ou assimilé ? Utilisateurs d'emacs ? Utilisateurs de VIM ? Historique 70's ed vi 1988 Bram Moolenaar développe VIM pour l'Amiga 1991 VIM devient un logiciel libre compatible GPL 1992 Portage sous UNIX Portage sous MSDOS 1996 Naissance de gvim 2001 Support des greffons Pliage de code Gestion des types de fichiers Ajout du partage vertical des fenêtres Aujourd'hui Version 7 Vérification orthographique Complétion du code Support des onglets Disponible sur l'ensemble des plates-formes Disponible en huit langues Supporte un grand nombre de langages Demain ? Version 8 Nouvelles fonctionnalités décidées par la communauté http://www.vim.org/sponsor/vote_results.php Principes de fonctionnement Éditeur de texte modal Modes 1 of 14 11/13/2009 03:28 PM
  • 2. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Normal Mode par défaut au démarrage de VIM <Esc> à partir de n'importe quel mode Permet d'appliquer des commandes sur le texte /* Démonstration */ <?php echo $microsoft; # suppression de texte echo $apple; #chercher/remplacer echo 'php'; #mise en majuscules ?> Insertion Permet l'insertion de texte <Esc> ou <Ctrl>-C pour revenir au mode normal Visuel Permet d'effectuer des sélections v pour démarrer une sélection par caractère V pour démarrer une sélection par ligne <Ctrl>-V pour une sélection en bloc <Esc> ou <Ctrl>-C pour revenir au mode normal v = Visuel /* Démonstration */ <?php # Selection par caractères $GLOBALS['truc'] = 'abcde'; # Selection par ligne $line = 'line'; class truc { # Selection par bloc private $truc; private $machin; private $bidule; } ?> Remplacement Permet de remplacer du texte r pour remplacer un caractère R pour remplacer plusieurs caractères r = Replace /* Démonstration */ <?php echo $_SERVER['REQUEST_uRI']; echo $_SERVER['QUERYSTRING']; ?> Comment ça marche, ce truc ? Insertion i ou a à partir du mode normal i = Insert a = After Nouvelle ligne en-dessous/au-dessus du curseur o 2 of 14 11/13/2009 03:28 PM
  • 3. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... O /* Démonstration */ <?php class inutile { # O public $neSertRien = null; # o } ?> Insérer <path>/<commande> en-dessous du curseur :read <path> :read !<commande> /* Démonstration */ :read fichier.php Insérer à la fin de la dernière insertion gi gi = Go Insert /* Démonstration */ <?php class { } ?> En mode insertion : Répéter la dernière insertion <Ctrl>-A A = Append /* Démonstration */ <?php class pleineDePublic { # Insérer après la tabulation } ?> Supprimer le mot avant le curseur <Ctrl>-W W = Word /* Démonstration */ <?php class salleDeConference { # Effacer number public $number = null; } ?> Supprime tous les caractères insérés <Ctrl>-U U = Undo 3 of 14 11/13/2009 03:28 PM
  • 4. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... /* Démonstration */ <?php class encorePlusInutile extends inutile { # On insère une propriété de inutile } ?> Diminuer/augmenter le niveau d'indentation de 1 <Ctrl>-T <Ctrl>-D /* Démonstration */ <?php function malIndente() { # C'est mal indenté } ?> Modification Modifier un mot cw pour modifier du curseur à la fin du mot ciw pour modifier la totalité du mot cw = Change Word ciw = Change Inner Word Il est possible de remplacer c par d /* Démonstration */ <?php # Modification functruc machin() {} noitcnuf reverse() {} # Suppression des arguments function bidule(__FILE__) {} function truc(__LINE__) {} ?> Modifier tout ce qui est entre ', ", (, { et [ ci' en mode normal ci" en mode normal ci( en mode normal ci{ en mode normal ci[ en mode normal Il est possible de remplacer c par d /* Démonstration */ <?php echo 'simple quote'; echo "double quote"; echo toto(PHP_INT_MAX); echo $array[time()]; function bete() { echo date(); } ?> Modifier jusqu'à un caractère ct{caractère} pour modifier jusqu'à {caractère} 4 of 14 11/13/2009 03:28 PM
  • 5. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... cf{caractère} jusqu'à {caractère} inclus Il est possible de remplacer c par d /* Démonstration */ <?php class debile { function trucQuiFaitUnTruc() {} function machinQuiFaitUnTruc() {} function QuiFaitUnTruc() {} } $debile = new debile(); # On veut machinQuiFaitUnTruc $debile->trucQuiFaitUnTruc(); # On veut QuiFaitUnTruc $debile->debileQuiFaitUnTruc(); ?> Modifier la ligne courante cc Il est possible de remplacer c par d /* Démonstration */ <?php /* Ligne de commentaire à supprimer Ligne de commentaire à modifier */ ?> Remonter la ligne suivante sur la ligne courante J {nombre}J remonte les {nombre} lignes /* Démonstration */ <?php $array = array( 1, 2, 3 ); ?> Déplacements hjkl vs Left/Down/Up/Right Se déplacer à droite et à gauche sur une ligne Dernier caractère de la la ligne $ en mode normal <End> en mode normal Premier caractère non vide de la ligne ^ en mode normal <Home> en mode normal {caractère} vers la droite/gauche f{caractère} en mode normal 5 of 14 11/13/2009 03:28 PM
  • 6. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... F{caractère} en mode normal Avant {caractère} vers la droite/gauche t{caractère} en mode normal T{caractère} en mode normal t = To Répéter la dernière commande f, F, t ou T ; dans le même sens, en mode normal , dans le sens opposé, en mode normal Se déplacer dans les objets du texte Avancer/reculer d'un mot w, W w = Word Aller au début/à la fin d'un mot b, B e, E b = Begin e = End Reculer à la fin du mot précédent ge ge = Goto End Avancer/reculer d'une phrase (, ) Copier/coller yy pour copier une ligne p pour coller y = Yank p = Paste Plusieurs presse-papier "{caractère}yy pour copier "{CARACTÈRE}yy pour concaténer au presse-papier "{caractère}p pour coller /* Démonstration */ <?php echo "Forum PHP 2009"; echo "Paris La Villette"; echo "Conférence VIM = VI IMproved"; ?> Rechercher Vers l'avant/l'arrière le mot sous le curseur * # Refaire la dernière recherche n continue la recherche dans le même sens N fait la même recherche dans le sens inverse Expressions rationnelles 6 of 14 11/13/2009 03:28 PM
  • 7. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Très puissantes Trop pour pouvoir être détaillées ici /{regex} cherche vers l'avant ?{regex} cherche vers l'arrière Recherche incrémentale :set incsearch active la recherche incrémentale /* Démonstration */ :set incsearch <?php class truc { public $public; protected $protected; private $private; } ?> Remplacer :s/chaine/autreChaine & répète le dernier remplacement g& le répète pour tout le fichier g = Global /* Démonstration */ <?php class machin { # On passe tout en public public $chose; protected $truc; protected $bidule; } ?> Annuler/Refaire Nombre limité uniquement par la RAM disponible Définir le nombre maximum d'annulations :set undolevels=1 :set undolevels=100 :set undolevels=1000 Annuler la ou les dernières modifications :undo en mode commande u en mode normal Annuler les annulations <Ctrl>-R en mode normal /* Démonstration */ <?php # On n'en veut pas... et puis on en veut echo fonctionQuiNeSertARien(); ?> Arbre d'annulation 1 | 7 of 14 11/13/2009 03:28 PM
  • 8. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... changement 1 | 1 2 / changement 2 changement 3 | | 1 deux 1 two g- recule dans l'arbre d'annulation g+ avance dans l'arbre d'annulation :undolist :earlier :later Macros Séquence de commandes ré-exécutable à volonté q{caractère} démarre l'enregistrement q termine l'enregistrement @{caractère} déclenche l'exécution @@ relance la dernière macro Utilisable avec la quantification /* Démonstration */ <?php ... # $this->assert->string($truc)->isEqual('truc'); $this->equal($truc, 'truc'); ... $this->equal($truc, 'truc'); ... ?> Sauvegarder et charger des macros "{caractère}p insère la macro dans le buffer :let @{caractère} = getline('.') met la ligne courante dans la macro {caractère} :registers permet de lister les macros Quantification Indique le nombre d'exécutions d'une commande {nombre}{commande} Utilisable avec toutes les commandes précédentes /* Démonstration */ <?php # On copie/colle 9 fois # yy # 9p $array[] = 'truc'; ?> Intervalle Groupe de une ou plusieurs lignes {ligneDeDebut},{ligneDeFin}{commande} Groupes pré-définis : . : La ligne courante $ : La dernière ligne % : Toutes les lignes = 1,$ 8 of 14 11/13/2009 03:28 PM
  • 9. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Utilisable avec toutes les commandes précédentes /* Démonstration */ <?php # :set nu # On veut remplacer toto par titi dans ce qui suit $toto = 'toto'; $truc = 'truc'; $toto = $toto . $truc; # ligne non prise en compte echo $toto; # :set nonu ?> Abbréviations Insertion de code automatique Disponibles dans tous les modes /* Démonstration */ :cab PHP !php -l %<CR> :iab <buffer> PHP <?php ?><Esc>3hi Complétion En ligne de commande <Tab> déclenche la complétion <Ctrl>-P : Proposition précédente <Ctrl>-N : Proposition suivante :set wildmenu La complétion est possible à partir : Du contenu du buffer courant D'un dictionnaire De mot-clefs Des noms de fichiers Du contexte (Omnicomplétion) :h completion Indentation et formatage automatique indenter/formater le texte au cours de la frappe Plusieurs modes possibles :set autoindent :set cindent :set indentexpr /* Démonstration */ <?php function truc() ?> Make Définir le programme à appeler :set makeprg=php -l % Définir le format des erreurs :set errorformat=%m in %f on line %l Exécuter le programme :make 9 of 14 11/13/2009 03:28 PM
  • 10. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Mapping Possible de redéfinir toutes les commandes Disponible dans tous les modes /* Démonstration */ :nmap <F11> :make<CR> Pliages Concatène plusieurs lignes Différentes méthodes de pliages Suivant une expression Suivant la syntaxe Suivant l'indentation Suivant des repères Manuellement Activation du pliage :set foldenable :set foldmethod zi en mode normal Replier le texte zc en mode normal zm en mode normal permet de tout replier Déplier le texte zo ou <Right> en mode normal za en mode normal alterne entre plié/déplié Coloration syntaxique :syntax on active la coloration syntaxique :set filetype défini le type du fichier /* Démonstration */ <?php asort($array); function machin($array) { return array_keys($array) } ?> Buffers, fenêtres et onglets Un buffer = un fichier /* Démonstration */ :edit ceciEstUnBuffer.txt :edit ceciEstUnautreBuffer.txt Liste des buffers :buffers :ls Buffer précédent et suivant :bnext :bprev 10 of 14 11/13/2009 03:28 PM
  • 11. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Editer un buffer :buffer {nomDuBuffer} :buffer {numeroDuBuffer} Buffer != fenêtre Une fenêtre pour un buffer Un buffer pour plusieurs fenêtres Un onglet = un ensemble de fenêtre :tabedit Manipuler les fenêtres Séparer la fenêtre courante :split :vsplit Ouvrir une nouvelle fenêtre :new :vnew Se déplacer dans les fenêtres Ctrl-W <Up> Ctrl-W <Down> Ctrl-W <Left> Ctrl-W <Right> /* Démonstration */ :new|new|new|vnew Passer la fenêtre courante en plein écran Ctrl-W _ en mode normal /* Démonstration */ :new :wincmd _ Fermer la fenêtre courante :hide /* Démonstration */ :new :wincmd k :hide Fermer toutes les fenêtres sauf la fenêtre courante Ctrl-W o en mode normal /* Démonstration */ :new|new|new|3 wincmd k :wincmd o */ Sessions Possible de sauvegarder et restaurer à tout instant : Les buffers en cours d'édition La position et la taille des fenêtres La configuration courante :h mksession pour plus d'informations 11 of 14 11/13/2009 03:28 PM
  • 12. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Configuration $HOME/.vimrc $HOME/.gvimrc $HOME/.vim Plugins Possibilité d'ajouter des fonctionnalités taglist http://www.vim.org/scripts/script.php?script_id=273 phpErrorMarker http://www.vim.org/scripts/script.php?script_id=2794 myprojects http://www.vim.org/scripts/script.php?script_id=2556 sherlock http://www.vim.org/scripts/script.php?script_id=2731 upAndDown http://www.vim.org/scripts/script.php?script_id=2586 Astuces pratiques Changer la casse ~ /* Démonstration */ <?php echo $_SERVER['request_method']; ?><FORM ACTION="" METHOD="POST"><?php ?> Permuter le caractère sous le curseur et le suivant xp /* Démonstration */ <?php ehco "toto"; ?> Permute la ligne suivante avec la ligne courante ddp /* Démonstration */ <?php functionAAppelerEnSecond(); functionAAppelerEnPremier(); ?> Ouvrir le fichier correspondant au chemin d'accès sous le curseur gf /* Démonstration */ <?php require('test.php'); ?> Incrémenter/décrémenter le nombre sous le curseur <Ctrl>-A <Ctrl>-X /* Démonstration */ <?php ... 12 of 14 11/13/2009 03:28 PM
  • 13. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... $this->assert->integer($integer)->isEqualTo(666); $this->assert->hexa($hexa)->isEqualTo(0x9); ... ?> Indenter == indente la ligne courante 2== indente les 2 lignes suivantes /* Démonstration */ <?php function truc() { echo 'Ceci est mal indenté'; echo 'Et ca aussi'; echo 'Et ca aussi'; } ?> Sélectionner en mode visuel le texte entre délimiteurs va( sélectionne entre ( et ), délimiteur inclus vi( sélectionne entre ( et ), délimiteur non inclus va[ sélectionne entre [ et ], délimiteur inclus vi[ sélectionne entre [ et ], délimiteur non inclus va{ sélectionne entre { et }, délimiteur inclus vi{ sélectionne entre { et }, délimiteur non inclus /* Démonstration */ <?php echo 'Bienvenue au forum PHP 2009 !'; echo $array['Ceci va être sélectionné']; function machin() { echo 'Sélection !'; echo 'Sélection !'; echo 'Sélection !'; } ?> Modification par bloc Utilisation de la sélection visuelle par bloc <Ctrl>-V /* Démonstration */ <?php class truc { # On veut du public ! private $machin = null; private $bidule = ''; } ?> Édition à distance via ssh :e scp://user@host/.vimrc Intégration Eclim (http://eclim.org/) Vimplugin (http://vimplugin.org/) 13 of 14 11/13/2009 03:28 PM
  • 14. ~/src/vim/forumphp/forumPHP2009/vim.txt.html file:///home/seeschloss/src/vim/forumphp/forumPH... Vimperator (http://vimperator.org/) Ressources :h est votre meilleur ami :h <Tab> est un meilleur ami que :h :h help Site officiel (http://www.vim.org) Wiki officiel (http://vim.wikia.com/wiki/Main_Page) IRC (freenode.net, #vim) A byte of VIM (http://www.swaroopch.com/notes/Vim) Mailing-list http://svn.mageekbox.net/repositories/vim/trunk Google Conclusion VIM est Un truc qui donne mal au crâne Un éditeur de texte Différent Rapide et léger Puissant Multi-plates-formes Modulaire Qui évolue Qui s'adapte à ses utilisateurs Documenté avec une communauté importante Long à apprendre VIM n'est pas Un remède contre le mal de crâne Un IDE Mais il peut s'en approcher via les greffons Et il peut s'y intégrer Citation L'utilisation de vi n'est pas un péché, mais une pénitence. (Richard Stallman) Les auteurs Matthieu Valleton mvalleton@noparking.net Frédéric Hardy frederic.hardy@mageekbox.net http://blog.mageekbox.net Les fichiers de la conférence http://svn.mageekbox.net/repositories/conferences/trunk/forumPHP2009 Remerciements Bram Moolenaar Andrei Zimieski Jean-François Berroyer Perrick Penet L'AFUP Le créateur du paracétamol 14 of 14 11/13/2009 03:28 PM