Puis-je utiliser une police non monospace dans Vim ou gVim?

32

Est-il possible d'utiliser une police non monospace dans vimou gvim?

J'ai essayé de changer la police pour gVim avec:

:set guifont=Dejavu\ Serif\ 12

Mais cela me donne des résultats plutôt laids:

entrez la description de l'image ici

J'obtiens les mêmes résultats si j'utilise le menu (Édition -> Sélectionner la police)

:help guifont dit:

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.

Donc, je pense que les résultats ci-dessus comptent comme "ne pas chercher mieux"? Cela peut-il être amélioré, d'une manière ou d'une autre?

J'ai également essayé de définir une police non monospace dans mon terminal ( xterm), mais cela semble avoir à peu près le même effet:

entrez la description de l'image ici

Cela ne me dérange pas d'utiliser un autre émulateur de terminal pour cet événement.

Martin Tournoij
la source
il semble qu'il ait déjà été répondu ici: superuser.com/questions/357571/…
guido
1
@guido Je ne vois pas de réponse ici ... La réponse la plus votée est simplement une explication de ce que sont les polices (pas une réponse), et les autres "réponses" sont encore pires ...
Martin Tournoij

Réponses:

25

J'ai trouvé mltermqui soutient cela. À part le terminal intégré d'Emacs (terme Mx), c'est le seul terminal que j'ai trouvé qui le supporte (j'ai essayé environ 15 à 20 différents).
J'ai trouvé que cela mltermfonctionnait mieux qu'Emacs en raison des paramètres de ratio de visionnage, et vous évitez également d'avoir à exécuter Vim dans une session Emacs (je ne suis même pas sûr que ce soit légalement autorisé).

Capture d'écran (il semble moche à moins que vous l'ouvriez en taille réelle à cause de la mise à l'échelle dans le navigateur):

entrez la description de l'image ici

Cela nécessite cependant un peu d'amour de configuration. Après le démarrage, appuyez Ctrlsur le bouton central de la souris, cliquez n'importe où pour ouvrir l'écran de configuration. Je mets ces options

Dans l'onglet Police:

  • Cochez "Anti-alias"
  • Cochez "Largeur de colonne variable"; c'est la "fonctionnalité clé" qui manque à la plupart des autres émulateurs de terminaux
  • Définissez la police sur "DejaVu Sans Book 16" (ou comme vous préférez)
  • Définissez la largeur du rapport d'écran sur la taille de la police à 60; Cela concerne les programmes sur la largeur du terminal. Si vous ne le faites pas, vous n'utilisez que ~ 50% de la taille de l'écran. La meilleure valeur pour cela dépend de la police utilisée, alors expérimentez un peu ...

L'écran de configuration du clic droit semble un peu floconneux, j'ai également édité mon ~/.mlterm/vaafontdepuis que cela n'a pas été mis à jour:

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

Et mon ~/.mlterm/main(ce sont les paramètres que j'ai définis ci-dessus, plus quelques préférences personnelles):

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

Il y a certains artefacts, qui sont à prévoir, mais écrire des courriels ou des messages comme celui-ci semble bien fonctionner!

J'ai créé un alias dans mon shell pour ceci:

alias pvim mlterm -e vim

J'ai également créé une petite fonction pour supprimer la plupart des interfaces utilisateur 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

Il y a aussi goyo.vim, qui a à peu près la même chose, mais ça ne m'a pas très bien fonctionné (trop de marottes). YMMV cependant.

Martin Tournoij
la source
Je devais utiliser Ctrl + RightClick, pas le milieu sur Ubuntu 18.04 avec MLTerm à partir du dépôt Ubuntu. Sinon, je ne reçois qu'un étrange cadre carré autour du curseur de la souris et aucun dialogue.
Ruslan
C’est drôle (et inutilisable) lorsque vous utilisez la séparation verticale: capture d’écran . Mais il faut s'y attendre d'une solution basée sur un terminal.
Ruslan
7

Elle n’est certainement pas prise en charge par l’interface graphique Vim, et je serais surpris de voir qu’il existe plus d’une poignée d’émulateurs de terminaux qui prennent en charge les polices proportionnelles de la manière que vous espérez: cela romprait un trop grand nombre de fonctions standard des terminaux. utilisé. Comme de nombreuses parties d'Unix et d'autres environnements de ligne de commande présument des polices à espacement unique, ce type d'affichage ne peut pas être utilisé comme un terminal à usage général. Le développeur du terminal aurait donc dû effectuer un travail supplémentaire sans grand bénéfice.

Cependant, il existe au moins un émulateur de terminal implémenté à l'aide de technologies Web ( Ajaxterm ), et comme il utilise HTML / CSS pour le rendu, il est possible d'utiliser une police proportionnelle utilisant CSS. CJS Hayward vient de le faire, mais il faut utiliser un très vieux navigateur.

Si vous exécutiez Vim dans un tel terminal, vous obtiendrez ce que vous demandez; préparez-vous à un hijinx farfelu lorsque vous utilisez des fonctionnalités basées sur des colonnes. (par exemple j, kmode visuel par blocs ou 'colorcolumn'option)

MISE À JOUR Comme Carpetsmoker, le questionneur d'origine, le souligne dans un commentaire , Emacs prend en charge les polices proportionnelles appropriées et inclut également un émulateur de terminal ( M-x term), à l'intérieur duquel vous pouvez exécuter Vim. Les passionnés de polices proportionnelles peuvent également s'intéresser au mal d' Emacs pour vivre une expérience de type Vim au sein d'Emacs.

Riches
la source
4

Les polices proportionnelles sont prises en charge dans Oni , Neovim GUI. Utilisez le rendu "webgl" pour de meilleurs résultats.

 "editor.renderer": "webgl"

Voir aussi https://github.com/onivim/oni/issues/2359

Justin M. Keyes
la source
Semble intéressant! Malheureusement, je ne parviens pas à exécuter ce projet et je n'ai pas vraiment le temps de déboguer cela :-(
Martin Tournoij
Des archives pré-construites sont disponibles sur github.com/onivim/oni/releases .
Justin M. Keyes