Posso usar uma fonte não monoespaçada no Vim ou no gVim?

32

Existe alguma maneira de usar uma fonte não monoespaçada em um vimou gvim?

Tentei alterar a fonte do gVim com:

:set guifont=Dejavu\ Serif\ 12

Mas isso me dá alguns resultados bastante feios:

insira a descrição da imagem aqui

Eu obtenho os mesmos resultados se eu usar o menu (Editar -> Selecionar fonte)

:help guifont diz:

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.

Então, acho que os resultados acima contam como "não parecem melhores"? Isso pode ser melhorado, de alguma forma?

Também tentei definir uma fonte não monoespaçada no meu terminal ( xterm), mas isso parece ter aproximadamente o mesmo efeito:

insira a descrição da imagem aqui

Eu não me importo de usar um emulador de terminal diferente para este btw.

Martin Tournoij
fonte
parece que já foi respondido aqui: superuser.com/questions/357571/…
guido
1
@guido Não vejo resposta aqui ... A resposta mais votada é apenas uma explicação do que as fontes são (não uma resposta), e as outras "respostas" são ainda piores ...
Martin Tournoij

Respostas:

25

Eu descobri mlterm, o que suporta isso. Além do terminal embutido do Emacs (termo Mx), este é o único terminal que encontrei que suporta isso (tentei de 15 a 20 diferentes).
Descobri que mltermfunciona melhor que o Emacs devido às configurações de proporção de sceen, e você também evita executar o Vim dentro de uma sessão do Emacs (nem tenho certeza se isso é legalmente permitido).

Captura de tela (parece feia, a menos que você a abra em tamanho real devido ao dimensionamento no navegador):

insira a descrição da imagem aqui

Requer, no entanto, alguma configuração de amor. Após iniciar, pressione Ctrl+ clique do meio em qualquer lugar, isso abrirá a tela de configuração. Eu defino essas opções

Na guia Fonte:

  • Marque "Anti-alias"
  • Marque "Largura variável da coluna"; esse é o "recurso principal" ausente na maioria dos outros emuladores de terminal
  • Defina a fonte como "DejaVu Sans Book 16" (ou o que você preferir)
  • Defina a largura "proporção da tela em relação ao tamanho da fonte" para 60; isso se aplica a programas sobre a largura do terminal; caso contrário, você está usando apenas 50% do tamanho da tela. O melhor valor para isso depende da fonte usada, então experimente um pouco ...

A tela de configuração do botão direito do mouse parece um pouco esquisita, também editei o meu, ~/.mlterm/vaafontpois isso não foi atualizado:

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

E o meu ~/.mlterm/main(estas são as configurações que defini acima, além de algumas preferências pessoais):

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

Existem alguns artefatos que são de se esperar, mas escrever e-mails ou postagens como essa parece funcionar muito bem!

Eu criei um alias no meu shell para isso:

alias pvim mlterm -e vim

Também criei uma pequena função para remover a maioria dos cromo da interface do usuário:

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

Há também o goyo.vim, que é basicamente o mesmo, mas isso não funcionou muito bem para mim (muito mexer nas margens). YMMV embora.

Martin Tournoij
fonte
Eu tive que usar Ctrl + RightClick, e não o meio no Ubuntu 18.04 com MLTerm dos repositórios do Ubuntu. Caso contrário, só consigo uma moldura quadrada estranha ao redor do cursor do mouse e nenhuma caixa de diálogo.
Ruslan
Parece engraçado (e inutilizável) quando você usa a divisão vertical: captura de tela . Mas isso é de se esperar de uma solução baseada em terminal.
Ruslan
7

Definitivamente, ele não é suportado no GUI Vim, e eu ficaria surpreso se houvesse mais do que um punhado de emuladores de terminal que suportam fontes proporcionais da maneira que você espera: isso quebraria muitas das coisas padrão para as quais os terminais estão. usava. Como muitas partes do Unix e outros ambientes de linha de comando presumem fontes monoespaçadas, esse tipo de exibição não pode ser usado como um terminal de uso geral; portanto, o desenvolvedor do terminal teria que ter realizado um trabalho adicional com pouco benefício.

No entanto, existe pelo menos um emulador de terminal implementado usando tecnologias da web ( Ajaxterm ) e, como ele usa HTML / CSS para renderização, é possível usar uma fonte proporcional usando CSS. O CJS Hayward fez exatamente isso, mas requer o uso de um navegador muito antigo.

Se você executasse o Vim nesse terminal, obteria o que estava pedindo; esteja preparado para o hijinx maluco quando você usa qualquer recurso baseado em coluna. (por exemplo j, kmodo visual em blocos ou a 'colorcolumn'opção)

ATUALIZAÇÃO Como Carpetsmoker, um questionador original, aponta em um comentário , o Emacs tem suporte proporcional adequado à fonte e também inclui um emulador de terminal ( M-x term), dentro do qual você pode executar o Vim. Entusiastas dedicados de fontes proporcionais também podem gostar de analisar o Evil do Emacs para obter uma experiência semelhante ao Vim no Emacs.

Rico
fonte
4

Fontes proporcionais são suportadas na Oni , Neovim GUI. Use o renderizador "webgl" para obter melhores resultados.

 "editor.renderer": "webgl"

Consulte também https://github.com/onivim/oni/issues/2359

Justin M. Keyes
fonte
Parece interessante! Infelizmente eu não posso obter este projeto para ser executado, e realmente não tem tempo para depuração que :-(
Martin Tournoij
Existem arquivos pré-criados em github.com/onivim/oni/releases .
9788 Justin M. Keyes