Come visualizzare i caratteri UTF-8 in VIM o Gvim


106

Di tanto in tanto lavoro su pagine web che coinvolgono script non inglesi, la maggior parte di loro utilizza il set di caratteri utf-8, VIM e Gvim non visualizzano correttamente i caratteri UTF-8.

Utilizzando VIM 7.3.46 su Windows 7 64 bit, con set guifont=Monaco:h10_vimrc

C'è un modo per risolvere questo problema?

Aggiornamento: ho cercato su Google e ho scoperto che set guifontwidefunge da secondo fallback per le lingue regionali.

Ho aggiunto le seguenti righe in _vimrc e la maggior parte dei miei problemi è stata risolta.

set enc=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf8,prc
set guifont=Monaco:h11
set guifontwide=NSimsun:h12

Il font NSimsun sopra funziona per il cinese, il problema è che non so come hanno fatto a far funzionare il nome del font con VIM, Courier Newè menzionato perché non Courier_Newsi NSimsuntrova da nessuna parte nella directory dei font. Il tipo di carattere che voglio usare è LathaMa non so come usarlo in _vimrc File. set guifontwide=latha:h12o set guifontwide=Latha:h12non funziona.

Se ho impostato correttamente guifontwidesu latha, il mio problema verrà risolto, come si fa?


qual è il valore 'guifont'e il valore di 'guifontwide'? Inoltre, quale sistema operativo stai utilizzando e quale versione di vim?
— Benoit

Sathish, sei riuscito a trovare una soluzione per questo? Sto cercando di digitare gVim con il software eKalappai ma vim mi mostra solo ?? personaggi (apparentemente salvandoli allo stesso modo).
— domenica - Ripristina Monica il

@sundar No. Mi sono arreso: |
— Sathish Manohar

Il mio problema era che inconsolata-g non supporta i caratteri utf-8 nel mio documento.
— AndrewPK

L'utilizzo set guifontwide=NSimsun:h12non riesce per me, dice "Carattere largo non valido" probabilmente lo stesso problema non monospazio?
— mikew

Risposte:


61

Prova a ricaricare il documento usando:

:e! ++enc=utf8

Se funziona dovresti forse modificare le fileencodingsimpostazioni nel tuo .vimrc.


2
Non cambia nulla per me
— Thomas Levesque

8
NON eseguirlo prima di salvare il tuo lavoro poiché cancellerà le modifiche apportate. :uti salverà però.

Inoltre questo imposta il file in sola lettura quando lo fai, quindi devi anche eseguire quindi:set noro
— Matt Vukomanovic

2
Grazie per questo. Vim non stava eseguendo il rendering di utf-8 nel mio caso perché avevo un blocco di dati binari (parte di allegato multipart / form-data). Quando l'ho fatto :e! ++enc=utf8, ha reso l'utf-8, ma si è lamentato [ILLEGAL BYTE in line 286](la prima riga della parte binaria) all'interno del file. Immagino che il comportamento predefinito sia di tornare silenziosamente a qualche altra codifica quando ciò accade all'apertura di Vim. Per qualche ragione, però, echo &encriporta ancora utf-8 in quel caso.
— Dmitry Minkovsky,

1
@DmitryMinkovsky, &encè la codifica che vim utilizza internamente per memorizzare i contenuti del buffer. L'impostazione che contiene la codifica per il file corrente è&fenc
— Benoit

60

Hai provato

:set encoding=utf-8
:set fileencoding=utf-8

?


5
Ho provato con entrambe queste impostazioni e ancora non riesco a vedere i caratteri utf-8.
— Sathish Manohar

1
-1. In realtà questo non può funzionare. Nessuna di queste opzioni ricaricherà il file. Il primo modificherà il modo in cui vim memorizza i buffer (e altre cose) internamente, il secondo specificherà che si desidera modificare la codifica di un file che è già caricato in un buffer, cosa che verrà applicata durante il salvataggio.
— Benoit

