我在我的.vimrc中设置了一个函数(特别是使用MacVim,但这对于vim来说应该是通用的)来在我的状态行中显示文件大小(以字节,千字节和兆字节为单位)。虽然该功能非常完美无误,但却给了我意想不到的输出!事后看来,它确实产生了它应该的输出,但不是我想要的输出。
这里的功能是:
" I modified the FileSize() function shown here to suit my own preferences:
" http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that-own.htm
function! StatuslineFileSize()
let bytes = getfsize(expand("%:p"))
if bytes < 1024
return bytes . "B"
elseif (bytes >= 1024) && (bytes < 10240)
return string(bytes / 1024.0) . "K"
elseif (bytes >= 10240) && (bytes < 1048576)
return string(bytes / 1024) . "K"
elseif (bytes >= 1048576) && (bytes < 10485760)
return string(bytes / 1048576.0) . "M"
elseif bytes >= 10485760
return string(bytes / 1048576) . "M"
endif
endfunction
以下是它的基本工作方式:
步骤2和4产生的输出是小数,六(6)精度位置。我想要的输出应该是小数,只有一个(1)精度位置。
我已经搜索了round()
和trunc()
函数的帮助文档,但它们只会将浮点数舍入并截断到最接近的整数值,这不是我想要的发生了。我还在Google和StackOverflow上搜索了解决方案,但我发现的大多数内容都涉及修改编辑缓冲区中的文本或完全不相关的问题,例如Java中的舍入浮点数(!!!)
我最好寻找能够做到这一点的vim内置函数,la round({expr},{prec})
或trunc({expr},{prec})
,但如果用户定义的函数可以提供足够优雅的解决方案,那么我和#39; m也是如此。如果输出是一个字符串,我不介意,因为我显然从StatuslineFileSize()
返回一个字符串!
答案 0 :(得分:2)
使用带有精确说明符的printf
将结果转换为字符串而不是string
:
return printf('%.1fM', bytes / 1048576)