Ответ 1
Это интересная идея. Не уверен, буду ли я использовать его:-) - но это, безусловно, интересная идея.
Вам не нужно писать полный плагин, так как все, что ему нужно сделать, это выполнить некоторую математику. Более конкретно, приблизительная формула:
Если требуемый размер (S) зависит от текущего номера документа строк (n), константа, определяющая, что считается большим файлом (k, в строках), желаемая амплитуда (a) - это означает, размер варьируется - и минимальный размер шрифта (м).
Теперь, когда мы это знаем, это просто вопрос его реализации. Быстрые примечания:
- Чтобы получить 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. В противном случае у нас будет отрицательное число - плюс вычисление чего-то очевидного.
- В четвертой строке мы построим строку, которая будет выполнена при заполнении формулы. Я выбираю hardcode значения для 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
по своему усмотрению.
Update
Как указывал ZyX в комментариях, последняя строка из функции может быть записана как:
let &guifont='Menlo:h'.float2nr(ceil((rate*5)+11))