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

Jon*_*han 0 css regex vim

我想放弃使用pxCSS中的单位并转向使用em单位.此页面有一个转换公式,1/16*X其中16是基本字体大小(以像素为单位),X是要转换的字体大小.考虑到这一点,我尝试做类似的事情:

:%s/\(\d\+\)px/\=1\/16*submatch(1)."em"/gc 
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*ker 5

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

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

细节

  • 使用#的分隔符,而不是/使它更易于阅读和修复师
  • \v 打开非常魔法使正则表达式更具可读性(首选)
  • 必须使用,Floats因为Vim的Number格式会在分割时截断.例如1/16vs1.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(
Run Code Online (Sandbox Code Playgroud)