J'utilise gvim pour rédiger des e-mails et tw=72
pour rompre les longues lignes. Maintenant, je modifie également les en-têtes de courrier de base dans le même document, par exemple, j'ajoute des destinataires à mon courrier. Maintenant, tw=72
il se casse également à chaque fois après 72 caractères.
Comment puis-je définir tw=0
sur les 4 premières lignes (c'est la partie d'en-tête) et tw=72
pour le reste du document?
Mes options de format ressemblent à ceci, si cela est pertinent:
set fo+=tcqn
formatting
mxmehl
la source
la source
textwidth
est appliqué à l'ensemble du tampon.line('.') < 5
, ou en vérifiant si la ligne commence par un en- tête de courrier électronique (par exempleFrom:
,To:
etc.).Réponses:
Grâce au commentaire de @ Carpetsmoker sur ma question, j'ai pu résoudre ce problème exactement comme je le voulais.
Avec la fonction suivante dans .vimrc (ou dans mon cas dans un fichier spécial qu'il n'a chargé que lors de la modification de mes e-mails), tw est défini sur 500 si le numéro de ligne est inférieur à 5, sinon c'est 72. Avec
au CursorMovedI
cela est vérifié à chaque fois que le le curseur se déplace.Si quelqu'un prévoit de l'implémenter, pensez à remplacer le caractère générique
au CursorMovedI *
par un chemin fixe ou un suffixe de fichier.la source
Une alternative plus robuste à la réponse de mxmehl.
Si vous utilisez
filetype=mail
Vim mettra en évidence les en-têtes pour vous:Nous pouvons utiliser les informations de syntaxe pour déterminer si une ligne est un en-tête et définir la largeur de texte en conséquence.
Le nom de la syntaxe des en- têtes sont
mailHeaderKey
,mailSubject
,mailHeaderEmail
etmailHeader
. J'ai découvert cela en regardant/usr/share/vim/vim74/syntax/mail.vim
.La raison pour laquelle je préfère cette solution est qu'elle ne dépend pas de numéros de ligne arbitraires, mais qu'elle fonctionne également correctement pour les e-mails avec un en-tête et vingt en-têtes.
la source
Vous pouvez y parvenir en utilisant les autocmds. Vous pouvez les inclure dans votre vimrc, mais il est généralement préférable de les inclure dans un type de fichier, comme expliqué ici .
Ensuite, vous pouvez utiliser les éléments suivants:
Si vous préférez l'utiliser sans plugin
<buffer>
de type de fichier, vous devrez remplacer le par un modèle de fichier.L'idée est de changer le
'textwidth'
lorsque vous entrez en mode d'insertion et de le restaurer lorsque vous le quittez.Si vous naviguez généralement dans le texte en mode d'insertion (par exemple: en utilisant les touches fléchées), vous pouvez l'améliorer en fonction du lien mentionné par @Carpetsmoke: Empêcher Vim de rompre les liens au milieu de la balise lors du démarquage.
la source
Je ne pense pas que ce soit possible. Cependant, il existe quelques solutions de contournement.
Vous pouvez écrire votre en-tête et ensuite
:set tw=72
. Étant donnétw
que ne s'applique pas rétroactivement au texte déjà dans votre tampon,Vous pouvez taper le tout avec
:set tw=0
, puis une fois que vous avez terminé, passez à la ligne 4:set tw=72
,, etgqG
. Ou, si vous n'avez pas envie de le faire manuellement, vous pouvez le macro ou le mapper. Par exemple, les deux fonctionneraient:("r" pour "reformater")
Vous pouvez même configurer cela pour qu'il se produise automatiquement lorsque vous fermez vim, en supposant que vous souhaitiez le reformater lorsque vous fermez vim, et qu'il existe un type de fichier que vous utilisez uniquement pour les e-mails. Par exemple, si tous vos e-mails avaient l'
.email
extension, vous pouvez faire:Bien sûr, vous devrez changer
*.email
pour n'importe quelle extension de fichier que vous utilisez réellement. Si vous utilisez quelque chose comme.txt
, je ne le recommanderais pas , car il gâchera tous les.txt
fichiers que vous avez.la source