Journal Pourquoi Vim? (Première partie)

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
54
23
nov.
2017

Sommaire

Vim est, de loin, mon éditeur de code préféré. Dans cet article je vais passer en revue ce qui me plais dans ce logiciel, ou ce qui pourrait plaire à un informaticien. Ces écrits sont un peut long, aussi ils seront séparés en plusieurs parties. Cette partie couvrira les bases, l'édition de texte et l'usage du clavier.

Attention, il ne s'agit pas d'un cours sur Vim, le but de cet article est d'en parcourir les atouts.

Quelques liens utiles:

Libre et multiplateforme

Un des premiers points intéressant avec Vim, c'est qu'il est libre. Sous licence compatible GPLv3. De plus, il est disponible sur GNU/Linux, MacOS, Windows, Android via Termux, FreeBSD, NetBSD, OpenBSD et Solaris.

Il peut autant fonctionner au travers d'un terminal qu'avec sa propre interface graphique. La version graphique à l'avantage de permettre l'affichage d'images, l'usage de la souris et fournit un menu ainsi qu'une barre d'outils.

Léger et modulaire

Initialement conçu pour traiter du texte depuis un terminal, Vim est très léger et peu consommateur de ressources. Il tourne tout aussi bien sur des machines modernes qui sur de vieux modèles.

Vim est avant-tout un éditeur de texte et de code source. Mais il propose également des fonctionnalités optionnelles qu'on retrouve dans un IDE comme la gestion de projet, générer du code, trouver la déclaration d'une fonction, etc.

100% clavier

On peut utiliser la souris avec Vim dans sa version graphique (ou pas), mais ce n'est absolument pas obligatoire. On peut utiliser 100% du logiciel sans lever les mains de son clavier.

Un grand nombre d'action sont disponibles par un simple raccourcis clavier. Par exemple, les touches dédiées du clavier, comme Home, End, les touches fléchées, etc. ont leur équivalents en raccourci comme ^, $, j-k-l-m, etc.

En plus des fonctions de manipulation de texte, Vim en fournit de spécifiques en fonction du contexte. Par exemple, si vous éditez du code en Python, Vim vous propose de démarrer un interpréteur Python et d'y envoyer le code que vous êtes en train d'écrire. Autre exemple: si vous écrivez un e-mail, Vim vous propose des fonctions pour ajouter des champs à celui-ci ou des pièces jointes.

Certaines fonctions peuvent être appelées avec un raccourcis clavier, mais toutes sont exécutables en tapant : + _nom_de_la_fonction_.

Tutoriel inclus

Vim inclut un tutoriel dans plusieurs langues. Ce tutoriel est accessible dès le buffer d’accueil. Il vous expliquera les raccourcis clavier pour manipuler le texte, la structure de Vim, son système de modes et de fenêtres, etc.

Manipulation du texte

Vim fournit les possibilités classiques de manipulation de texte, accompagnées de quelques plus:

  • Déplacement du curseur de texte d'un caractère, d'un mot, d'une ligne, d'une phrase, d'un paragraphe ou d'un écran, au début ou à la fin du fichier, à une ligne précisée par son numéro
  • Suppression d'un caractère, d'un mot, de la fin de la ligne ou de la phrase.
  • Inversion de deux lettres, deux mots ou deux lignes. En cas d'inversion de deux mots séparés par une ponctuation, celle-ci sera prise en compte.
  • Passer un mot en majuscule, minuscule ou le capitaliser.
  • Indenter automatiquement le code.
  • Commenter/décommenter une région.

Pour sélectionner du texte, il n'y a pas besoin de maintenir la touche Shift enfoncée. Il suffit de placer le curseur de texte au début de la zone à sélectionner, de taper v et la sélection est enclenchée. Pas besoin de maintenir la moindre touche. On peut ensuite bouger le curseur pour agrandir la zone sélectionnée, appelée Sélection dans Vim. On peut faire sauter le curseur au début ou à la fin de la Sélection avec g`< et g`>.

