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.