Могу ли я использовать немоноширинный шрифт в Vim или gVim?

32

Есть ли способ использовать немонокальный шрифт в vimили gvim?

Я попытался изменить шрифт для gVim с помощью:

:set guifont=Dejavu\ Serif\ 12

Но это дает мне довольно неприятные результаты:

введите описание изображения здесь

Я получаю те же результаты, если использую меню (Правка -> Выбрать шрифт)

:help guifont говорит:

Note that the fonts must be mono-spaced (all characters have the same
width).  An exception is GTK 2: all fonts are accepted, but
mono-spaced fonts look best.

Так что я думаю, что приведенные выше результаты считаются "не выглядят лучше"? Можно ли это как-то улучшить?

Я также попытался установить немонокальный шрифт в моем терминале ( xterm), но это, похоже, дает примерно тот же эффект:

введите описание изображения здесь

Я не против использовать другой эмулятор терминала для этого кстати.

Мартин Турной
источник
похоже, на него уже ответили: superuser.com/questions/357571/…
guido
1
@ guido Я не вижу там ответа ... Наиболее одобренный ответ - это просто объяснение того, что такое шрифты (не ответ), а другие "ответы" еще хуже ...
Мартин Турной,

Ответы:

25

Я нашел mlterm, что поддерживает это. Помимо встроенного терминала Emacs (термин Mx), это единственный терминал, который я обнаружил, который поддерживает это (я пробовал около 15-20 различных).
Я обнаружил, что это mltermработает лучше, чем Emacs, из-за настроек отношения сторон, и вы также избегаете необходимости запускать Vim в сеансе Emacs (я даже не уверен, что это разрешено по закону).

Снимок экрана (выглядит ужасно, если вы не откроете его в полном размере из-за масштабирования в браузере):

введите описание изображения здесь

Это требует некоторой настройки любви, хотя. После запуска нажмите Ctrl+ средний щелчок в любом месте, это откроет экран настройки. Я установил эти параметры

На вкладке «Шрифт»:

  • Проверьте "Сглаживание"
  • Проверьте «Переменная ширина столбца»; эта «ключевая особенность» отсутствует в большинстве других эмуляторов терминала
  • Установите шрифт «DejaVu Sans Book 16» (или что-то еще, что вы предпочитаете)
  • Установите ширину «соотношение экрана к размеру шрифта» до 60; это касается программ ширины терминала, если вы этого не делаете, вы используете только ~ 50% размера экрана. Наилучшее значение для этого зависит от используемого шрифта, поэтому поэкспериментируйте немного ...

Экран настройки правого клика кажется немного ненадежным, я также отредактировал свой, ~/.mlterm/vaafontтак как он не был обновлен:

ISO10646_UCS4_1 = 22,DejaVu Sans 18;21,DejaVu Sans 16;16,DejaVu Sans 16

И мой ~/.mlterm/main(это настройки, которые я установил выше, плюс некоторые личные настройки):

type_engine = xft
bel_mode = none
scrollbar_mode = none
fontsize = 22
use_anti_alias = true
use_variable_column_width = true
line_space = 5
use_multi_column_char = true
col_size_of_width_a = 1
screen_width_ratio = 50

Есть некоторые артефакты, которые следует ожидать, но написание электронных писем или сообщений, подобных этому, кажется, работает довольно хорошо!

Я создал псевдоним в моей оболочке для этого:

alias pvim mlterm -e vim

Я также создал небольшую функцию для удаления большинства Chrome пользовательского интерфейса:

fun! WriteMode()
    " Disable a lot of stuff
    setlocal nocursorline nocursorcolumn statusline= showtabline=0 laststatus=0 noruler

    " Hack a right margin with number
    setlocal number
    setlocal numberwidth=3

    " White text, so it's 'invisible'
    highlight LineNr ctermfg=15
    " If you're using a black background:
    " highlight LineNr ctermfg=1
endfun

Есть также goyo.vim, который работает примерно так же, но мне это не очень помогло (слишком много гадости с полями). YMMV хотя.

Мартин Турной
источник
Мне пришлось использовать Ctrl + RightClick, а не середину на Ubuntu 18.04 с MLTerm из репозиториев Ubuntu. В противном случае я получаю только странную квадратную рамку вокруг курсора мыши и никакого диалога.
Руслан
Выглядит смешно (и непригодно), когда вы используете вертикальное разделение: скриншот . Но этого следует ожидать от терминального решения.
Руслан
7

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

Однако существует по крайней мере один эмулятор терминала, который реализован с использованием веб-технологий ( Ajaxterm ), и, поскольку он использует HTML / CSS для рендеринга, можно сделать так, чтобы он использовал пропорциональный шрифт с использованием CSS. CJS Hayward сделал именно это, но для этого нужно использовать очень старый браузер.

Если бы вы запустили Vim в таком терминале, вы бы получили то, что просили; просто будьте готовы к дурацкому хиджинксу, когда вы используете какие-либо функции на основе столбцов. (например j, kблочный визуальный режим или 'colorcolumn'опция)

ОБНОВЛЕНИЕ Как отмечает оригинальный автор вопроса Carpetsmoker в комментарии , Emacs имеет правильную поддержку пропорциональных шрифтов, а также включает эмулятор терминала ( M-x term), внутри которого вы можете запустить Vim. Энтузиастам соразмерных шрифтов, возможно, также понравится заглянуть в Emacs's Evil, чтобы получить Vim-подобный опыт в Emacs.

Богатый
источник
4

Пропорциональные шрифты поддерживаются в Oni , Neovim GUI. Используйте средство рендеринга "webgl" для достижения наилучших результатов.

 "editor.renderer": "webgl"

Смотрите также https://github.com/onivim/oni/issues/2359

Джастин М. Кейс
источник
Выглядит интересно! К сожалению, я не могу запустить этот проект, и у меня нет времени на его отладку :-(
Мартин Турной
Предварительно собранные архивы находятся на github.com/onivim/oni/releases .
Джастин М. Кейс