Macro de vim (pour un code LaTeX avec la suite vim-latex)

Bonjour,
ma question attend 2 types de réponse, un seul me donnerait évidemment satisfaction.

Le premier type serait de trouver les références ou un tutoriel qui me permettrait de trouver par moi-même.

Le deuxième, une solution efficace.

Le problème:

J’ai créé une macro de vim qui a pour objectif de formater une commande \footnote dans un fichier .tex (LaTeX, XeLaTeX).

Cette macro ( FTN) génère le texte suivant, tappée à la fin du mot test:

  Un test%
  \footnote{%
    <++>
  }<++>
  <++>

L’appel de note (la commande \footnote) doit être au début de la ligne suivante, un signe % collé au mot de l’appel (ici: test).
La commande \footnote{ se termine aussi par un signe % et un retour à la ligne vers un «place-holding» pour placer le texte de la note
Un retour à la ligne pour fermer la note, suivie sans espace d’un autre «place-holding» pour y mettre un éventuel signe de ponctuation,
Puis un retour à la ligne pour reprendre le fil du texte pincipal.

Ma macro réalise incomplètement ce travail, et me pose 2 problèmes:

(1) Le premier est un BUG que je ne parviens pas à éviter ou corriger: lorsque la ligne d’où est appelée la note est indentée, la commande \footnote est également indentée.

Ma macro commence par un réglage noai (no autoindent), inefficace.
J’ai d’ailleurs tester sur une instance de vim sans autoindent, mais l’indentation s’impose toujours (même hors de la macro).

Je pense mettre dans la macro la correction que je suis contraint de faire à la main, en utilisant la suite de commande <ESC>V<.
qui sélectionne la ligne (V) et supprime l’indentation avec <, répétée autant que nécessaire par la commande «.»
C’est cette commande que je ne sais pas introduire dans ma macro.
[EDIT] plus précisément la chaine:

\footnote{%<ESC>V<<CR>i<++><CR>}<++><CR><++>

fait le travail pour une indentation simple, mais pour plusieurs niveaux (V<<< ou V<… , par exemple) ça donne des résultats inattendus.

(2) Le deuxième problème est plus complexe, mais moins pénalisant dans ma pratique.

Comment, après avoir introduit 3 «place-holding», renvoyer le curseur sur la première ligne?
Par exemple enregistrer le numéro de la ligne d’appel dans une

Voici ma macro:
:call IMAP('FTN', "\<ESC>:set nosi\<CR>:set noai\<CR>a%\<CR>\\footnote{%\<NL><++>\<CR>}<++>\<CR><++>\<ESC>:set si\>CR>:set ai\<CR>", 'tex')

[EDIT] version un peu plus avancée:
Avec le marquage de la première ligne (mm) efficace, mais son appel (`m) sans effet, et la correction efficace pour une indentation d’un seul niveau (V<)

"\<ESC>mm\<ESC>:set nosi\<CR>:set noai\<CR>a%\<CR>\\footnote{%\<ESC>V<\<CR>i<++>\<CR>}<++>\<CR><++>\<ESC>:set si\>CR>:set ai\<CR>m"`

Qui produit:

  Un test%
\footnote{%
<++>
}<++>
<++>

Le curseur est encore sur la dernière ligne <++>, alors que la commande `m fonctionne hors de la macro.

Merci pour avoir lu jusqu’ici :wink:

PS
Si je me souviens bien, la commande IMAP est une commande de mappage de la suite vim-latex.
La macro proprement dite est la 2e partie entre « guillemets ».

J’ai résolu la 2e question: renvoyer le curseur sur la ligne d’appel.
(ainsi la commande Ctrl-j place bien le curseur sur le 1er place-holding)
solution imparfaite, mais utile.

Quant à renvoyer la ligne \footnote{% sur la 1ere colonne, je reste en panne, sauf si l’indentation est du 1er niveau. voici ce que ça donne:

:call IMAP(‹ FTN ›, « <ESC>mm<ESC>:set nosi<CR>:set noai<CR>a%<CR>\footnote{%<ESC>V<<CR>i<++><CR>}<++><CR><++><ESC>`m<ESC>:set si>CR>:set ai<CR> », ‹ tex ›)

qui affiche:

Un test%
\footnote{%
<++>
}<++>
<++>

avec le curseur sur la ligne « Un test »

La solution: (avec un maximum de 4 indentations!)

:call IMAP('FTN', "\<ESC>mma%\<CR>\\footnote{%\<ESC>V<V<V<V<\<CR>i<++>\<CR>}
<++>\<CR><++>\<ESC>`m", 'tex')

Qui imprime:

1       Un test%
2   \footnote{%
3    []
4    }<++>
5    <++>

et place le curseur au bon endroit: []

Pourquoi cette macrocommande?

Facilite une présentation des notes de bas de page qui rend le source *tex plus facile à lire en séparant facilement les notes du texte principal.
1 l’appel du texte (taper FTN juste à la fin du mot, ici test)
2 la commande \footnote{% seule sur une ligne, facilite le repérage des notes
3 Le curseur en mode insertion, il suffit d’insérer directement le contenu de la note
4 Fermeture de la note sur une ligne séparée, vide, très repèrable pour marquer la fin de la note.
Cette ligne est limitée à l’accolade fermante suivie seulement d’ une éventuelle ponctuation, qui (en LaTeX) doit suivre le mot sans espace (le compilateur sait quel espace (insécable) mettre dans chaque cas, différent en français pour un . ou une , et pour un : ou un; , par exemple)
La commande Ctrl-J envoi directement le curseur au premier place-holder ( <++>), en mode insertion, pour y écrire l’éventuelle ponctuation,
5 Retour par une deuxième frappe Ctrl-J au début de la ligne qui reprend le fil du texte principal, toujours en mode insertion.