Динамический размер шрифта vim в зависимости от длины файла - PullRequest
13 голосов
/ 25 мая 2011

Я хочу, чтобы vim (MacVim) по умолчанию использовал крупный шрифт для новых / коротких файлов и динамически уменьшал до меньшего шрифта (до установленного минимума) по мере роста количества строк. Это возможно сделать с плагином? Какие концепции Vim мне нужно знать, чтобы написать этот плагин?

Причина, по которой я этого хочу, заключается в том, что я люблю писать код крупным шрифтом, но после того, как файлы становятся длиннее, я бы скорее щурился, чем прокручивал.

Ответы [ 2 ]

18 голосов
/ 25 мая 2011

Это интересная идея.Не уверен, что я бы использовал его :-) - но это, безусловно, интересная идея.

Вам не нужно писать полный плагин, поскольку все, что ему нужно сделать, это выполнить некоторую математику.В частности, грубая формула будет выглядеть следующим образом:

enter image description here

Где требуемый размер ( S ) зависит от количества строк в текущем документе ( n), константа, определяющая, что считать большим файлом ( k , в строках), желаемую амплитуду ( a ) - то есть насколько будет изменяться размер - иминимальный размер шрифта ( m ).

Теперь, когда мы знаем, что это просто вопрос реализации.Быстрые заметки:

  1. Чтобы получить n , мы можем вызвать функцию line(), передавая "$" в качестве аргумента
  2. Чтобы установить размер шрифта, после того, как мы имеемчисло, которое мы можем построить строку и выполнить ее с помощью 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 могут улучшить это.В любом случае, краткое объяснение:

  1. Настройте то, что мы называем большими файлами.Я выбрал 200 строк для целей отладки, возможно, вам нужно большее число.
  2. Получите количество строк в текущем файле.
  3. Сделайте скобки в предыдущей формуле.Обратите внимание, что в этом есть условное условие (если вы заметили, что я пропустил это в формуле, поздравляем!).Если у нас больше строк, чем максимальная константа, возвращается 0.В противном случае у нас будет отрицательное число - плюс вычисление чего-то очевидного.
  4. В четвертой строке мы строим строку, которая будет выполняться при заполнении формулы.Я решил жестко закодировать значения для 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))
0 голосов
/ 25 мая 2011

vim выполняется в терминале.Размер шрифта зависит от терминала, поэтому то, что вы просите, может оказаться невозможным, если ваш vim не попросит терминал напрямую изменить размер шрифта ... что может быть трудно сделать.

...