Czy mogę używać czcionek o stałej szerokości w Vimie lub gVimie?

32

Czy jest jakiś sposób na użycie czcionki innej niż monospace w jednym vimlub gvim?

Próbowałem zmienić czcionkę dla gVim za pomocą:

:set guifont=Dejavu\ Serif\ 12

Ale to daje mi raczej brzydkie wyniki:

wprowadź opis zdjęcia tutaj

Otrzymuję te same wyniki, jeśli korzystam z menu (Edycja -> Wybierz czcionkę)

:help guifont mówi:

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.

Więc uważam, że powyższe wyniki liczą się jako „nie wyglądają najlepiej”? Czy można to jakoś poprawić?

Próbowałem również ustawić czcionkę inną niż monospace w moim terminalu ( xterm), ale wydaje się, że ma to mniej więcej taki sam efekt:

wprowadź opis zdjęcia tutaj

Nie mam nic przeciwko użyciu innego emulatora terminala dla tego btw.

Martin Tournoij
źródło
wygląda na to, że już tu odpowiedziano: superuser.com/questions/357571/...
guido
1
@ guido Nie widzę tam odpowiedzi ... Najbardziej ceniona odpowiedź to tylko wyjaśnienie, jakie są czcionki (nie odpowiedź), a inne „odpowiedzi” są jeszcze gorsze ...
Martin Tournoij

Odpowiedzi:

25

Znalazłem mlterm, który to obsługuje. Oprócz wbudowanego terminala Emacsa (termin Mx) jest to jedyny terminal, który to obsługuje (próbowałem około 15-20 różnych).
Przekonałem się, że mltermdziała lepiej niż Emacs ze względu na ustawienia współczynnika sceenów, a także unikasz konieczności uruchamiania Vima w sesji Emacsa (nawet nie jestem pewien, czy jest to prawnie dozwolone).

Zrzut ekranu (wygląda brzydko, chyba że otworzysz go w pełnym rozmiarze ze względu na skalowanie w przeglądarce):

wprowadź opis zdjęcia tutaj

Wymaga to jednak trochę konfiguracji miłości. Po uruchomieniu naciśnij Ctrl+ środkowe kliknięcie w dowolnym miejscu, otworzy się ekran konfiguracji. Ustawiam te opcje

Na karcie Czcionka:

  • Zaznacz „Anti-alias”
  • Zaznacz „Zmienna szerokość kolumny”; jest to „kluczowa funkcja”, której brakuje w większości innych emulatorów terminali
  • Ustaw czcionkę na „DejaVu Sans Book 16” (lub cokolwiek innego, co wolisz)
  • Ustaw „proporcje ekranu w stosunku do rozmiaru czcionki” na 60; dotyczy to programów o szerokości terminala, jeśli tego nie robisz, używasz tylko ~ 50% wielkości ekranu. Najlepsza wartość zależy od użytej czcionki, więc eksperymentuj trochę ...

Ekran konfiguracji po kliknięciu prawym przyciskiem wydaje się nieco niestabilny, edytowałem również mój, ~/.mlterm/vaafontponieważ nie został zaktualizowany:

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

I moje ~/.mlterm/main(są to ustawienia, które ustawiłem powyżej, a także niektóre osobiste preferencje):

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

Są pewne artefakty, których należy się spodziewać, ale pisanie takich e-maili lub postów wydaje się działać całkiem dobrze!

W tym celu utworzyłem alias w mojej powłoce:

alias pvim mlterm -e vim

Stworzyłem również małą funkcję do usuwania większości chrome UI:

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

Jest też goyo.vim, który działa mniej więcej tak samo, ale nie działało to dla mnie zbyt dobrze (zbyt dużo marnowania marginesów). Jednak YMMV.

Martin Tournoij
źródło
Musiałem użyć Ctrl + RightClick, a nie środka na Ubuntu 18.04 z MLTerm z repozytoriów Ubuntu. W przeciwnym razie widzę tylko dziwną kwadratową ramkę wokół kursora myszy i nie ma dialogu.
Ruslan
Wygląda śmiesznie (i bezużytecznie), gdy używasz podziału pionowego: zrzut ekranu . Ale należy tego oczekiwać od rozwiązania terminalowego.
Ruslan
7

Zdecydowanie nie jest obsługiwany w GUI Vim i byłbym zaskoczony, gdyby istniała więcej niż garść emulatorów terminali, które obsługują proporcjonalne czcionki w sposób, na jaki liczysz: zepsułoby to zbyt wiele standardowych rzeczy, dla których terminale są używany. Ponieważ tak wiele części Uniksa i innych środowisk wiersza poleceń zakłada czcionki o stałej szerokości, ten typ wyświetlania nie może być używany jako terminal ogólnego przeznaczenia, więc deweloper terminalu musiałby wykonać dodatkową pracę bez większych korzyści.

Istnieje jednak co najmniej jeden emulator terminala, który został zaimplementowany przy użyciu technologii internetowych ( Ajaxterm ), a ponieważ używa on HTML / CSS do renderowania, możliwe jest użycie proporcjonalnej czcionki za pomocą CSS. CJS Hayward właśnie to zrobił, ale wymaga użycia bardzo starej przeglądarki.

Gdybyś miał uruchomić Vima w takim terminalu, dostałbyś to, o co prosisz; po prostu bądź przygotowany na zwariowany hijinx, gdy korzystasz z funkcji opartych na kolumnach. (na przykład j, ktryb blokowo wizualne lub 'colorcolumn'opcjonalnie)

AKTUALIZACJA Jak zauważył pierwotny pytający pytający Carpetsmoker w komentarzu , Emacs ma odpowiednią proporcjonalną obsługę czcionek, a także zawiera emulator terminala ( M-x term), w którym można uruchomić Vima. Miłośnicy dedykowanych czcionek proporcjonalnych mogą również chcieć przyjrzeć się Złu Emacsa, aby uzyskać wrażenia podobne do Vima w Emacsie.

Bogaty
źródło
4

Czcionki proporcjonalne są obsługiwane w GUI Oni , Neovim. Aby uzyskać najlepsze wyniki, użyj mechanizmu renderującego „webgl”.

 "editor.renderer": "webgl"

Zobacz także https://github.com/onivim/oni/issues/2359

Justin M. Keyes
źródło
Wygląda ciekawie! Niestety nie mogę uruchomić tego projektu i naprawdę nie mam czasu na debugowanie tego :-(
Martin Tournoij,
Gotowe archiwa znajdują się na stronie github.com/onivim/oni/releases .
Justin M. Keyes,