SlideShare une entreprise Scribd logo
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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
~/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

Contenu connexe

Tendances

PHP - get started
PHP - get startedPHP - get started
PHP - get started
mazenovi
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
julien pauli
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
kader15
 

Tendances (19)

Programmation Shell Script
Programmation Shell ScriptProgrammation Shell Script
Programmation Shell Script
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
Formation python
Formation pythonFormation python
Formation python
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
 
Cours php
Cours phpCours php
Cours php
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
PHP Training
PHP TrainingPHP Training
PHP Training
 
Generalites
GeneralitesGeneralites
Generalites
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
 
Cours java script
Cours java scriptCours java script
Cours java script
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
PHP & MYSQL #5 : fonctions
PHP & MYSQL #5 :  fonctionsPHP & MYSQL #5 :  fonctions
PHP & MYSQL #5 : fonctions
 
PHP mysql Xml.pdf
PHP mysql Xml.pdfPHP mysql Xml.pdf
PHP mysql Xml.pdf
 
Formation python
Formation pythonFormation python
Formation python
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++
 
PHP #2 : variables, conditions & boucles
PHP #2 : variables, conditions & boucles PHP #2 : variables, conditions & boucles
PHP #2 : variables, conditions & boucles
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 

En vedette

myMiniFramework_eBook
myMiniFramework_eBookmyMiniFramework_eBook
myMiniFramework_eBook
Pierre Contri
 
Guide de securite php
Guide de securite phpGuide de securite php
Guide de securite php
belfkih
 

En vedette (12)

Faqjavaee (1)
Faqjavaee (1)Faqjavaee (1)
Faqjavaee (1)
 
myMiniFramework_eBook
myMiniFramework_eBookmyMiniFramework_eBook
myMiniFramework_eBook
 
arar2
arar2arar2
arar2
 
Guide de securite php
Guide de securite phpGuide de securite php
Guide de securite php
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 
Plateforme e-learning PHP
Plateforme e-learning PHP Plateforme e-learning PHP
Plateforme e-learning PHP
 
Angular 2 : le réveil de la force
Angular 2 : le réveil de la forceAngular 2 : le réveil de la force
Angular 2 : le réveil de la force
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Mémoire de Licence, site web dynamique sous JEE, application aux entreprises ...
Mémoire de Licence, site web dynamique sous JEE, application aux entreprises ...Mémoire de Licence, site web dynamique sous JEE, application aux entreprises ...
Mémoire de Licence, site web dynamique sous JEE, application aux entreprises ...
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 

Similaire à VIM puissance PHP = VI Improved !

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
julien pauli
 
Cours c#
Cours c#Cours c#
Cours c#
zan
 

Similaire à VIM puissance PHP = VI Improved ! (20)

Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Php_Mysql.pdf
Php_Mysql.pdfPhp_Mysql.pdf
Php_Mysql.pdf
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Cours c#
Cours c#Cours c#
Cours c#
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
 
"Un module Prestashop, comment ca marche?"
"Un module Prestashop, comment ca marche?""Un module Prestashop, comment ca marche?"
"Un module Prestashop, comment ca marche?"
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Syntaxe du langage PHP
Syntaxe du langage PHPSyntaxe du langage PHP
Syntaxe du langage PHP
 
PHP_intro.pdf
PHP_intro.pdfPHP_intro.pdf
PHP_intro.pdf
 
Return Type Declaration
Return Type DeclarationReturn Type Declaration
Return Type Declaration
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 

Plus de Frederic Hardy

Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
Frederic Hardy
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
Frederic Hardy
 

Plus de Frederic Hardy (11)

Comment tester des services web ?
Comment tester des services web ?Comment tester des services web ?
Comment tester des services web ?
 
TDD avec atoum
TDD avec atoumTDD avec atoum
TDD avec atoum
 
TDD avec atoum
TDD avec atoumTDD avec atoum
TDD avec atoum
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Atoum
AtoumAtoum
Atoum
 
Plein PHAR !
Plein PHAR !Plein PHAR !
Plein PHAR !
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Plein phar !
Plein phar !Plein phar !
Plein phar !
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Plein phar
Plein pharPlein phar
Plein phar
 
PHP : retour vers le futur !
PHP : retour vers le futur !PHP : retour vers le futur !
PHP : retour vers le futur !
 

VIM puissance PHP = VI Improved !

  • 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