J'utilise vim (avec les greffons latex-suite et syntastic), et souhaite ajouter des macros vim personnelles de façon permanente. texlive est installé ainsi: /usr/local/texlive/texmf-local

je ne trouve pas d'information sur le meilleur endroit où placer ces fichiers de macros Vim.

Posée 13 Jul '21, 16:00

joseph-tux's gravatar image

joseph-tux
647●4●55●93
Taux d'acceptation : 7%

Modifiée 27 Aoû '21, 12:29

Ces macros vim sont-elles des macros dédiées à LaTeX ?

(14 Jul '21, 17:29) Pathe ♦♦ Pathe's gravatar image

Oui, je souhaite créer une commande \Footnote qui «formate» l'écriture d'une \footnote ainsi:

%

\footnote{%

<++>%

}

et donc une macro chargée avec un fichier *.tex

(14 Jul '21, 20:00) joseph-tux joseph-tux's gravatar image
1

Comme il s’agit d’une macro LaTeX indépendante de l’éditeur, je déconseille l’utilisation de l’arborescence .vim/ Place la macro dans celle de texlive, c’est à dire $TEXMFHOME/tex/latex/ (sur un unix, echo $TEXMFHOME devrait te donner la localisation, en général il s’agit de ~/texmf/

(25 Aoû '21, 09:29) sztruks sztruks's gravatar image

@sztruks il s'agit bien de créer une macro vim: écrire une commande \footnote{Texte} en la formattant ainsi pour faciliter la lecture:

1 un « % » suivi d'une nouvelle ligne

2 la commande « \footnote{% » (suivi d'un % et d'une nouvelle ligne)

3 le « place-holder <++> % » pour le texte de la note (avec un « % » en fin de la dernière ligne et une nouvelle ligne

4 « }% » puis une nouvelle ligne

Cette macro serait sur le modèle des macros de la suite vim-latex, soit en mode insertion (comme: SSE qui écrit \section{<++>}, soit en mode sélection (le contenu de la note, comme « `em «)

(27 Aoû '21, 12:25) joseph-tux joseph-tux's gravatar image

Je ne connais pas les macros vim-latex --- et j’interprête peut-être mal la question --- mais j’utilise les abbréviations pour obtenir ce genre de résultat (sans place holder mais avec le curseur au bon endroit une fois l’abbréviation tapée): Voici un exemple adapté de mon fichier de config tex.vim. En mode insertion, fn<espace> donnera le résultat demandé --- je ne le mets pas en page comme code, car les signes < sont alors interprêtés, à l’encontre de ce que j’ai pu lire dans l’aide:

iabbrev <buffer> fn %<CR>footnote{%<CR>}%<Esc>O

Un (trop?) rapide coup d’œil dans le manuel de vim-latex suggère que l’extension utilise lui aussi le fichier $VIM/ftplugin/tex.vim. Pour ce qui est du contenu de la note, je ne pratique pas vim-latex donc je ne vois pas tout à fait ce qui est demandé. Pour sélectionner le contenu d’un environnement, je fais yi{, mais il y a le problème du % placé après la parenthèse et qui serait sélectionné.

Lien permanent

Publiée 28 Aoû '21, 16:36

sztruks's gravatar image

sztruks
398●1●4●13
Taux d'acceptation : 21%

Modifiée 28 Aoû '21, 17:32

@Sztruks merci pour cet éclairage utile.

La macro suivante placée dans ce fichier: ~/.vim/tex.vim

fonctionne:

imap FTN footnote{%<ESC>o%<ESC>o}<ESC>o<++><ESC>2kI

semble efficace. Elle utilise la syntaxe standard de vim et non celle de la suite vim-latex (ce qui impose le 2kI final, au lieu d'un «placeholder» sur le 2e ligne)

En revanche je n'ai pas encore trouvé comment on intègre la sélection visuelle comme contenu de la note avec vmap. Cette commande permettrait de transformer le passage sélectionné en note.

(29 Aoû '21, 10:40) joseph-tux joseph-tux's gravatar image

Dans un esprit vimgolf, je conseille tout de même <CR> — tape entrée en mode insertion — plutôt qu’<ESC>O qui fait la même chose, mais en deux commandes

(29 Aoû '21, 11:26) sztruks sztruks's gravatar image
1

encore merci Sztruks. Je devrais bien me (re)mettre à cet apprentissage des mappages.

C'est mieux qu'esthétique: ça corrige un bug, en cas d'insertion d'une note au milieu d'un texte existant (avec <ESC>o», la suite du texte était laissée derrière le «%», contrairement à <CR>)

Reste à supprimer l'indentation automatique (à quoi sert de mettre «%» à la fin du mot, si c'est pour remettre une espace avant «\footnote{» ?)

(29 Aoû '21, 11:30) joseph-tux joseph-tux's gravatar image

Pour corriger ce problème d’espace, j’ai affecté l’insertion de la note à la touche tant en mode insertion que normal. Voici ce qu’il y a dans mon tex.vim POUR UNE UTILISATION BÉPO

imap <buffer> <F4> % <Esc>Do<Esc>POfootnote{}<Esc>bd0f{a

nmap a% <Esc>Do<Esc>POfootnote{}<Esc>bd0f{a

En azerty, il faut remplacer les "D" par "I", "d" par "i" (je ne garantis pas ne pas avoir touché au b par rapport au défaut)

Ceci dit, l’indentation automatique est peut-être du ressort de vim-latex…

(29 Aoû '21, 20:03) sztruks sztruks's gravatar image

ma solution actuelle pour le mode insertion: imap FTN %CR><ESC>V<.....I\footnote{%<CR>%<CR>}<CR><++>2kI

l'esprit vimgolf n'y est pas mais ça fait le travail.

Pour le mode sélection visuelle, je cherche.

(01 Sep '21, 17:43) joseph-tux joseph-tux's gravatar image

vmap ferait-il l’affaire?

(05 Sep '21, 11:02) sztruks sztruks's gravatar image
Affichage de 5 parmi 6 Afficher 1 commentaire(s) en plus

Je rejoins l’avis de @sztruks d’utiliser les abréviations (pour la petite histoire, :ab/:una est l’une des forces du Vi historique, que Vim a étendu avec : :ab/:una/:norea/:abc, :ia/:iuna/:inorea/:cabc, :ca/:cuna/:cnorea/:cabc) et les réassignations (le Vi historique a aussi :map que Vim étend : :map/:no/:unm/:mapc, :nm/:nn/:nun/:nmapc, :vm/:vn/:vu/:vmapc, :xm/:xn/:xu/:xmapc, :smap/:snor/:sunm/:smapc, :om/:ono/:ou/:omapc, :im/:ino/:iu/:imapc, :lm/:ln/:lu/:lmapc, :cm/:cno/:tu/:cmapc, :tma/:tno/:tunma/:tmapc, avec la possibilité par exemple de restreinte au tampon et autres). Avec la définition de commandes personnelles (de Vim), c’est vraiment très très riche en possibilités ⤇ :h map.txt (je n‘en ai pas fait le tour après des années d’usage).

Le principal problème qui apparait, dans cette pratique, est les abréviations et assignations dans la configuration globale ne font sens que si elles sont un temps soit peu génériques à l’usage. Pendant longtemps, je me suis retrouvé à enrober certains truc dans des groupes d’auto-commandes… (exemple simple …mais on peut faire bien complexe —je suis passé par là) ⤇ :h autocmd.txt
Puis j’ai eu mon épiphanie : il est possible de regrouper certains réglages par type de fichier, et pour LaTeX et la famille il faut mettre cela dans ~/.vim/ftplugin/tex.vim (chemin pour les systèmes de type Unix et dérivés, et attention pas $VIMRUNTIME/ftplugin/tex.vim qui peut être écrasé par des mises à jour) dont le contenu ne s’appliquera alors qu’à nos .tex/.ltx/.sty/.cls/etc. C’est parfois discuté sur SO et bien résumé par VimTricks par exemple. ⤇ :h filetype.txt

Comme tu utilises LaTeX-Suite, sa documentation indique que la surcharge de ses macros se fait dans ~/.vim/after/ftplugin/ (ce qui est logique car ~/.vim/after/ est conçu pour surcharger les trucs non-perso et donc sur lesquels on n’a pas entièrement la main —au moins par rapport aux mises à jour…) et que leurs macros s’appuient sur leur super fonction IMAP(lhs, rhs, ft [, phs, phe]) (je découvre à l’instant et ça a vraiment l’air bien fichu : cerise sur le gâteau, ça gère les place holders.)

Lien permanent

Publiée 07 Oct, 23:42

Gil%20Cot's gravatar image

Gil Cot
31●4
Taux d'acceptation : 0%

1

J'avais oublié cette ancienne discussion.

~/.vim/ftplugin/tex.vim est effectivement la solution recommandée pour les macros de vim destinées à un type de fichier donné, comme .tex

Et la suite latex-vim propose effectivement IMAP qui permet de taper sans limite minimale de vitesse (cf ma macro «ftn», ici: https://texnique.fr/osqa/questions/13495/macrocommande-vim-pour-editer-une-note-de-bas-de-page )

(09 Oct, 20:15) joseph-tux joseph-tux's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.