Это интересная идея.Не уверен, что я бы использовал его :-) - но это, безусловно, интересная идея.
Вам не нужно писать полный плагин, поскольку все, что ему нужно сделать, это выполнить некоторую математику.В частности, грубая формула будет выглядеть следующим образом:
Где требуемый размер ( 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
I'mуверен, что другие мастера Vim могут улучшить это.В любом случае, краткое объяснение:
- Настройте то, что мы называем большими файлами.Я выбрал 200 строк для целей отладки, возможно, вам нужно большее число.
- Получите количество строк в текущем файле.
- Сделайте скобки в предыдущей формуле.Обратите внимание, что в этом есть условное условие (если вы заметили, что я пропустил это в формуле, поздравляем!).Если у нас больше строк, чем максимальная константа, возвращается 0.В противном случае у нас будет отрицательное число - плюс вычисление чего-то очевидного.
- В четвертой строке мы строим строку, которая будет выполняться при заполнении формулы.Я решил жестко закодировать значения для a и m здесь, поскольку они используются только один раз, и их легко изменить.Здесь a равно 5, а m равно 11, что означает, что шрифт будет варьироваться от 11 до 16. Синтаксис, который я здесь использовал для установки шрифта, действителен для Mac.Если другой читатель использует другую систему, вы можете изменить ее соответствующим образом.
Вставьте это в ваш .vimrc или загрузите его из другого файла, и вы будете готовы протестировать его.,Для файла с одной строкой шрифт установлен на 16. Если имеется 39 строк, также размер 16, но размер 15, если есть 40. Размер становится равным 14, когда имеется 80 строк и т. Д.
Возможно, вы захотите вызвать это автоматически, поэтому создайте команду auto.
autocmd BufEnter * call DetermineFontSize()
Это будет работать только при вводе буфера, как следует из названия.Вы можете изменить это, чтобы включить InsertLeave
или что-то подобное, но имейте в виду, что это вызовет больше вызовов функции.Хотя не должно быть проблем с производительностью.
Проверьте :h autocommand-events
и постройте autocmd
, как вам нравится.
Обновите
Как ZyX указал вкомментарии, последняя строка из функции может быть записана как:
let &guifont='Menlo:h'.float2nr(ceil((rate*5)+11))