On peut utiliser une sélection pour limiter l'action d'une fonction de Vim, comme par exemple "rechercher et remplacer" ou "commenter le code". On peut également exécuter une commande dans un shell (bash ou autre) en lui passent le texte sélectionné avec une région. Le texte ainsi sélectionné peut, si on le souhaite, être remplacé par le résultat de la commande.

Enfin, si Vim permet une sélection classique, c'est à dire tous les caractères entre le début et la fin d'une région, il propose également d'utiliser les marqueurs de région pour "dessiner" un rectangle et ensuite de ne manipuler que les caractères se trouvant dans ce rectangle.

Exemple:

Démonstration de la sélection par rectangle

Quote-numbers

Le presse-papier de Vim à une particularité: Si on s'y prend bien, quand on y place du texte, ce qui y était précédemment n'est pas perdu. On peut toujours le récupérer. Ainsi, quand on colle le contenu du registre, c'est le dernier élément à y avoir été inséré qui apparait. À la place, on aurait pu remplacer dans le texte ce résultat par ce qui avait été précédemment déposé dans le registre.

Par exemple, si j'ai le texte "À deux mains" dans le registre et que je place dans un autre registre le texte "dimanche valent mieux qu'une". Au moment de coller le contenu du registre, j'obtiens "dimanche valent mieux qu'une". Avec un simple préfixe, j'aurais pu à la place coller dans mon texte "À deux mains". Et je peux ainsi contrôler l’historique du presse-papier. Dans cette historique, le préfixe employé est l'index du registre. D'où le nom "Quote-numbers".

Marks

Vim permet de placer des marqueurs où on le souhaite dans le texte que l'on manipule. On peut ensuite faire sauter le curseur de texte d'un marqueur à l'autre. Très pratique quand on souhaite revenir plus tard sur un bout de code.

Macro

Vim propose d'enregistrer ce que l'on tape au clavier en tant que macro. Il est possible ensuite de répéter ce qui a été enregistré autant de fois que l'on le souhaite. On peut même préciser combien de fois le répéter.

Lors de l'enregistrement d'une macro, un compteur peut être inséré dans le texte. On peut aussi donner un nom à cette macro pour l'appeler comme une fonction interactive et la sauvegarder pour qu'elle survive à la session. Il est aussi possible d'éditer une macro après enregistrement.

Fermeture manuelle et mise en évidence des délimiteurs

Vim peut manuellement fermer des parenthèses ou des guillemets. Par exemple, si je tape ", Vim écrira automatiquement la " fermante lorsque je taperai sur ".

Si je sélectionne une région et que je tape un guillemet ou une parenthèse, Vim fera des choses ce qu'il veut.

Et si je place le curseur de clavier à coté d'une parenthèse (ou d'un guillemet), alors sa parenthèse (ou guillemet) correspondante sera mise en évidence.

Ces 3 fonctionnalités sont heureusement activées par défaut.

Conclusion de la première partie

