Vim:将CSS格式从单行改为多行

ycggw6v2  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(420)

我有一些css代码在这个格式:

a { color: #333; background-color: #fff; } 
a:visited { color: #aaa; background-color: #555; }

我想以这种格式得到它:

a { 
    color: #333; 
    background-color: #fff; 
} 
a:visited {
    color: #aaa; 
    background-color: #555; 
}

有简单的方法吗?我知道我可以写一个宏来做这个,但是我希望有更好/更简单的解决方案。理想的情况下,我希望能够选择行并做一些类似gq的事情。

qxsslcnc

qxsslcnc1#

如果文件类型已设置为CSS,则可以尝试:

:%s/[{;}]/&\r/g|norm! =gg

至少它对你的例子有效:

0x6upsns

0x6upsns2#

您可以使用cssbeautify

:%! css-beautify --file -
kfgdxczn

kfgdxczn3#

不是一个确定的答案,但可能会帮助你在正确的方向。我使用了很多vim文件来检测我的代码(不同的语言),我发现我可以用插件复制我的代码,并在运行中将其格式化(例如,PEP-8在做python等)。希望这将对你有一些用处:http://www.vim.org/scripts/script.php?script_id=2981

TotalOpinion-(抱歉!)-祝贺您选择了所有编辑之王!

clj7thdc

clj7thdc4#

我已经研究这个问题有一段时间了。但是在我的例子中,我想逐行重新格式化单行css文件,受到肯特的启发,我最终得到了这个:
1.使用可视模式选择要重新格式化的一行或几行
1.类型'<,'>s/[{;}]/&\r/g|norm! v'<=
处理完重新格式化的css块后,在可视模式下只选择一个css块并按J(大写的j),它将变成一行代码。
PS.抱歉我的英语不好

ee7vknir

ee7vknir5#

肯特的回复不能很好地处理更复杂的文件,如this:(W3C参考CSS)
我用另一种方式:
1.将大行拆分为每行一条规则:

%s/\(.\{-}{.\{-}}\)/\r\1/gc

1.重新格式化:第一步。对于每个规则,将所有属性放在一行中:

%s/\(.\{-}{\)\(.\{-}\)\(}\)/\1\r\t\2\r\3\r/gc

1.重新格式化:第二步。将属性拆分为每行一个:

%s/;/;\r\t/gc

也许你可以在更少的步骤,但这工程罚款。

相关问题