Bisakah saya menggunakan font non-monospace di Vim atau gVim?

32

Apakah ada cara untuk menggunakan font non-monospace di salah satu vimatau gvim?

Saya mencoba mengubah font untuk gVim dengan:

:set guifont=Dejavu\ Serif\ 12

Tetapi ini memberi saya beberapa hasil yang agak jelek:

masukkan deskripsi gambar di sini

Saya mendapatkan hasil yang sama jika saya menggunakan menu (Edit -> Pilih font)

:help guifont mengatakan:

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.

Jadi saya pikir hasil di atas dihitung sebagai "tidak terlihat terbaik"? Bisakah ini diperbaiki, entah bagaimana?

Saya juga mencoba mengatur font non-monospace di terminal saya ( xterm), tetapi tampaknya memiliki efek yang hampir sama:

masukkan deskripsi gambar di sini

Saya tidak keberatan menggunakan emulator terminal yang berbeda untuk btw ini.

Martin Tournoij
sumber
sepertinya sudah dijawab di sini: superuser.com/questions/357571/…
guido
1
@guido Saya tidak melihat jawaban di sana ... Jawaban yang paling banyak dipilih hanyalah penjelasan tentang font apa (bukan jawaban), dan "jawaban" lainnya bahkan lebih buruk ...
Martin Tournoij

Jawaban:

25

Saya menemukan mlterm, yang mendukung ini. Selain dari terminal bawaan Emacs (istilah Mx), ini adalah satu - satunya terminal yang saya temukan yang mendukung ini (saya sudah mencoba sekitar 15-20 yang berbeda).
Saya telah menemukan bahwa itu mltermbekerja lebih baik daripada Emacs karena pengaturan rasio sceen, dan Anda juga menghindari keharusan menjalankan Vim di dalam sesi Emacs (saya bahkan tidak yakin itu diizinkan secara hukum).

Tangkapan layar (tampilannya jelek kecuali Anda membukanya ukuran penuh karena penskalaan di browser):

masukkan deskripsi gambar di sini

Memang membutuhkan beberapa konfigurasi cinta. Setelah memulai, tekan Ctrl+ klik tengah di mana saja, ini akan membuka layar configure. Saya mengatur opsi ini

Di tab Font:

  • Centang "Anti-alias"
  • Centang "Lebar kolom variabel"; ini adalah "fitur utama" yang hilang dari kebanyakan emulator terminal lainnya
  • Setel font ke "DejaVu Sans Book 16" (atau apa pun yang Anda inginkan)
  • Atur lebar "rasio layar terhadap ukuran font" menjadi 60; ini terletak pada program tentang lebar terminal, Anda tidak melakukan ini, Anda hanya menggunakan ~ 50% dari ukuran layar. Nilai terbaik untuk ini tergantung pada font yang digunakan, jadi bereksperimen sedikit ...

Layar konfigurasikan Klik-kanan tampak agak tidak jelas, saya juga mengedit ~/.mlterm/vaafontkarena ini tidak diperbarui:

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

Dan saya ~/.mlterm/main(ini adalah pengaturan yang saya atur di atas, ditambah beberapa preferensi pribadi):

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

Ada beberapa artefak, yang diharapkan, tetapi menulis email atau posting seperti ini, tampaknya berfungsi dengan baik!

Saya membuat alias di shell saya untuk ini:

alias pvim mlterm -e vim

Saya juga membuat sedikit fungsi untuk menghapus sebagian besar UI 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

Ada juga goyo.vim yang kira-kira sama, tetapi itu tidak bekerja dengan baik bagi saya (terlalu banyak mengoceh dengan margin). YMMV.

Martin Tournoij
sumber
Saya harus menggunakan Ctrl + RightClick, bukan di tengah pada Ubuntu 18.04 dengan MLTerm dari repo Ubuntu. Kalau tidak, saya hanya mendapatkan beberapa bingkai persegi aneh di sekitar kursor mouse dan tidak ada dialog.
Ruslan
Terlihat lucu (dan tidak dapat digunakan) ketika Anda menggunakan split vertikal: screenshot . Tapi itu yang diharapkan dari solusi berbasis terminal.
Ruslan
7

Ini jelas tidak didukung di GUI Vim, dan saya akan terkejut jika ada lebih dari beberapa emulator terminal yang mendukung font proporsional dengan cara yang Anda harapkan: itu akan merusak terlalu banyak hal standar untuk terminal mana bekas. Karena begitu banyak bagian Unix dan lingkungan baris perintah lainnya menganggap font monospace, jenis tampilan ini tidak dapat digunakan sebagai terminal tujuan umum, sehingga pengembang terminal harus melakukan pekerjaan tambahan untuk sedikit manfaat.

Namun, ada setidaknya satu emulator Terminal yang diimplementasikan menggunakan teknologi web ( Ajaxterm ), dan karena ini menggunakan HTML / CSS untuk rendering, dimungkinkan untuk membuatnya menggunakan font proporsional menggunakan CSS. CJS Hayward telah melakukan hal ini, tetapi membutuhkan browser yang sangat lama.

Jika Anda menjalankan Vim di terminal seperti itu, maka Anda akan mendapatkan apa yang Anda minta; bersiaplah untuk hijinx aneh ketika Anda menggunakan fitur berbasis kolom. (mis j. k, mode visual blockwise, atau 'colorcolumn'opsi)

PEMBARUAN Seperti yang ditunjukkan oleh penanya, Carpetsmoker dalam komentar , Emacs memiliki dukungan font proporsional yang tepat dan juga termasuk emulator terminal ( M-x term), di mana Anda dapat menjalankan Vim. Penggemar font proporsional yang berdedikasi mungkin juga ingin melihat ke Emacs's Evil untuk mendapatkan pengalaman seperti Vim dalam Emacs.

Kaya
sumber
4

Font yang proporsional didukung di Oni , Neovim GUI. Gunakan renderer "webgl" untuk hasil terbaik.

 "editor.renderer": "webgl"

Lihat juga https://github.com/onivim/oni/issues/2359

Justin M. Keyes
sumber
Terlihat menarik! Sayangnya saya tidak bisa menjalankan proyek ini, dan tidak benar-benar punya waktu untuk men-debug itu :-(
Martin Tournoij
Ada arsip yang dibuat sebelumnya di github.com/onivim/oni/releases .
Justin M. Keyes