在vim中检测小数

时间:2014-12-23 02:16:17

标签: vim

我想在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";

1 个答案:

答案 0 :(得分:2)

尝试使用\(\d\+\%(\.\d\+\)\?\)代替\(\d*\)进行十进制(浮动)。

这种模式并不完美,但涵盖了大多数情况。 并且您应该使用str2float将字符串转换为float。

因此,您的第二张地图应该是这样的:

nnoremap <Leader>px :%s; \(\d\+\%(\.\d\+\)\?\)rem;\= string(str2float(submatch(1)) * 16.0) . "px";