changer la signification de «paragraphe» pour l'entrée TeX?

8

J'écris du code LaTeX qui a beaucoup de sections comme ça

\begin{definition}
blah blah blah ...
...
\end{definition}    

Dans un texte normal, j'aime beaucoup gq]tout récapituler. À l'intérieur d'une section de bloc comme celle ci-dessus, qui encapsule également la commande de fin, que je préfère garder sur une ligne distincte.

Existe-t-il un moyen de dire à Vim qu'une ligne commençant \endtermine un paragraphe? Ou existe-t-il une autre commande de formatage que je peux utiliser (je l'ai <F8>mappée gq], cela ne me dérange pas de la redéfinir?

Bristol
la source

Réponses:

6

Une façon de le faire utilise l' objet texte personnalisé ie(à l' intérieur de l'environnement ), disponible à plusieurs endroits: par exemple dans le plugin vimtex , ou avec vim-textobj-latex (et il y en a d'autres). Avec cette fonctionnalité, la commande de reconditionnement devient:

gqie

ou

gwie

(pour conserver la position du curseur).

Si vous souhaitez uniquement reformater le texte de la position actuelle du texte (je vois que c'est votre cas d'utilisation) à la fin du paragraphe, vous pouvez probablement vous contenter de la construction suivante (aucun plugin requis):

gq/\(^\s*$\|\\end\)

Cela formatera soit une ligne vide, soit une ligne contenant le \endmot - clé, selon la première éventualité. Vous pouvez donc utiliser ce mappage:

:nnoremap <F8> gq/\(\\end\\|^\s*$\)<CR>
VanLaser
la source
gqiefait ce que je veux quand à l'intérieur d'un bloc begin ... end, dans le corps du texte principal, il essaie de tout envelopper jusqu'à \ end {document} - est-il possible de lui dire de s'arrêter à la ligne vide suivante?
Bristol
Eh bien, en dehors d'un environnement - peut-être la valeur par défaut gqap?
VanLaser
Voir la réponse mise à jour, pour un F8remappage possible .
VanLaser
Je présume que j'ai une part de faute de frappe que le suivant ne fonctionne pas: :map <F8> gq/\(^$\|^[%]$\|^\\end\)<CR>. Quelqu'un peut-il me dire ce que je fais mal? J'essaie de faire correspondre une ligne complètement vide ( ^$), une ligne avec seulement un caractère de commentaire% ( ^[%]$) ou une ligne commençant \end( ^\\end).
Bristol
Je pense que vous devez utiliser \\|comme séparateur au lieu de \|mapper.
VanLaser