Pages : 1
#1 Le 05/10/2016, à 16:24
- DonutMan75
[RESOLU] Macro Vim
Bonjour à tous,
j'ai décidé récemment de me lancer dans Vim pour éditer mes scripts et mes codes (après plusieurs années de gedit et de nano l'apprentissage est un peu laborieux mais très enrichissant).
Et je me suis posé la question suivante : est-il possible de définir une fonction ou une macro qui "encapsulerait" une ligne donnée dans un cadre de commentaire ?
Par exemple :
Section 1
deviendrait :
############################
# SECTION 1 #
############################
J'ai cru comprendre dans la doc que cela serait possible avec :map dans mon .vimrc mais je n'arrive pas à trouver la syntaxe exacte.....
Et puis, il faudrait calculer le nombre de caractères de la ligne (ici 9 caractères dans "Section 1") afin d'ajouter le nombre de # adéquats en haut et en bas...
Enfin bref, ça dépasse de loin mes compétences rudimentaires en vim mais je souhaitais savoir si ce genre de choses étaient envisageables
Merci d'avance,
Bonne soirée,
Donut
Dernière modification par DonutMan75 (Le 22/06/2017, à 13:58)
Hors ligne
#2 Le 08/10/2016, à 09:34
- DonutMan75
Re : [RESOLU] Macro Vim
Petit up' ?
Je ne cherche pas forcément une solution clef en main, mais j'aimerais avoir un retour de la part d'un utilisateur averti de Vim pour savoir si c'est envisageable ou pas.
Bonne journée et à bientôt !
Donut
Hors ligne
#3 Le 22/06/2017, à 13:54
- DonutMan75
Re : [RESOLU] Macro Vim
Bonjour DonutMan75,
je suis ton toi du futur et je t'apporte la solution que tu attendais fébrilement.
Alors sache que oui, jeune impétueux, il est tout à fait possible de créer une telle fonction.
Voici comment faire :
:map g k21i#^[j:s/.*/# & */^Mj21i#^[
C'est une ligne peu compliquée, je te propose de la décortiquer ensemble.
: map g [...]
Ici on définit une macro et on lui associe la touche g du clavier
Ce qui se passe dans [...] c'est la suite séquentielle de touche qui sera virtuellement effectuée chaque fois qu'on appuiera sur g
k21i#^[
k remonte d'une ligne (on sera donc au-dessus de "Section k")
21i# insère 21 caractères '#'
^[ simule l'appui sur 'ECHAP', il faut pour l'enregistrer dans la macro faire Ctrl-V puis 'ECHAP'
j on redescend d'une ligne (on est donc de nouveau sur "Section k")
:/.*/# & #/^M
Cette fois-ci on passe une commande à ex via la séquence ':'
On fait un substitution de toute la ligne par la même ligne (&) encadrée des '#'
On termine cette partie en simulant l'appuie sur 'ENTREE' (^M)
j21i#^[
Comme au tout début de la macro, on descend ici d'une ligne et on insère 21 caractères '#'
Tu constateras qu'on alterne ici les commandes purement vi (déplacement via k et j, passage en mode insertion via i) et les commandes ex qui commencent toutes par ":"
Ca marche très bien avec les lignes de la forme "Section k" sans rien ni avant ni après.
Ca marche moins bien si la ligne à commenter compte plus ou moins de caractères que "Section k"
Je ne sais pas comment calculer le nombre de caractère de la ligne via vi...
Mais il est tout à fait possible d'écrire un petit script plus évolué avec sed ou awk et de l'invoquer ensuite sur ta ligne !
:. ! ./mon_super_programme_shell
Voilà je te souhaite une bonne continuation dans tes recherches !
Bonne aprem
Donut
P.S : tes clefs étaient égarées sur l'étagère à droite quand tu entres dans ton salon. De rien.
Dernière modification par DonutMan75 (Le 22/06/2017, à 13:57)
Hors ligne
Pages : 1