我希望vim(MacVim)默认为新/短文件的大字体,并随着行数的增长动态缩小到较小的字体(设置为最小值)。这可能与插件有关吗?编写该插件需要了解哪些vim概念?
我想要这样做的原因是我喜欢用大字体编写代码,但是在文件变长之后我宁愿斜视一点而不是滚动。
答案 0 :(得分:18)
这是一个有趣的想法。不确定我是否会使用它:-) - 但这肯定是一个有趣的想法。
您不需要编写完整的插件,因为它需要做的就是执行一些数学运算。更具体地说,粗略的公式是:
如果所需大小( S )取决于当前文档行数( n ),则常量确定什么是大文件( k ,在行中),所需的幅度( a ) - 意味着尺寸变化多少 - 以及最小字体大小( m )。
现在我们知道了,这只是实现它的问题。快速说明:
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大师可以改善这一点。无论如何,快速解释:
将它放在 .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直接询问终端改变字体大小......这可能很难做到。