动态vim字体大小基于文件长度

时间:2011-05-25 16:37:01

标签: vim fonts font-size macvim

我希望vim(MacVim)默认为新/短文件的大字体,并随着行数的增长动态缩小到较小的字体(设置为最小值)。这可能与插件有关吗?编写该插件需要了解哪些vim概念?

我想要这样做的原因是我喜欢用大字体编写代码,但是在文件变长之后我宁愿斜视一点而不是滚动。

2 个答案:

答案 0 :(得分:18)

这是一个有趣的想法。不确定我是否会使用它:-) - 但这肯定是一个有趣的想法。

您不需要编写完整的插件,因为它需要做的就是执行一些数学运算。更具体地说,粗略的公式是:

enter image description here

如果所需大小( S )取决于当前文档行数( n ),则常量确定什么是大文件( k ,在行中),所需的幅度( a ) - 意味着尺寸变化多少 - 以及最小字体大小( m )。

现在我们知道了,这只是实现它的问题。快速说明:

  1. 要获取 n ,我们可以调用line()函数作为参数传递"$"
  2. 要设置字体大小,在我们有了数字后,我们可以构建一个字符串并使用exec执行它
  3. 考虑到这一点,一个非常具有描述性的快速功能可以写成:

    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大师可以改善这一点。无论如何,快速解释:

    1. 设置我们称之为大文件的内容。为了调试的目的,我已经完成了200行,你可能想要一个更大的数字。
    2. 获取当前文件中的行数。
    3. 在上一个公式中使用括号。请注意,有一个条件涉及(如果你注意到我在公式中错过了,恭喜!)。如果我们有比最大常量更多的行,则返回0。否则,我们会有一个负数 - 加上计算一些显而易见的东西。
    4. 在第四行中,我们构建了在完成公式时要执行的字符串。我选择在这里对 a m 的值进行硬编码,因为它们只使用一次,并且很容易修改它们。这里 a 是5而 m 是11,这意味着字体将在11到16之间变化。我在这里设置字体的语法对Mac有效。如果其他读者使用其他系统,您可能需要相应地更改它。
    5. 将它放在 .vimrc 中或从其他文件中获取它,您就可以开始测试它了。在一行文件中,字体设置为16.如果有39行,也是16行,但如果有40行,则为15行。当有80行时,大小变为14,依此类推。

      你可能想自动调用它,所以也要创建一个自动命令。

      autocmd BufEnter * call DetermineFontSize()
      

      只有在您输入缓冲区时才会这样,顾名思义。您可以将其更改为包含InsertLeave或类似内容,但请记住,这将生成对函数的更多调用。但不应该是性能问题。

      检查:h autocommand-events并根据需要构建autocmd


      更新

      正如ZyX在评论中指出的那样,该函数的最后一行可以写成:

      let &guifont='Menlo:h'.float2nr(ceil((rate*5)+11))
      

答案 1 :(得分:0)

vim在终端中执行。字体大小取决于终端,所以你要求的可能是不可能的,除非你的vim直接询问终端改变字体大小......这可能很难做到。