这是一个有趣的想法.不知道如果我使用它:-) – 但这当然是一个有趣的想法.
你不需要编写一个完整的插件,因为它需要做的就是执行一些数学.更具体地说,粗略的公式是:
在所需尺寸(S)取决于当前文件数量(n)的情况下,常数确定被认为是大文件(k,以行为单位),所需幅度(a) – 意味着尺寸变化多少 – 和最小字体大小(m).
现在我们知道,这只是一个实现它的问题.快速笔记:
要获取n,我们可以调用传递“$”作为参数的line()函数
>要设置字体大小,在我们编号之后,我们可以构建一个字符串并使用exec执行它
function! DetermineFontSize() let bigFile = 200 let nLines = line("$") let rate = (nLines > bigFile) ? 0 : (1-nLines/(bigFile*1.0)) exec "set guifont=Menlo:h".float2nr(ceil((rate*5)+11)) endfunction
我相信其他Vim大师可以改善这一点.无论如何,一个快速的解释:
>设置我们称之为大文件.我已经选择200行进行调试,你可能想要一个更大的数字.
>获取当前文件中的行数.
>在前面的公式中做括号.请注意,有条件涉及(如果您注意到我错过了公式中的恭喜!).如果我们有比最大常数更多的行,则返回0.否则,我们会有一个负数 – 加上一些显而易见的事情.
>在第四行,我们构建要在完成公式时执行的字符串.我选择在这里对a和m的值进行硬编码,因为它们只用了一次,很容易修改它们.这里a是5,m是11,这意味着字体将在11和16之间变化.我用于设置字体的语法对于Mac是有效的.如果另一个读者使用另一个系统,您可能需要相应地更改它.
把它放在你的.vimrc中,或者从其他文件中获取,你可以随时测试它.在一行的文件中,字体设置为16.如果有39行,如果有40行,则大小为16,但大小为15.当有80行时,大小为14,依此类推.
autocmd BufEnter * call DetermineFontSize()
这只能在您输入缓冲区时正常工作.你可以改变它来包括InsertLeave或类似的东西,但请记住,这将产生更多的函数调用.不应该是性能问题.
检查:h自动命令事件,并根据需要构建autocmd.
更新
let &guifont='Menlo:h'.float2nr(ceil((rate*5)+11))