Je regardais juste ce post qui décrit comment envelopper des mots entiers dans vim. La solution acceptée était la suivante:
:set formatoptions=l
:set lbr
Ce qui prend ce texte (les onglets sont affichés comme \ t):
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will wr|ap here
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Cela accomplit un comportement comme celui-ci (les onglets sont affichés comme \ t):
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will |
|wrap here |
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Je voudrais cependant redéfinir cette fonction. Je voudrais que la ligne enveloppée ait le même nombre d'onglets devant elle que la ligne ci-dessus a plus un. C'est à dire:
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will |
|\t\t\twrap here |
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Des idées?
Réponses:
Le patch breakindent a ce que vous recherchez. Je l'ai appliqué avec succès en utilisant les instructions trouvées dans ce fil:
Patch Vim avec le patch breakindent sur OS X avec Homebrew
Plus précisément, la formule Homebrew d'Echristopherson.
Je sais que ce fil est ancien, mais il est populaire sur Google et je l'ai rencontré plusieurs fois en essayant de trouver une solution.
EDIT: Ce patch est maintenant inclus avec vim en tant que patch 7.4.338. Voir: https://retracile.net/blog/2014/07/18/18.00
Sur Yosemite (Mac OS X), j'ai utilisé la commande de snowbound avec hombrew:
la source
brew install macvim --with-features=huge --override-system-vim --HEAD
Cela n'a pas fonctionné lorsque la question a été posée à l'origine, mais à partir du 25 juin 2014, cela fonctionnera. (En supposant que vous mettez à jour votre vim vers une version plus récente que cette date)
Ajoutez à votre .vimrc:
Et c'est tout!
-
Certaines personnes (moi y compris) partagent un seul fichier .vimrc sur plusieurs ordinateurs. Dans ce cas, il est important que cette ligne soit robuste (pour éviter les messages d'erreur ennuyeux). C'est un peu mieux:
De cette façon, si vous utilisez une version antérieure de vim, vous n'obtenez pas de message d'erreur.
la source
if has("patch-7.4.354")
Le mieux que vous obtiendrez est l'
showbreak
option qui mettra une chaîne fixe devant chaque ligne enveloppée (j'utiliseset showbreak=...
).la source
:help 'showbreak'
, non, vous ne pouvez pas -showbreak
n'est qu'une chaîne.Je suis d'accord avec la réponse qui dit que le «showbreak» est la meilleure option. Showbreak ne vous permet généralement pas de mettre des caractères non imprimables (par exemple, des espaces ou des tabulations) dans la chaîne showbreak, donc comme il est généralement utilisé, il vous donnera juste un indicateur le long de la marge gauche, c'est-à-dire pas de véritable retrait. Ce n'est pas génial, car l'objectif principal d'OP, je pense, est de donner aux lignes enveloppées un retrait pour les empêcher d'encombrer la zone de marge gauche et de ressembler à des lignes qui leur sont propres.
Donc, une façon d'ajouter un (laid) retrait en utilisant showbreak est simplement d'utiliser beaucoup de caractères, .eg, ": set showbreak => --------------->". Cela donne quelque chose qui ressemble à ceci:
Une meilleure alternative pourrait être d'utiliser des caractères d'espacement insécables (en supposant que votre instance de Vim soit activée par unicode), chacun d'entre eux pouvant être entré dans la chaîne showbreak à l'aide de la séquence de touches ctrl-v, 160. De cette façon, vous pouvez entrer une chaîne showbreak qui est vide sur le côté gauche et qui semble être un véritable retrait. Par exemple, ": set showbreak =........... >>" où chaque '.' dans la commande est en fait un caractère d'espace insécable entré en appuyant sur ctrl-V, 160. De cette façon, vous vous retrouvez avec une enveloppe qui est bien en retrait, comme ceci:
Vous n'avez toujours pas la possibilité de faire varier le niveau de retrait en fonction du retrait de la ligne précédente, mais au moins vous obtenez un retrait net des lignes enveloppées sans beaucoup d'encombrement visuel le long de la marge gauche de la fenêtre. Il pourrait encore y avoir de la confusion si le retrait d'une ligne encapsulée est inférieur à celui du début d'une ligne réelle, mais cela pourrait peut-être être évité en rendant le "retrait" du showbreak assez grand (c'est-à-dire plus grand que tout retrait couramment trouvé dans votre code ) mais suffisamment petit pour offrir suffisamment d'espace pour un habillage lisible du texte. Pour de nombreuses utilisations, je pense qu'un retrait showbreak de 40 ou 50 espaces ferait assez bien cela.
la source
:set showbreak=\ \ \ \
. Cependant, cela ne fonctionne toujours pas pour les onglets.