如何在vim中以编程方式将px单位转换为em单位?

时间:2014-10-15 15:39:50

标签: css regex vim

我希望不再使用我的CSS中的px单元,而是转向使用em单元。 This page有一个转换公式1/16*X其中16是基本字体大小(以像素为单位),X是要转换的字体大小。考虑到这一点,我尝试了类似的事情:

:%s/\(\d\+\)px/\=1\/16*submatch(1)."em"/gc 

但它没有按预期工作。这是我第一次在vim替换中使用表达式,所以我有点迷失。

3 个答案:

答案 0 :(得分:5)

我已将您的替换更改为以下内容:

:%s#\v(\d+)px#\=printf("%0.3fem", 1.0/16*submatch(1))#gc

详细

  • 使用#代替分隔符/,以便于阅读和修复分部
  • \v打开非常魔法让正则表达式更具可读性(首选)
  • 必须使用Floats,因为Vim的Number格式会在分割时截断。例如1/16 vs 1.0/16
  • Floats并且串联不混合,因此请使用printf将字符串放在一起
  • 使用格式%0.3f确保小数点后的前导零和3位数

有关详细信息,请参阅:

:h :s
:h sub-replace-expression
:h submatch(
:h /\v
:h Float
:h Number
:h E806
:h printf(

答案 1 :(得分:2)

使用上面的建议,我继续创建了一个Vim插件,使其更易于使用!它就像使用命令

一样容易
:Em

:Px

https://github.com/chiedojohn/vim-px-to-em

答案 2 :(得分:0)

:h sub-replace-special

下描述了您想要的内容

阅读完毕后,您基本上需要将替换部件调整为

:%s/\(\d\+\)px/\=1\/\=16*submatch(1)."em"/gc