96 votes

Smart Envelopper dans Vim

J'ai été me demandais si Vim a la capacité de smart envelopper lignes de code, de sorte qu'il conserve la même indentation de la ligne qu'elle est mise en retrait. J'ai remarqué sur un autre éditeur de texte, telles que l'e-éditeur de texte, et constaté qu'il m'a aidé à comprendre ce que je suis à la recherche plus facile.

Par exemple, plutôt que de

<p>
    <a href="http://www.example.com">
        This is a bogus link, used to demonstrate
an example
    </a>
</p>

il semblerait que

<p>
    <a href="somelink">
        This is a bogus link, used to demonstrate
        an example
    </a>
</p>

35voto

ergosys Points 15343

Il existe un patch pour cela, mais il a été saisi par la ans et la dernière fois que j'ai vérifié ne s'applique pas proprement. Voir "Correctement tiret lignes" entrée dans l' http://groups.google.com/group/vim_dev/web/vim-patches -- je souhaite vraiment que ce serait dans la canalisation principale.

Mise à jour: le lien semble avoir bitrotted. Voici une version plus récente du patch.

Mise à jour 2: il a été fusionné en amont (comme de 7.4.345), de sorte que vous avez :set breakindent.

18voto

too much php Points 27983

Je ne pense pas que c'est possible d'avoir exactement la même indentation, mais vous pouvez toujours obtenir une meilleure vue par la définition de la 'showbreak' option.

:set showbreak=>>>

Exemple:

<p>
    <a href="http://www.example.com">
        This is a bogus link, used to demonstrate
>>>an example
    </a>
</p>

La vraie chose, c'est mieux que l'exemple de code ci-dessus, parce que Vim utilise une couleur différente pour '>>>'.

9voto

Greg Hewgill Points 356191

Je ne pense pas qu'il y est un moyen de configurer vim pour le faire, mais vous pouvez essayer de l' :set nowrap qui permettra de vim pour afficher les longues lignes par le défilement vers la droite. Cela peut être utile pour l'examen de l'ensemble de la structure d'un document, mais peut être moins pratique pour le montage.

Les options les plus proches de ce que vous êtes plutôt à la recherche d' linebreak et showbreak. Avec showbreak, vous pouvez modifier ce qui est affiché dans la marge de gauche de lignes qui sont enveloppés, mais malheureusement, il ne permet pas une variable de retrait selon le contexte actuel.

5voto

DrAl Points 29528

La seule façon que je sais de ce que vous pourriez faire serait d'utiliser un caractère de retour chariot (comme mentionné par Cfreak) et de combiner l' textwidth option avec les différents indentation options. Si votre tiret est configuré correctement (comme c'est le cas par défaut avec la syntaxe html, je crois, mais sinon, voir l' autoindent et smartindent options), vous pouvez:

:set formatoptions = tcqw
:set textwidth = 50
gggqG

Si vous avez une personnalisation de l' formatoptions , il peut être préférable de simplement faire:

:set fo += w
:set tw = 50
gggqG

Ce que cela fait:

:set fo+=w  " Add the 'w' flag to the formatoptions so 
            " that reformatting is only done when lines
            " end in spaces or are too long (so your <p>
            " isn't moved onto the same line as your <a...).
:set tw=50  " Set the textwidth up to wrap at column 50
gg          " Go to the start of the file
gq{motion}  " Reformat the lines that {motion} moves over.
G           " Motion that goes to the end of the file.

Notez que ce n'est pas le même comme un doux retour: il va envelopper les lignes dans le fichier source ainsi que sur l'écran (à moins que vous n'enregistrez pas, bien sûr!). Il y a d'autres paramètres qui peuvent être ajoutés à l' formatoptions qui s'auto-format que vous tapez: détails en :help fo-table.

Pour plus d'informations, voir:

:help 'formatoptions'
:help fo-table
:help 'textwidth'
:help gq
:help gg
:help G
:help 'autoindent'
:help 'smartindent'

3voto

Cfreak Points 10831
:set smartindent
:set autoindent

Je pense que vous avez encore d'utiliser un retour bien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X