Cette partie est loin de couvrir toutes les possibilités de Vim en matière d'édition de texte. C'est un logiciel très puissant dans ce domaine (et d'autres). Le seul logiciel à arriver à un tel niveau pour l'édition du texte est Emacs. Et encore, je ne suis pas sur que tout ce que permette Vim soit possible avec Emacs.

  • # Troll à part

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

    Vim en 3 pages : https://parinux.org/files/Vim.pdf

    Adhérer à l'April, ça vous tente ?

  • # ^^

    Posté par  . Évalué à 4.

    Ces 3 fonctionnalités sont heureusement activées par défaut.

    Geany pour coder, nano pour le mode texte et vi(m) quand j’ai pas le choix !

  • # Excellent troll

    Posté par  . Évalué à 10.

    Merci pour la grosse blague. :-D
    PS: pour ceux qui n'ont pas compris, je ne me moque pas de l'éditeur, juste du fait que cet article soit un copier/coller de celui sur Emacs (je précise, on sait jamais).

    • [^] # Re: Excellent troll

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

      Polux prend un risque là ! À suivre

    • [^] # Re: Excellent troll

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

      C'est quand même un peu plus qu'un copier/coller, il a adapté le texte. Sans doute pas suffisamment pour éviter une mise en demeure mais assez pour pas perdre de procès à mon avis (mais je suis pas avocat).

      • [^] # Re: Excellent troll

        Posté par  . Évalué à 4. Dernière modification le 24 novembre 2017 à 12:22.

        Pour moi c'est clairement une oeuvre dérivée. Comme l'article original a été posté avec une licence, on peut s'amuser à aller la lire:

        https://creativecommons.org/licenses/by-sa/4.0/deed.fr

        En zieutant rapidement, le partage et l'adaption sont permis, mais en citant l'article original avec un lien et sous meme condition. Pour moi, la seule condition non remplie est celle la:

        Attribution — Vous devez créditer l'Œuvre, intégrer un lien vers la licence et indiquer si des modifications ont été effectuées à l'Oeuvre. Vous devez indiquer ces informations par tous les moyens raisonnables, sans toutefois suggérer que l'Offrant vous soutient ou soutient la façon dont vous avez utilisé son Oeuvre.

        Bref, l'auteur du journal sur vim sait quoi faire :-)

        • [^] # Re: Excellent troll

          Posté par  . Évalué à 10.

          Pour moi c'est clairement une oeuvre dérivée.

          Eh non, c'est une parodie. La parodie, le pastiche et la caricature sont des exceptions au drot d'auteur et ne sont donc pas liés par la licence de l'œuvre parodiée.

          Ça, ce sont les sources. Le mouton que tu veux est dedans.

          • [^] # Re: Excellent troll

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

            Justement, c'est ce qui rend ce journal d'au temps (ah zut, je ne sais plus à la fin) plus drôle. Une sorte de mise en abyme pour initiés (le texte très proche, il faut le regarder à la loup, comme un⋅e jume⋅au⋅lle et l'utilisation maligne de la licence). J'étais pourtant alléché par ce journal qui aurait pu être intéressant, bien que finissant certainement en troll. Mais je ne suis pas déçu :)

            Merci donc à postroutine et Pol'uX, à croire qu'ils se sont mis d'accord ;)

            « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

    • [^] # Re: Excellent troll

      Posté par  . Évalué à 6.

      il pourrait se retrouver en galère à cause de ce journal plagiat ! Mais l'auteur d'origine est sans doute un bon gars, pas un rageux prêt à tout (y compris à se couvrir de ridicule) pour faire parler de lui.

      « Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher

  • # Pourquoi nano ?

    Posté par  . Évalué à 5.

    Quelqu'un osera-t-il ?

    • [^] # Re: Pourquoi nano ?

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

      Pourquoi ed ?

      • [^] # Pourquoi PAS ?

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

        Y a-t-il un éditeur nommé PAS ?

        • [^] # Re: Pourquoi PAS ?

          Posté par  . Évalué à 2. Dernière modification le 24 novembre 2017 à 10:13.

          Chez nous on compte les points des blagues nulles. Tu as marqué ^^

      • [^] # Re: Pourquoi nano ?

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

        Tu vas rire, mais il m’est arrivé de recourir à ed dans des scripts car il permet de faire des choses qui ne sont parfois pas évidentes à faire avec sed.
        Je ne me souviens plus ce que j’avais fait avec, mais il me semble que c’était notamment pour les mouvements relatifs : trouver d’abord la chaîne A, puis trouver la chaîne B qui suit, et remplacer la ligne suivante par C…

      • [^] # Re: Pourquoi ed ?

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

        Parce que Ed y sonne…

        « IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace

    • [^] # Re: Pourquoi nano ?

      Posté par  . Évalué à 5.

      Word ?

      • [^] # Re: Pourquoi nano ?

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

        Word ?

        Rhooo ! nous sommes sur un site sérieux ici môsieur nous traitons d'éditeur mais nous n'oserions pas éditer des mauvais traitements.

        Tenez vous le pour dit 😂

        kentoc'h mervel eget bezan saotred

        • [^] # Re: Pourquoi nano ?

          Posté par  . Évalué à 10.

          Vous critiquez Word, mais c'est un outil multitache.

          Par exemple, quand je demande qu'on m’envoie par mail le résultat d'un ping, il est plus simple de m'envoyer une capture d'écran dans un fichier Word que par vim.

          Word - 1
          vim - 0

          • [^] # Re: Pourquoi nano ?

            Posté par  . Évalué à 2.

            Quoi ???

            Dans vim, il suffit juste de taper :.!ping -c3 linuxfr.org
            Puis :wq pour sauver.

            Word s'est même pas encore lancé que j'ai déjà envoyé le mail avec vim.

        • [^] # Re: Pourquoi nano ?

          Posté par  . Évalué à 2.

          nous sommes sur un site sérieux ici môsieur nous traitons d'éditeur mais nous n'oserions pas éditer des mauvais traitements.

          À m'éditer!

      • [^] # Re: Pourquoi nano ?

        Posté par  . Évalué à 10.

        Nano est un éditeur de texte, Word est un générateur de maux.

      • [^] # Re: Pourquoi nano ?

        Posté par  . Évalué à 4.

        Nan mais arrêtez, là, y'a des limites à tout quand même!

        --
        Écrit depuis Wordpad

      • [^] # Re: Pourquoi nano ?

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

        Ah non ! Edit sous FreeDOS !

        « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

  • # Respect de la license !

    Posté par  . Évalué à -1. Dernière modification le 24 novembre 2017 à 13:52.

    Je pense qu'il serait de bon ton de respecter la licence de la source avant que linuxfr ne se prenne encore un procès pour non respect.
    C'est pas comme si certains n'en avaient pas déjà intenté pour moins que ça..

    Edit : Pas vu le thread plus haut. Moinsseurs, à vos clicks !

  • # ZE COMMANDE QUI TUE

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

    Pas d'accord la commande qui tue sous vim c'est '.' (Redo je crois)
    qui permet de refaire la dernière commande

    Exemple on recherche la chaine 'var1' avec /var1
    et je veux changer le var en VARIABLE donc cwVARIABLE
    après il suffit de parcourir le code avec n
    et . si je veux changer sans être obligé var1 en VARIABLE1

    question l'équivalent existe avec emacs ?

    • [^] # Re: ZE COMMANDE QUI TUE

      Posté par  . Évalué à 3.

      C-x z la premiere fois, et z ensuite.

    • [^] # Re: ZE COMMANDE QUI TUE

      Posté par  . Évalué à 3.

      Pas d'accord la commande qui tue sous vim c'est '.' (Redo je crois)

      J'aurais dit : "Replay"
      C-r pour "Redo"

      • [^] # Re: ZE COMMANDE QUI TUE

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

        pkill vim

        « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

        • [^] # Re: ZE COMMANDE QUI TUE

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

          Pourquoi tant de haine … on ne fait troller échanger une fois de plus sur vim vs emacs
          en plus le point godwin est pas encore atteint …

          • [^] # Re: ZE COMMANDE QUI TUE

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

            Oh là, ce n'est pas de la haine, j'utilise VIM (peut-être parce que je ne connais pas Emacs). Juste de l'humour, noir pour le coup ;)

            « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

            • [^] # Re: ZE COMMANDE QUI TUE

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

              Personne ne pense au pôvre processus qui reçoit avec une brutalité sans nom un signal 15 ou 9

              Même si sous Linux, nos processus sont moins maltraités que sous Windows, en attendant développeur admin sys … pensez aux petits processus qui vous rendent bien des services.

  • # Apprendre vi avant Vim

    Posté par  . Évalué à 7.

    Déjà vi de base est bien puissant quand on sait s’en servir.
    Cf. cette réponse connue sur stackoverflow: Your problem with Vim is that you don't grok vi.

Suivre le flux des commentaires

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