我想在vimrc中创建一个将rem转换为px和px转换为rem文件的快捷方式。
""""for converting px to rem""""
nnoremap <Leader>rem :%s; \(\d*\)px;\= string(submatch(1) / 16.0) . "rem";
""""for converting rem to px"""
nnoremap <Leader>px :%s; \(\d*\)rem;\= string(submatch(1) * 16.0) . "px";
第一个有效但第二个无效。当rem具有小数时,它不会转换为px。
如何改进此代码?
======= 在KoRoN的帮助下,以下是我的最终解决方案
""""for converting px to rem""""
nnoremap <Leader>rem :%s;\<\(\d*\)px;\= float2nr(submatch(1) / 16.0) . "rem";
""""for converting rem to px"""
nnoremap <Leader>px :%s;\<\(\d\+\%(\.\d\+\)\?\)rem;\= float2nr(str2float(submatch(1)) * 16.0) . "px";
答案 0 :(得分:2)
尝试使用\(\d\+\%(\.\d\+\)\?\)
代替\(\d*\)
进行十进制(浮动)。
这种模式并不完美,但涵盖了大多数情况。
并且您应该使用str2float
将字符串转换为float。
因此,您的第二张地图应该是这样的:
nnoremap <Leader>px :%s; \(\d\+\%(\.\d\+\)\?\)rem;\= string(str2float(submatch(1)) * 16.0) . "px";