:set encoding=utf8 WILL aggiornare il buffer e se il problema era in codifica non corretta, sarà risolvere il problema. Ho aggiunto set fileencoding=utf8un'opzione in modo da non incappare nel più confuso errore "Impossibile convertire alcuni caratteri" durante il salvataggio.
— Maxim Sloyko

la codifica impostata ha funzionato. Ho aggiunto set encoding = utf8 al file .vimrc e ora è tutto ok con utf8.
— Alexander Kim

Su OSX, ho aggiunto queste due linee (senza i due punti) al mio ~/.vimrce ha funzionato bene
— lionello

7

Se i giapponesi vengono qui, aggiungi le seguenti righe al tuo ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac

6

Su Microsoft Windows, gvim non consente di selezionare caratteri non a spaziatura fissa. Sfortunatamente Latha è un carattere non a spaziatura fissa.

C'è un modo per farlo accadere: usando FontForge (puoi scaricare il binario di Windows da http://www.geocities.jp/meir000/fontforge/ ) per modificare il Latha.ttf e contrassegnarlo come carattere a spaziatura fissa. In questo modo:

  1. Carica fontforge, seleziona latha.ttf.
  2. Menu: Elemento -> Info carattere
  3. Seleziona "OS / 2" dall'elenco a sinistra nella finestra di dialogo Informazioni sui caratteri
  4. Seleziona la scheda "Panoramica"
  5. Imposta proporzione = Monospaziato
  6. Salva la nuova versione TTF di questo font, provalo!

In bocca al lupo!


1
Non ho potuto cambiare il font latha in monospace. Ho seguito esattamente i tuoi passaggi ma il file salvato non funziona ancora come carattere a spaziatura fissa :(
— Sathish Manohar

1
@Sathish Manohar 1) sovrascrivi il file TTF esistente, riavvia Windows e provalo. oppure 2) puoi salvare il TTF in un nuovo file e modificare il nome del font. Installa il nuovo file TTF. Questo nuovo carattere dovrebbe essere disponibile nel tuo elenco.
— Yi Zhao

Dopo tutti quegli anni (7 anni) dopo, ci sono diversi font gratuiti disponibili per VIM. Caratteri Google Noto google.com/get/noto ; e Iosveka github.com/be5invis/Iosevka/releases sono ottime alternative da valutare.
— Yi Zhao

3

In Linux, apri il file di configurazione VIM

$ sudo -H gedit /etc/vim/vimrc

Aggiunte le seguenti righe:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

Salva ed esci e comando da terminale:

$ source /etc/vim/vimrc

A questo punto VIM visualizzerà correttamente il cinese.


2

Questo problema nel frattempo è stato risolto?

Ho avuto il problema che gvim non mostrava tutti i caratteri Unicode (ma solo un sottoinsieme, inclusi dieresi e caratteri accentati), mentre :set guifont?era vuoto; vedere la mia domanda . Dopo aver letto qui, l'impostazione guifontdi un valore ragionevole per me l'ha risolto. Tuttavia, non ho bisogno di caratteri oltre i 2 byte.


1
Qual è un valore ragionevole per guifont? Cosa ci hai messo?
— Christian

Ho elencato i valori che hanno funzionato per me in questa risposta .
— Tobias

2

Non sono riuscito a visualizzare nessun altro font che ho installato nel mio editor GVim di Windows, quindi sono passato a quello Lucida Consoleche ha un supporto UTF-8 almeno un po 'migliore. Aggiungi questo alla fine del tuo _vimrc:

" For making everything utf-8
set enc=utf-8
set guifont=Lucida_Console:h9:cANSI
set guifontwide=Lucida_Console:h12

Ora vedo almeno alcuni caratteri UTF-8.


nel mio caso cANSI doveva essere cambiato in cGREEK (Modifica -> Seleziona carattere ... in GVim), con carattere Consolas, per visualizzare correttamente un file di testo codificato UTF-8 con caratteri greci
— hello_earth

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.