Vim fête son 20e anniversaire

Posté par  (site web personnel) . Modéré par rootix. Licence CC By‑SA.
Étiquettes :
43
3
nov.
2011
Ligne de commande

Vim, le célèbre éditeur de texte vient de fêter son 20e anniversaire. C’est, en effet, le 2 novembre 1991 que Bram Moolenaar a publié la première version de Vim. C’était alors un clone de vi pour Amiga. Toutefois, contrairement à vi, c’est un logiciel libre. Il a pu ainsi être porté rapidement sur d’autres environnements et devenir l’éditeur de référence de nombreux développeurs.

Au fil des ans, de nombreuses versions se sont succédées (la version actuelle est la 7.3), mais son auteur a gardé le principe que Vim doit rester un éditeur de texte et être le plus possible au service de l’utilisateur.

Profitons‐en pour rappeler que si Vim est un logiciel libre publié sous une licence compatible avec la GPL, ses utilisateurs sont encouragés à faire un don à ICCF Holland, une association créée par Bram Moolenaar pour aider les enfants en Ouganda.

Et pour célébrer les 20 ans de Vim, vous êtes encouragés à poster en commentaire toutes les astuces et anecdotes que vous avez sur Vim.

Aller plus loin

  • # En vrac, mes préférés

    Posté par  . Évalué à 8.

    Des astuces ? oulahhhhh y'en a tellement...

    Déjà ne pas oublier de modifier son .vimrc pour avoir les options qui vont bien :

    
    

    en mode déplacement :

    # pour rechercher le mot sur lequel est placé le curseur
    % pour aller à la parenthèse (ou crochet, ou accolade) fermante/ouvrante correspondant à la parenthèse sur laquelle est placée le curseur
    . pour répéter la dernière édition
    ctrl+ et ctrl- pour incrémenter/décrémenter des nombres (s'applique au prochain sur la ligne)
    yi copier ce qui est entre , pour remplacer (change), utiliser ci : pratique pour modifier le contenu d'un bloc ou d'une chaine

    En mode édition, les commandes de completion :

    ctrl+n (p) = completion de mot, match suivant (précédent)
    ctrl+x f = completion de nom de fichier
    ctrl+x l = completion de ligne

    j'en oublie forcément.

    Il y a aussi le mode multi-fenêtres (ctrl+w ou est n pour créer (s pour faire un split vertical plutôt qu'horizontal), , w pour changer de fenêtre courante, + et - pour changer la taille, x pour inverser avec la fenêtre suivante... La variante est le mode diff, avec le très pratique :diffget pour patcher le bloc courant sélectionné avec v.

    Ah, et puis dans la recherche courante, \v pour passer en mode verymagic (maximum d'interprétation des caractères spéciaux) et \V pour "nomagic" (pas d'interprétation). :help magic. Ca peut se faire globalement aussi bien sûr.

    Bon je m'arrête là on pourrait continuer longtemps. J'ai hâte de découvrir les tricks des autres... :D

    Le truc quand on découvre une nouvelle commande / manière de faire dans vim : s'astreindre à l'utiliser au maximum pendant une courte période, même quand il y a plus simple ou plus rapide. Ca permet de créer l'automatisme. Ce n'est pas limité à vim bien sûr, mais vu le nombre d'astuces qu'on rencontre et qu'on n'utilise jamais... ;)

    • [^] # Re: En vrac, mes préférés

      Posté par  . Évalué à 2.

      Bon mon bloc de code pour la conf a sauté, j'ai du mal avec la nouvelle interface de commentaires...

      Reprenons :

      syntax on
      if has("autocmd")
      " Enabled file type detection
      " Use the default filetype settings. If you also want to load indent files
      " to automatically do language-dependent indenting add 'indent' as well.
      filetype plugin indent on
      " try to remember last known cursor position
      autocmd BufReadPost * if line("'\"") | exe "normal '\"" | endif
      endif " has ("autocmd")
      set showcmd
      set showmatch
      set smartcase
      set incsearch
      set hlsearch

      C'est le minimum vital.

    • [^] # Re: En vrac, mes préférés

      Posté par  . Évalué à 9.

      Ce qui est sympa avec vim, c'est la façon dont les choses se combinent entre-elles et de façon assez intuitive. Si tu sais comment faire un marqueur et comment effacer du texte, tu sais naturellement comment effacer du texte jusqu'au marqueur.

      Il n'y a pas très longtemps que j'utilise vim, mais voilà ma cheat sheet perso qui a encore besoin d'être complétée mais qui contient déjà pas mal de trucs bien pratiques :

      Invocation :
      
      vim
      vim file
      vim file1 file2
      commande | vim -
      view #mode lecture seule
      vimdiff file1 file2 #mode merge
      
      Ouvrir/sauver/quitter :
      
      :w - sauve le fichier courant
      :q - quitte
      :q! - force quitte
      :wq - sauve et quitte
      :e file - ouvrir "file" dans un nouveau buffer
      :bn - passe au buffer suivant
      :bp - passe au buffer précédent
      :wn - sauvegarde et passe au buffer suivant
      
      Modes :
      
      Vim est un éditeur modal, il y a donc différents modes
      
      ESC - quitte le mode en cours
      
      Mode insertion (édition) :
      
      (i = insert, a = append, o = open)
      
      i - insère avant le curseur
      a - insère après le curseur
      I - insère au début de la ligne
      A - insère à la fin de la ligne
      o - ouvre une nouvelle ligne sous la ligne en cours
      O - ouvre une nouvelle ligne au-dessus de la ligne en cours
      
      ctrl-p - propose l'auto-complétion du mot en cours à partir des mots du document
      ctrl-x - propose l'auto-complétion du mot en cours à partir des mots du dictionnaire
      
      Mode visuel (sélection) :
      
      v - passe en mode visuel (sélection)
      V - passe en mode visuel lignes (sélection de lignes)
      ctrl-v - passe en mode visuel bloc (sélection d'un cadre de texte)
      
      > - indenter la sélection
      < - désindenter la sélection
      = - indentation automatique de la sélection
      
      Déplacement :
      
      0 - début de ligne
      ^ - premier caractère significatif de la ligne
      $ - fin de ligne
      G - fin de fichier
      :n - aller à la ligne n
      
      Un chiffre devant une action du curseur répète l'action, par exemple 5 suivit de flèche vers le bas descend de cinq lignes.
      
      Recherche :
      
      /pattern - cherche "pattern" vers l'avant
      ?pattern - cherche "pattern" vers l'arrière
      * - cherche le mot actuellement sous le curseur
      n - continue la recherche vers l'avant
      N - continue la recherche vers l'arrière
      
      Rechercher/remplacer :
      
      Vim accepte en gros les mêmes expressions que sed :
      
      :%s/search/replace/ - remplace toutes les occurences du fichier
      :%s/search/replace/c - idem mais demande confirmation
      :'<,'>s/search/replace/ - remplace toutes les occurences du début à la fin de la sélection
      
      Exemples :
      indenter les lignes commençant par foo avec des tabulations :
      :%s/^foo/\t/
      
      commenter la sélection avec des # :
      sélectionner des lignes de texte avec V puis :
      :'<,'>s/^/#/
      
      supprimer les retours chariot pour convertir les sauts de ligne CRLF ("DOS") en sauts de ligne LF ("Unix") :
      :%s/\r//
      
      Couper/Copier/Coller :
      
      (d = delete, y = yank, p = paste)
      
      d - coupe la sélection
      dw - coupe un mot
      dd - coupe la ligne courante
      
      y - copie la sélection
      yw - copie un mot
      yy - copie la ligne courante
      
      p - colle après le curseur
      P - colle avant le curseur
      (remplace la sélection si on est en mode visuel)
      
      Ces actions peuvent être précédées d'un nombre et suivies d'un indicateur tel que 0, ^, $...
      
      Exemples:
      5dd - coupe 5 lignes
      d$ - coupe jusqu'à la fin de la ligne
      dG - coupe jusqu'à la fin du fichier
      3yw - copie 3 mots
      y0 - copie jusqu'au début de la ligne
      2p - colle deux fois
      
      Marqueurs :
      
      Les marqueurs sont en gros un système de favoris à l'intérieur du document, pratique  pour se déplacer dans les grands fichiers
      
      mz - crée un marqueur "z" à la ligne courante
      'z - va jusqu'au marqueur "z"
      
      Les marqueurs peuvent être combinés avec d'autres commandes :
      
      d'z - coupe jusqu'au marqueur "z"
      y'z - copie jusqu'au marqueur "z"
      
      Autres commandes de base :
      
      :!foo - exécute la commande externe "foo" et en affiche la sortie
      u - (undo) annule la dernière opération
      ctrl-r - (redo) rejoue la commande annulée
      . - rejoue la dernière opérationn
      
      Configuration :
      
      Vim est configurable via des variables
      
      :set - montrer les valeurs qui diffèrent de la configuration par défaut
      :set all - montrer toutes les valeurs
      :set foo? - montre la valeur de foo
      :set foo - active foo 
      :set foo=bar - assigne la valeur bar à foo
      
      On peut mettre les variables dans ~/.vimrc pour une configuration persistente (dans ce cas, ne pas mettre le ':' devant set)
      
      Variables utiles :
      :set number - active la numérotation des lignes
      :set dictionary=/usr/share/dict/words - dictionnaire, pour l'auto-complétion et la vérification orthographique
      
      Plus d'infos :
      
      :help
      http://www.worldtimzone.com/res/vi.html
      http://www.cs.swarthmore.edu/help/vim/home.html
      http://vim.wikia.com
      http://arstechnica.com/open-source/guides/2009/05/vim-made-easy-how-to-get-your-favorite-ide-features-in-vim.ars
      
      

      Et mon .vimrc :

      set nocompatible
      set backupdir=~/.cache/vim
      set smartcase
      set hlsearch
      " set number
      syntax on
      filetype plugin on
      " remember last position
      autocmd BufReadPost *
        \ if line("'\"") > 0 && line("'\"") <= line("$") |
        \   exe "normal! g`\"" |
        \ endif
      
      

      Pour les utilisateurs de vim sous bash :
      echo "set -o vi" >> ~/.bashrc
      et les commandes vi deviennent utilisables sous bash (par défaut en mode emacs) !

      • [^] # Re: En vrac, mes préférés

        Posté par  . Évalué à 4.

        Ce qui est sympa avec vim, c'est la façon dont les choses se combinent entre-elles et de façon assez intuitive.

        On ne doit pas avoir la même définition d'intuitif...

        • [^] # Re: En vrac, mes préférés

          Posté par  . Évalué à 9.

          Certes, les commandes de bases de vim peuvent paraître un peu cryptiques au premier abord, mais ce qu'il voulait dire, c'est qu'une fois que tu sais faire A et B alors tu sais automagiquement comment faire A+B.

          Par exemple, si tu sais effacer (d) et que tu sais aller à la fin du fichier (G), alors tu sais déjà effacer jusqu'à la fin de fichier (dG), rien à apprendre de nouveau.

          • [^] # Re: En vrac, mes préférés

            Posté par  . Évalué à -1.

            Si tu sais sélectionner (shift+mouvement), supprimer (suppr) et aller à la fin d'un fichier ctrl+end, alors tu sais automatiquement comment supprimer jusqu'à la fin d'un fichier (shit+ctrl+end, puis suppr)!

      • [^] # Re: En vrac, mes préférés

        Posté par  . Évalué à 4.

        Merci pour la cheat list, j'ai appris plusieurs choses.

        Est ce qu'elle est publiée quelque part (en dehors d'ici, ce qui est déjà bien), par exemple sur un wiki ?

        Si ce n'est pas le cas, pourquoi ne pas lancer une page vim cheat code sur le wiki de linuxfr ?

        Quelques remarques :

        Déplacement :

        0 - début de ligne
        ^ - premier caractère significatif de la ligne
        $ - fin de ligne
        G - fin de fichier
        :n - aller à la ligne n

        gg - Aller à la première ligne du fichier. Plus rapide que ':0'.

        indenter les lignes commençant par foo avec des tabulations :
        :%s/^foo/\t/

        Hum, là tu remplaces tous les foo en déput de ligne par des tabulations plutôt.

        commenter la sélection avec des # :
        sélectionner des lignes de texte avec V puis :
        :'<,'>s/^/#/

        À noter qu'il n'est pas nécessaire de taper '<,'>. Les seules touches à taper sont
        Vjjjjjjjjj:s/^/#/
        D'ailleurs on peut fait un copier coller de la ligne dans vim.

        Autre solution :
        ctrl+VjjjjjjjI#[ESC]
        Prend un peu plus de temps à processer, mais éviter de taper :s/^/

        supprimer les retours chariot pour convertir les sauts de ligne CRLF ("DOS") en sauts de ligne LF ("Unix") :
        :%s/\r//

        Et pour supprimer les affreux ^M qui apparaissent en fin de ligne, taper
        :%s/^M//
        En écrivant le ^M avec la combinaison ctrl+v,ctrl+m

        Quelques autres trucs :
        ctrl+u/d : remonte/descend d'un demi écran (up/down)
        ctrl+b/f : remonte/descend d'un écran (back/forward)
        ctrl+e/y : remonte/descend le fichier d'une ligne
        H / M / L : va en haut (high) / au milieu (medium) / en bas (Low) de l'écran

      • [^] # Re: En vrac, mes préférés

        Posté par  (site web personnel) . Évalué à 3.

        Y'a aussi une astuce toute bête qui m'a fait gagner beaucoup de temps : vim fichier +ligne ouvre un fichier en se positionnant directement à la ligne spécifiée.

    • [^] # Re: En vrac, mes préférés

      Posté par  . Évalué à 3. Dernière modification le 03 novembre 2011 à 10:59.

      Alors, mes préférés :

      • les text objects, exemple: ci( (change inside parenthesis), das (delete a sentence), yi{ (yank inside brackets), bref vous avez compris l'idée...
      • pour les utilisateurs de git, le plugin fugitive est vraiment top
    • [^] # Re: En vrac, mes préférés

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 03 novembre 2011 à 11:00.

      En mode insertion :
      Pour écrire le résultat d'une opération arithmétique :
      CTRL-R=5+3
      Pour écrire ce qu'il y a dans le buffer de recherche :
      CTRL-R/
      Pour écrire le nom du fichier courant :
      CTRL-R%
      Et plus généralement fonctionne avec tout les buffers que l'on veut :

      • Selectionner du text
      • Mettre la selection dans un buffer de votre choix: '«caractere de votre choix»y (exemple: 'uy)
      • copier le contenu d'un buffer en mode insertion: CTRL-R«caractere de votre choix» (exemple: CTRL-Ru)
      • copier le contenu d'un buffer en mode normal: '«caractere de votre choix»p (exemple: 'up)
    • [^] # Re: En vrac, mes préférés

      Posté par  . Évalué à 3.

      ctrl+ et ctrl- pour incrémenter/décrémenter des nombres (s'applique au prochain sur la ligne)

      Ça ne fonctionne pas forcément. C'est parfois interprété par le terminal, ou bien par la gui (dans le cas de gvim et consorts) pour modifier la taille de la police.

      Mais on peut toujours utiliser ctrl+a / ctrl+x. Et l'avantage, c'est que ça fonctionne aussi dans vimperator (dans le navigateur aussi la touche ctrl combinée avec + ou - modifie la taille de la police).

    • [^] # Re: En vrac, mes préférés

      Posté par  . Évalué à 3.

      # pour rechercher le mot sur lequel est placé le curseur

      Marche aussi avec * qui est plus simple d'accès

      • [^] # Re: En vrac, mes préférés

        Posté par  . Évalué à 4.

        Ah ben non... * permet de chercher le mot vers l'avant alors que # recherche le mot vers l'arrière. Ensuite n permet de rechercher l'occurence suivante dans le même sens (vers l'arrière avec # et vers l'avant avec *) et N permet de rechercher l'occurence suivante dans le sens inverse (vers l'avant avec # et vers l'arrière avec *).
        Finalement vim c'est super logique une fois qu'on connait qq commande de base, et c'est vraiment génial lorsqu'on déteste passer son temps à aller chercher la souris avec la main droite...

        • [^] # Re: En vrac, mes préférés

          Posté par  . Évalué à 1.

          Pourquoi "ah ben non" ? Dans la contribution initiale on parlait de "pour rechercher le mot sur lequel est placé le curseur". Quand on se limite à ça, # et * sont équivalent. ;)

          Après si on prend en considération le sens de recherche effectivement ça diffère. Je plussois donc ta contribution ;)

          Je rajoute même que tant que l'on veut continuer la recherche dans le même sens, on peut économiser un déplacement de doigt en continuant avec * et # plutôt que d'aller sur le n ...

  • # mon truc à moi

    Posté par  . Évalué à 4.

    :r /tmp/toto
    inclut le fichier /tmp/toto dans le buffer courant
    :r!command
    inclut le résultat de l'exécution de la commande externe «command» dans le buffer courant.

    • [^] # Re: mon truc à moi

      Posté par  . Évalué à 3.

      Dans le même esprit

      :'<,'>!command

      Passe la sélection courante sur l'entrée standard de la commande et la remplace par la sortie de la commande. Avec bien sur les variations :

      :%!command
      :12,.!command
      etc.

      Étienne

  • # petite blague/histoire :-)

    Posté par  (site web personnel) . Évalué à 10.

    Plutôt que de poster une astuce que personne ne retiendra, je préfère cette petite histoire/blague vue sur Twitter (crédit à son auteur) :p

    Q: comment générer une chaîne aléatoire?
    R: prenez un étudiant/stagiaire, mettez le devant un vi(m) et demandez lui de quitter :-)

    https://damien.pobel.fr

  • # Mes plugins favoris.

    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 03 novembre 2011 à 11:01.

    • vcscommand.vim vcsgit.vim vcssvn.vim
    • taglist.vim
    • matchit.vim: pour faire fonctionner le % entre les ouvertures et les fermetures de balises xml
  • # Changer le répertoire courant

    Posté par  . Évalué à 3.

    Il m'arrive souvent de vouloir changer le répertoire courant (:chdir ou :lchdir) pour me retrouver dans le répertoire du fichier en cours d'édition (afin de facilement travailler sur les fichiers du même répertoire). J'ai ajouté ces 2 commandes dans mon vimrc :

    command LCdf execute "lchdir ".escape(expand("%:p:h"), ' ')
    command Cdf execute "chdir ".escape(expand("%:p:h"), ' ')

    Explications :

    • % : nom du fichier en cours d'édition
    • %:p : transforme en nom complet (voir :help ::p)
    • %:p:h : ne garde que le dirname (voir :help ::h)

    La fonction escape permet de rajouter un \ devant les espaces.

    Étienne

    • [^] # Re: Changer le répertoire courant

      Posté par  (site web personnel) . Évalué à 2.

      Et voilà la même chose automatisée (à chaque fois que l'on change de buffer, le répertoire courant est mis à jour) :

      " Se place dans le path du buffer édité
      
      function s:lcd()
          try
              " On se place dans un try au cas ou le chemin n'existe pas ( chemin
              " distant… )
              lcd %:p:h
          catch /.*/
              echo v:exception
          endtry
      endfunction
      autocmd BufReadPost * call <SID>lcd()
      
      
      • [^] # Re: Changer le répertoire courant

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        C'est casse-gueule quand même. Personnellement, j'aime sacoir dans quel répertoire je suis, et ne pas en bouger. Pour peut que les outils dépendent du répertoire d'exe (comme la suite de test, svn, etc), ça peut rapidement devenir ingérable.

        • [^] # Re: Changer le répertoire courant

          Posté par  (site web personnel) . Évalué à 1.

          Je n'ai rencontré aucun problèmes avec.

          Pour svn par exemple, j'ai pris l'habitude de le lancer dans un shell :

          !svn ci -m "message" %
          
          

          Et ça fonctionne sans problème.

          • [^] # Re: Changer le répertoire courant

            Posté par  . Évalué à 7.

            Il y a même une option qui fait ça très bien, pas besoin de définir une fonction.
            :set autochdir

          • [^] # Re: Changer le répertoire courant

            Posté par  (site web personnel, Mastodon) . Évalué à 1.

            Ce n'est pas une question de rencontrer ou non des problèmes. De devoir continuellement se demander dans quel répertoire tu es, c'est pénible. Je préfère asseoir ma réflexion depuis un unique point de départ, plutôt que de devoir toujours changer de point de référence dans ma réflexion. Ce n'est pas une question d'affichage, c'est vraiment une question de référentiel.

            Et je on ne commit pas directement, on teste d'abord, saligaud :p

            • [^] # Re: Changer le répertoire courant

              Posté par  . Évalué à 2.

              Et je on ne commit pas directement, on teste d'abord, saligaud :p

              :make test
              
              

              Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: Changer le répertoire courant

          Posté par  . Évalué à 2.

          Oui moi aussi je préfère rester sur un emplacement fixe. En général en tête de l'arbo des sources. Comme ça quand on veut ouvrir un autre fichier ça évite de devoir tout remonter depuis le fichier courant pour redescendre ensuite vers le fichier cherché.

  • # Mon astuce récente, dont je ne sais plus me passer.

    Posté par  . Évalué à 3.

    shift+k sur une fonction C par exemple, je l'ai découverte par hasard (fausse manipe)
    Marche bien sous vim, mais sous gvim c'est pas top.

  • # Preview de VIM 7.4

    Posté par  (site web personnel) . Évalué à 4.

    Et pour célébrer les 20 ans de Vim, vous êtes encouragés à poster en commentaire toutes les astuces et anecdotes que vous avez sur Vim.

    Pour la version 7.4, l'intégration d'un interpréteur ELISP est prévue, elle ouvrira les portes de l'édition de texte efficace aux utilisateurs de Vim.

    • [^] # Re: Preview de VIM 7.4

      Posté par  (site web personnel) . Évalué à 3.

      Pour la version 7.4, l'intégration d'un interpréteur ELISP est prévue, elle ouvrira les portes de l'édition de texte efficace aux utilisateurs de Vim.

      Trop gros, passera pas...

      • [^] # Re: Preview de VIM 7.4

        Posté par  . Évalué à 6.

        Bah oui, si on intègre un mode EMACS dans vim, il faudra plus de RAM.

        Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

        • [^] # Re: Preview de VIM 7.4

          Posté par  . Évalué à 3.

          ça va, le moindre gadget embarque au moins 16Mo, ce qui suffit très largement pour faire tourner vim dans Emacs OS ;)

          • [^] # Re: Preview de VIM 7.4

            Posté par  . Évalué à 1.

            Ça suffit pour Vim, mais Emacs dans 16 Mo, comment dire…

            Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

            • [^] # Re: Preview de VIM 7.4

              Posté par  (site web personnel) . Évalué à 3.

              Chez moi d'après TOP j'ai ça:

                PID USERNAME   THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
               2078 michael      2  44    0   180M 49936K select  5   0:05  0.00% emacs (Gtk2)
               2529 michael      1  44    0 99760K 25312K select  1   0:00  0.00% emacs (terminal)
               2477 michael      1  45    0 78960K 11672K select  0   0:00  0.00% vim
               2486 michael      1  46    0  7144K  2252K ttyin   0   0:00  0.00% nvi
              
              

              donc le seul de ces quatre programmes qu'on puisse espérer lancer avec 16Mo de RAM est nvi et pas vim. Lest tailles de VIM (80 Mo) et Emacs dans un terminal (100 Mo) ont le même ordre de grandeur.
              • [^] # Re: Preview de VIM 7.4

                Posté par  . Évalué à 1.

                Le SIZE doit pouvoir dépasser la mémoire dispo. (tant que ça dépasse pas le maximum d’addressage), il me semble, c’est le RESIDENT qui est pertinent comme espace effectivement utilisé.

                De plus je suppute que la mémoire occupée est fortement dépendante des options/extensions utilisées, sans parler des options de compilation (il y a des chances pour que ta distrib. te propose plusieurs paquets binaires pour vim).

                • [^] # Re: Preview de VIM 7.4

                  Posté par  . Évalué à 1.

                  Pour donner de l’eau à mon moulin

                  VIRT RES
                  40M 8M (vim-gtk — scripting python&co+gui)
                  25M 5M (vim-nox — scripting python&co)
                  13M 4M (vim)

                • [^] # Re: Preview de VIM 7.4

                  Posté par  (site web personnel) . Évalué à 3.

                  Le SIZE doit pouvoir dépasser la mémoire dispo. (tant que ça dépasse pas le maximum d’addressage), il me semble, c’est le RESIDENT qui est pertinent comme espace effectivement utilisé.

                  Il me semble que RES est la RAM effectivement utilisée (la RAM pas le SWAP) tandis que SIZE est la somme des tailles des segments TEXT, DATA et STACK autrement dit la place que prend le programme en mémoire.

                  De plus je suppute que la mémoire occupée est fortement dépendante des options/extensions utilisées, sans parler des options de compilation (il y a des chances pour que ta distrib. te propose plusieurs paquets binaires pour vim).

                  Après vérification dans ports/editors/vim/Makefile il semblerait que cette version de vim est compilée avec

                  WITH_CSCOPE=    yes
                  WITH_EXUBERANT_CTAGS=yes
                  WITH_PERL=      yes
                  WITH_PYTHON=    yes
                  WITH_RUBY=      yes
                  WITH_TCL=       yes
                  WITH_LUA=       yes
                  
                  

                  ce qui intègre tous les interpréteurs correspondants à vim.
              • [^] # Re: Preview de VIM 7.4

                Posté par  . Évalué à 2.

                Tu es sûr de tes chiffres? Parce qu'en démarrant Vim et utilisant l'outil de KDE pour la consommation mémoire, j'ai:

                Process 12847 - vim

                Summary

                The process vim (with pid 12847) is using approximately 3.4 MB of memory.
                It is using 3.3 MB privately, and a further 1316.0 KB that is, or could be, shared with other programs.
                Dividing up the shared memory between all the processes sharing that memory we get a reduced shared memory usage of 129.0 KB. Adding that to the private usage, we get the above mentioned total memory footprint of 3.4 MB.

                Library Usage

                The memory usage of a process is found by adding up the memory usage of each of its libraries, plus the process's own heap, stack and any other mappings.
                Private
                more
                1244 KB [heap]
                1116 KB /usr/bin/vim
                268 KB /usr/lib64/libXt.so.6.0.0
                120 KB /usr/lib64/libX11.so.6.3.0
                108 KB /usr/share/vim/vim73/lang/fr/LC_MESSAGES/vim.mo
                Shared
                more
                552 KB /lib64/libc-2.12.2.so
                300 KB /usr/lib64/libX11.so.6.3.0
                92 KB /lib64/ld-2.12.2.so
                68 KB /lib64/libncurses.so.5.7
                56 KB /usr/lib64/libICE.so.6.3.0

                Totals

                Private 3332 KB (= 1768 KB clean + 1564 KB dirty)
                Shared 1316 KB (= 1316 KB clean + 0 KB dirty)
                Rss 4648 KB (= Private + Shared)
                Pss 3461 KB (= Private + Shared/Number of Processes)
                Swap 0 KB

                « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

              • [^] # Re: Preview de VIM 7.4

                Posté par  . Évalué à -2.

                En quoi est-ce surprenant ? Vim, depuis les versions 6.x, est devenu un bloatware. Prétendre que vim est moins gourmand qu'emacs est une gageure. De nos jours, sauf vouloir utiliser nvi qui est bien largement suffisant pour un programmeur C ou un administrateur système, il est préférable de lancer emacs puis M-x viper-mode 5, que lancer vim.

      • [^] # Re: Preview de VIM 7.4

        Posté par  (site web personnel) . Évalué à 2.

        > Pour la version 7.4, l'intégration d'un interpréteur ELISP est prévue, elle ouvrira les portes de l'édition de texte efficace aux utilisateurs de Vim.

        Trop gros, passera pas...

        Disons que c'était une sorte de moment de solidarité avec Charlie Hebdo!

    • [^] # Re: Preview de VIM 7.4

      Posté par  . Évalué à 2.

      Si vim veux être à jour il devrait miser sur guile.
      A ce propos l'équipe éclipse a décidé d'intégré clojure en tant que language d'extension.

  • # Bien utile aussi...

    Posté par  . Évalué à 4.

    ... et que j'utilise beaucoup, en combinaison avec une limite sur la longueur des lignes (set tw=whatever), c'est gqap pour justifier le paragraphe courant.

    Quand on édite du texte et qu'on rajoute du contenu, c'est très pratique : on rallonge les lignes et hop "gqap", tout est de nouveau tout bien aligné :)

    • [^] # Re: Bien utile aussi...

      Posté par  (site web personnel) . Évalué à 1.

      par habitude moi c'est vapgq ;-)

    • [^] # Re: Bien utile aussi...

      Posté par  . Évalué à 3.

      Moi je fais «gqip» , en plus en bépo, c'est extrêmement rapide à taper.

      Je m'en sers souvent pour justifier un paragraphe quand je tape un mail (oui, je tape mes mails avec vim sous mutt, et alors ?)

      Discussions en français sur la création de jeux videos : IRC freenode / #gamedev-fr

    • [^] # Re: Bien utile aussi...

      Posté par  (site web personnel) . Évalué à 2.

      Une touche de moins: j'utilise gq}, ça ne justifie pas tout (mais c'est pas grave car souvent le début est déjà bien justifié) mais jusqu'à la fin du paragraphe.

    • [^] # Re: Bien utile aussi...

      Posté par  (site web personnel) . Évalué à 3.

      Plus rapide avec emacs: M-q par défaut :) (Et ça s'adapte suivant le mode choisi, par exemple cela va justifier en conservant les // en début de ligne si on modifie du code C++)

      J'ai rien contre vim, mais cette commande est pratique (quelque soit l'éditeur), et tout le monde mérite de la connaître.

  • # Et ce qu'on utilise pas

    Posté par  (site web personnel) . Évalué à 3.

    J'adore vim et je l'utilise tous les jours.
    Mais il y a une chose que je n'utilise pas bien que j'en connaisse l'existence depuis fort longtemps.

    C'est l'utilisation des balises pour lancer des commandes.
    Je fais tout en mode visuel quand je dois agir sur une portion de texte. Ou alors j'utilise les raccourcis w,e,b,),} et leurs combinaison avec i ou parfois a.

    Alors je me demande comment vous faites pour savoir que vous voulez agir sur la ligne courante + le 25 qui suivent ? Pour moi c'est pas assez sémantique et probablement source de plus d'erreurs que d'autre chose.

  • # Easter eggs

    Posté par  . Évalué à 2.

    :help!

    :help holy-grail

    Discussions en français sur la création de jeux videos : IRC freenode / #gamedev-fr

  • # eclipse

    Posté par  (site web personnel) . Évalué à 2.

    • [^] # Re: eclipse

      Posté par  . Évalué à 10.

      En comptant le temps de chargement, on peut enlever cinq ans à son âge…

      Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

    • [^] # Re: eclipse

      Posté par  . Évalué à 1.

      Et quitte à parler du gros bas de poitrine on peut rappeler que le projet eclim lui permet d'apparaitre plus sympathique ;-)

  • # Mon astuce.

    Posté par  . Évalué à 2.

    Une astuce pour rendre vim franchement plus agréable à utiliser:

    alias vim='emacs -nw'
    
    

    À copier dans le .bashrc.

    THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

  • # :e Astuce

    Posté par  . Évalué à 4.

    Quelques astuces bien utiles

    Les text-objects c'est le top ! A apprendre tout de suite
    :h text-objects

    Ré-ouvrir un fichier avec un encoding différent
    :e ++enc=latin1

    Ré-ouvrir un fichier au format différent
    :e ++ff=dos

    Ouvrir un fichier en séparant l'écran horizontalement
    :sp

    Déplacer la vue en cours à droite par exemple pour passer de horizontale à verticale,
    ça marche avec H J K L pour les directions
    Ctrl-w K

    Tuer le buffer courant
    :bd

    Voir le buffer contenant dans son nom le mot "codec"
    :b codec

    Après une commande commençant par ":" genre :bn, on peut rejouer cette commande en faisant @: puis comme c'est un enregistrement on peut faire @@ toutes les fois suivantes.

    D'ailleurs les enregistrements, c'est bien pratique, par exemple effacer le ';' à la fin de chaque phrase (oui on peut le faire avec rechercher/remplacer mais c'est pour l'exemple).
    Donc on enregistre (q) dans le registre q (q), aller en fin de ligne ($), effacer le caractère courant (x), aller a la ligne suivante (j) et arrêter l'enregistrement (q), ce qui donne :
    qq$xjq

    Puis on exécute le contenu du registre q en faisant @q
    On peut utiliser un nombre d'exécution comme 37@q
    Et on répète la dernière exécution avec @@

    Oui j'ai désactivé les flèches claviers dans mon vimrc,
    et le truc pas pratique quand on n'active pas les retours à la ligne et que la ligne est trop longue pour la voir, c'est qu'il n'y a pas dans Vim d'ascenseur horizontal.
    Mais bon ya une commande pour déplacer la vue vers la droite ou la gauche: zL et zH

    Voila y'en a plein d'autre et chacun utilise ce qu'il a besoin, c'est l'esprit de Vim :)

  • # Vim

    Posté par  . Évalué à 1.

    (arcaik) |> ~ <| < /etc/vimrc 
    " Search
    set hlsearch
    set incsearch
    
    " Key behavior
    set backspace=indent,eol,start
    set nocompatible
    set mouse=""
    
    " Indent settings.
    set autoindent
    
    " Appareance settings
    syntax on
    set number
    set ruler
    set laststatus=2
    set showmatch
    set showcmd
    set lazyredraw
    set shortmess=at
    set statusline=%F%m%r%h%w\ (%Y)\ (%l,%v)[%p%%]
    set nostartofline
    
    " Folds 
    set foldmethod=marker
    set foldenable
    
    " Filters
    set wildmenu
    set wildignore=*.o,*#,*~,*.dll,*.so,*.
    
    
    set viminfo=
    
    autocmd BufNewFile,BufRead *.py         set expandtab tabstop=4 shiftwidth=4 smarttab
    autocmd BufNewFile,BufRead *.tex        set tabstop=4 tw=78 syntax=tex
    autocmd BufNewFile,BufRead *.html.tt    set syntax=html
    
    

    (arcaik) |> ~ <| < .vimrc 
    " Transparent editing of gpg encrypted files.
    " By Wouter Hanegraaff <wouter@blub.net>
    augroup encrypted
    au!
    " First make sure nothing is written to ~/.viminfo while editing
    " an encrypted file.
    autocmd BufReadPre,FileReadPre *.gpg set viminfo=
    " We don't want a swap file, as it writes unencrypted data to disk
    autocmd BufReadPre,FileReadPre *.gpg set noswapfile
    " Switch to binary mode to read the encrypted file
    autocmd BufReadPre,FileReadPre *.gpg set bin
    autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2
    autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --decrypt 2> /dev/null
    " Switch to normal mode for editing
    autocmd BufReadPost,FileReadPost *.gpg set nobin
    autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save|unlet ch_save
    autocmd BufReadPost,FileReadPost *.gpg execute ":doautocmd BufReadPost " . expand("%:r")
    " Convert all text to encrypted text before writing
    autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --default-recipient-self -ae 2>/dev/null
    " Undo the encryption so we are back in the normal text, directly
    " after the file has been written.
    autocmd BufWritePost,FileWritePost *.gpg u
    
    
  • # Développement en C avec vim

    Posté par  (site web personnel) . Évalué à 2.

    Aller directement aux déclarations des fonctions dans le code source

    Ajouter les lignes suivantes dans votre ~/.vimrc
    set tags=./tags,./../tags,./../../tags,./../../../tags,tags
    Dans le Makefile, ajouter ctags -R *
    pour reconstruire les tags à chaque nouvelle compilation par exemple

    Dans VIM, utiliser CTRL+] pour sauter à un tag
    CTRL+T pour retourner en arrière

    Complétion

    CTRL N : auto complétion des noms de fonctions, variables ...
    CTRL P : complétion en remontant dans le fichier (P = Previous)

  • # Save and Quit

    Posté par  (site web personnel) . Évalué à 2.

    Une commande qui bizarrement n'est pas beaucoup utilisée, mais qui permet d'économiser 1 appui de touche :
    :x = :wq

    C'est quand même 33% de réduction de frappe !

    • [^] # Re: Save and Quit

      Posté par  . Évalué à 3.

      A noter qu'il existe aussi la possibilité de quitter en sauvant en faisant la combinaison ZZ, sans deux-points devant, pas mal rapide aussi.

      • [^] # Re: Save and Quit

        Posté par  (site web personnel) . Évalué à 2.

        Pas exactement pareil (source http://vimdoc.sourceforge.net/htmldoc/editing.html#:quit ) :

        :wq Write the current file and quit. Writing fails when the file is read-only or the buffer does not have a name. Quitting fails when the last file in the argument list has not been edited.

        => si possible on sauvegarde, et si possible on quitte (donc la date du fichier est modifiée si possible)

        :x Like ":wq", but write only when changes have been made.

        => si possible et si modifié on sauvegarde, et si possible on quitte (donc la date du fichier est modifiée seulement en cas de modification)

        ZZ Write current file, if modified, and quit (same as ":x"). (Note: If there are several windows for the current file, the file is written if it was modified and the window is closed).

    • [^] # Re: Save and Quit

      Posté par  (site web personnel) . Évalué à 2.

      C'est quand même 33% de réduction de frappe !

      Si tu comptes la validation (qui fait partie de la commande, car sans elle il ne se passe rien) cela fait 25%.

  • # Vim et ses petits

    Posté par  . Évalué à 10.

    Vim (vi) a aussi influencé beaucoup de logiciels/plugins. Par exemple le fameux Vimperator que j'utilise au quotidien. Rien de plus confortable que de retrouver ses habitudes et de ne pas avoir à quitter son clavier quand on est programmeur/adminsys (ssh, console, etc... pour les admins).

    Sinon un petit xkcd pour la route (bon il est plutôt pro emacs, mais bon... trollons le jeudi comme qui dirait !):

    xkcd, real programmers

    Si tu ne sais pas demande, si tu sais partage !

  • # En vrac

    Posté par  (site web personnel) . Évalué à 2.

    Installer vundle, puis mettre dans son .vimrc:

    filetype off " required! by Vundle, reset later.
    set rtp+=~/.vim/vundle.git/
    call vundle#rc()
    Bundle 'gmarik/vundle'
    Bundle 'tpope/vim-surround'
    Bundle 'scrooloose/nerdcommenter'
    Bundle 'scrooloose/nerdtree'
    Bundle 'majutsushi/tagbar'
    Bundle "MarcWeber/vim-addon-mw-utils.git"
    Bundle "tomtom/tlib_vim.git"
    Bundle "honza/snipmate-snippets.git"
    Bundle "garbas/vim-snipmate.git"
    Bundle "rbonvall/snipmate-snippets-bib"
    Bundle 'L9'
    Bundle 'FuzzyFinder'
    Bundle 'slimv.vim'
    Bundle 'xml.vim'
    Bundle 'matchit.zip'
    Bundle 'Obvious-Mode'
    Bundle 'calendar.vim--Matsumoto'
    Bundle 'mru.vim'
    
    

    Puis aussi, en vrac:

    nmap ,s :source ~/.vimrc<CR>
    nmap ,v :e ~/.vimrc<CR>
    set wildignore=*.o,*.obj,*.bak,*.exe,*.avi,*.mpg,*.mp3,*.fasl,*.log,*.fls,*.aux,*.blg,*.bbl,*.pdf,*.class,*.png,*.dvi,*.cmi
    map gF :e <cfile><CR>
    com! Q qa!
    nnoremap ' `
    nnoremap ` '
    " \begin{...} foo \end{...}
    :vnoremap ae <C-\><C-n>?\\begin{<CR>v/\\end/e<CR>l%
    :vnoremap ie <C-\><C-n>?\\begin{?e<CR>%lv/\\end/b-1<CR>
    omap ae :normal vae<CR>
    omap ie :normal vie<CR>
    function! Swap(foo,bar) range
      exec ":".a:firstline.",".a:lastline.'s/\('.a:foo.'\|'.a:bar.'\)/\="'.a:foo.'"==submatch(1)?"'.a:bar.'":"'.a:foo.'"/g'
    endfunction
    
    
    • [^] # Re: En vrac

      Posté par  . Évalué à 5.

      Ça a l'air très bien mais... ça fait quoi ton truc ?

      • [^] # Re: En vrac

        Posté par  (site web personnel) . Évalué à 3.

        La partie Vundle/Bundle, c'est un peu comme le CPAN.
        Ça installe les plugins directement à partir du site de vim ou de github, ça permet de les mettre à jour…
        J'ai laissé une partie des plugins les plus utiles que j'utilise.
        Je conseille vraiment snipmate (insertion rapide de code), mru (accès aux fichiers "most recently used"), et surround (gestion des conteneurs de toute sortes: parenthèses, tags xml, etc.).

        nmap ,s :source ~/.vimrc<CR>
        nmap ,v :e ~/.vimrc<CR>
        
        

        charge/ouvre directement vimrc

        set wildignore=*.o,*.obj,*.bak,*.exe,*.avi,*.mpg,*.mp3,*.fasl,*.log,*.fls,*.aux,*.blg,*.bbl,*.pdf,*.class,*.png,*.dvi,*.cmi
        
        

        ignore ces extensions lors de la complétion de noms de fichier

        map gF :e <cfile><CR>
        
        

        Crée et ouvre le fichier dont le nom est sous le curseur

        nnoremap ' `
        nnoremap ` '
        
        

        Inverse les raccourcis pour les marques, afin d'avoir par défaut aussi la position de la colonne

        " \begin{...} foo \end{...}
        :vnoremap ae <C-\><C-n>?\\begin{<CR>v/\\end/e<CR>l%
        :vnoremap ie <C-\><C-n>?\\begin{?e<CR>%lv/\\end/b-1<CR>
        omap ae :normal vae<CR>
        omap ie :normal vie<CR>
        
        

        textobjects pour sélectionner des begin/end en latex

        function! Swap(foo,bar) range
          exec ":".a:firstline.",".a:lastline.'s/\('.a:foo.'\|'.a:bar.'\)/\="'.a:foo.'"==submatch(1)?"'.a:bar.'":"'.a:foo.'"/g'
        endfunction
        
        

        Remplacer foo par bar et bar par foo (marche aussi avec la sélection visuelle ou un intervalle).
        • [^] # Re: En vrac

          Posté par  (site web personnel) . Évalué à 2.

          La partie Vundle/Bundle, c'est un peu comme le CPAN.

          Seul bémol cela ne gère pas les dépendances -- du moins la dernière fois que j'ai vérifié. À contrario de vim-addon-manager de Marc Weber.

          PS: les deux omapping auraient dû être définis locaux au buffers (la)tex.

  • # colorscheme en 256 couleurs

    Posté par  . Évalué à 2.

    Pour le colorscheme, j'utilise inkpot qui permet d'utiliser les 256 couleurs du terminal et est très agréable. Et dans le vimrc :

    "force l'affichage en 256 couleurs (parfois le termcap n'est pas à jour où que $TERM n'est pas à XXX-256color)
    set t_Co=256
    let g:inkpot_black_background=1
    colorscheme inkpot
    
    

    Étienne

    • [^] # Re: colorscheme en 256 couleurs

      Posté par  (site web personnel) . Évalué à 1.

      Je préfère xoria256 qui a des couleurs assez prononcées pour la syntaxe mais en restant doux. Voici la partie graphique de mon vimrc

      if &t_Co > 2 || has('gui_running')
      	syntax on
      	set hls
      	set bg=dark
      	if &t_Co > 8 || has('gui_running')
      		set cul
      		colo xoria256
      		hi CursorLine cterm=none
      	el
      		" < 256 colors
      		colo desert
      	en
      	if has('gui_running')
      		set co=87
      		set lines=30
      		set go-=T go-=t stal=2
      		set gfn=Monospace\ 8
      	en
      en
      
      
  • # Goto declaration or file

    Posté par  . Évalué à 2.

    Vous êtes sur une variable ou une fonction et vous vous posez la question : "Mais où est-elle définit ? Comment est-elle initialisée ?" La commande magique "Goto Declaration" :

    gd cherche une variable définie localement en priorité
    gD cherche une variable définie globalement en priorité

    Ça marche même avec les langages non typés comme Python, dans ce cas ça vous amène à la première utilisation de la variable.

    De même, vous êtes sur une instruction #include "foobar.h" ou source foobar.sh et vous voulez ouvrir le fichier correspondant. Rien de plus simple, "Goto file" :

    gf

  • # plein de tricks suplémentaires =)

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    Une commande bien pratique :

    vim scp://root@server.tld//etc/vimrc
    
    

    et encore mieux, depuis son poste, on ouvre un vimdiff sur deux fichiers "distants" :

    vimdiff  scp://root@server_01.tld//etc/vimrc  scp://root@server_02.tld//etc/vimrc
    
    

    Pour créer des fichiers HTML à partir des sources :

    vim +"TOhtml" +"wq" +"q" *.c
    
    

    Une page HTML pour se créer ses couleurs persos :
    http://www.sputnick-area.net/scripts/vim-color.html

    Reselectionner en visual mode (après une opération réalisee)
    gv

    Tout re-indenter:
    gg=G

    Ouvrir un fichier dans deus moitiés horizontales :
    vim -o fic1 fic2

    Ouvrir un fichier dans deus moitiés horizontales :
    vim -O fic1 fic2

    Utiliser un squelette de code lorsqu'on ouvre un fichier d'un type donné pour l a première fois :
    autocmd BufNewFile *.py 0r ~/.vim/skeleton.py

    Quotter toutes les variables en bash (fonctionne aussi pour les langages qui mettent des $ devant les variables : php, perl...)
    %s:\v"@<!\$(\k+):"$\1":gc

    Le pliage de code : les folds : selectionnes avec shift+v des lignes puis :
    zf # pour fermer
    zo # pour ouvrir

    Afficher les tampons
    :display || :reg

    Se déplacer au millieu de la fenetre en mode vertical
    M
    en mode horizontal
    gm

    Ouvrir tous les fichiers en arguments de vim dans des tabs
    vim -p *fichiers # naviguer avec ctrl+PageNext ctrl+pageBefore (ou bien gt / gT )
    Ouvrir un tab en plus :
    :tabedit fic
    Tout fermer
    :qa

    Créer des marques, des repères dans le code:
    m[a-z] # choisir une lettre
    retour à la marque choisie:
    '[a-z]
    liste des marques:
    :marks

    Inverser la casse en mode commande:
    ~

    On ne peut pas mettre d'array dans le string...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.