J'aimerais proposer une commande de substitution VIM pour transformer les règles CSS multiligne, comme celle-ci:
#main {padding:0;margin:10px auto;}
7 Réponses :
Essayez quelque chose comme ceci:
:%s/{\n/{/g
:%s/;\n/;/g
:%s/{\s+/{/g
:%s/;\s+/;/g
Si vous êtes au début ou à la fin de la règle, v% j code> le rejoindre en une seule ligne: p>
v code> pour entrer en mode visuel li>
% code> pour correspondre à l'autre attelle, sélectionner la règle entière li>
j code> pour rejoindre les lignes li>
ul>
Ce n'est pas la VI i> Way, c'est la Vim i> Way
Merci, c'est vraiment cool. Maintenant, je comprends un peu mieux le mode visuel.
Eh bien, Soulmerge, je voulais d'abord dire Vim CODE> WAY, mais alors il est i> A I> A VI code> même si cette commande n'est pas compatible avec simple VI CODE> (Je ne suis même pas sûr que ce n'est pas).
Ce n'est pas compatible avec la nature VI code>. Mais la question est étiquetée comme vim code> et je suppose que la grande majorité des personnes utilisent normalement vim code>, la réponse doit donc être utile.
Cela ne résout que un bloc à la fois, cependant. Utilisation:% s corrigerait l'ensemble du fichier.
qc, vrai, j'ai échoué à trouver une plaine VI nulle part à vérifier ce qui ne fonctionnera pas exactement là-bas. ;-)
VI n'a pas le mode visuel de Vim (comme indiqué dans : Aide Visual CODE>). Ce que VI appelé mode visuel n'était qu'un autre nom pour le mode normal.
Allez à la première ligne du fichier et utilisez la commande gqg code> pour exécuter l'ensemble du fichier via le formateur. En supposant que les courses de lignes non impudisseuses devraient être effondrées dans l'ensemble du fichier. P>
Voici une doublure: l'inverse (convertir la version à une ligne en multiligne) peut également être Fait comme une doublure: p> \ _. code> correspond à n'importe quel caractère, y compris une nouvelle ligne et \ {-} code> est la version non gourmande de * code>, donc {\ _. \ {\ _. \ {-}} code> correspond à tout entre une paire correspondante d'accolades bouclées, inclus. P> < p> Le \ = = code> vous permet de remplacer le résultat d'une expression VIM, que nous utilisons ici pour supprimer toutes les nouvelles lignes '\ n' code> du texte correspondant (dans submatch (0) code>) à l'aide de la fonction substitute () code>. p>
Merci beaucoup. C'est génial. Inversement, comment convertiriez-vous un groupe de règles CSS d'une ligne dans le format de ligne multiple?
Vous n'avez pas besoin de jouer avec \ = pour faire l'opération inverse. Un simple:% s / [{;] / & \ r / g | gg = g est plus que suffisant.
Si vous souhaitez modifier le fichier, optez pour Solution de Rampion .
Si vous ne voulez pas (ou que vous ne pouvez pas) changer le fichier, vous pouvez lire avec un pliage personnalisé car il permet de choisir quoi et comment afficher le texte plié. Par exemple: p> Je laisse le tri des champs comme exercice. Astuce: Obtenez toutes les lignes entre V: pliStart + 1 et V: Voldend dans une liste, trier la liste, créer la chaîne, et c'est tout. EM> P> P> P> P> P>
Je ne répondrai pas directement à la question, mais je vous suggère de reconsidérer vos besoins. Je pense que votre "mauvais" exemple est en fait le meilleur. Il est plus lisible, plus facile à modifier et à la raison. Une bonne indentation est très importante non seulement lorsqu'il s'agit de programmer des langages, mais également dans CSS et HTML. P>
Vous mentionnez que les règles CSS sont "prenant trop de lignes". Si vous êtes inquiet de la taille du fichier, vous devez envisager d'utiliser des minificateurs CSS et JS tels que yui compresseur au lieu de faire le code moins lisible. p>
C'est un débat religieux. Certains devs préfèrent les règles CSS dans une doublure car il est plus rapide / plus facile à numériser et à rechercher des sélecteurs. D'autres préfèrent la multi-lignes, car il est plus facile de se voir ce qui a changé lorsque vous diffusez.
Un moyen pratique de faire cette transformation consiste à exécuter ce qui suit Commande courte:
:g/{/,/}/j
+1 Merci pour la question. J'ai beaucoup appris de la réponse de Rampion!
S'il vous plaît, regardez la commande que je propose dans ma réponse ci-dessous . Les commentaires sur la réponse sont les bienvenus!