Cómo ver caracteres UTF-8 en VIM o Gvim

106

Trabajo en páginas web que involucran scripts que no están en inglés de vez en cuando, la mayoría de ellos usa el juego de caracteres utf-8, VIM y Gvim no muestra los caracteres UTF-8 correctamente.

Usando VIM 7.3.46 en Windows 7 de 64 bits, con set guifont=Monaco:h10_vimrc

¿Hay alguna forma de solucionar este problema?

Actualización: busqué en Google y encontré set guifontwideactos como el segundo respaldo para los idiomas regionales.

Agregué las siguientes líneas en _vimrc y la mayoría de mis problemas se resolvieron.

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

La fuente NSimsun anterior funciona para el chino. El problema es que no sé cómo lograron que el nombre de la fuente funcione con VIM, Courier Newse menciona como Courier_Newtampoco NSimsunestá en ninguna parte del directorio de fuentes. La fuente que quiero usar es LathaPero, no sé cómo usarla en el archivo _vimrc. set guifontwide=latha:h12o set guifontwide=Latha:h12no funciona.

Si configuro con éxito el guifontwidea latha, entonces mi problema se resolverá, ¿cómo hacerlo?

Sathish Manohar
fuente
¿Cuál es el valor 'guifont'y el valor de 'guifontwide'? Además, ¿qué sistema operativo estás usando y qué versión de vim?
Benoit
Sathish, ¿pudiste encontrar alguna solución para esto? Estoy tratando de escribir gVim con el software eKalappai pero vim solo me muestra. personajes (aparentemente guardándolos de la misma manera).
sundar - Reincorporación a Monica
@sundar No. Me di por vencido: |
Sathish Manohar
Mi problema fue que inconsolata-g no admite los caracteres utf-8 en mi documento.
AndrewPK
El uso set guifontwide=NSimsun:h12falla para mí, dice "Fuente ancha no válida" probablemente el mismo problema que no es de espacio único.
Mikew

Respuestas:

61

Intente volver a cargar el documento usando:

:e! ++enc=utf8

Si eso funciona, tal vez debería cambiar la fileencodingsconfiguración en su .vimrc.

Benoit
fuente
2
No cambia nada para mí
Thomas Levesque
8
NO ejecute esto antes de guardar su trabajo, ya que borrará los cambios que ha realizado. :uaunque te salvará.
Además, esto configura el archivo para que sea de solo lectura cuando hace esto, por lo que también debe ejecutarlo:set noro
Matt Vukomanovic
2
Gracias por esto. Vim no estaba renderizando utf-8 en mi caso porque tenía un bloque de datos binarios (parte adjunta de datos de formulario / multiparte). Cuando lo hice :e! ++enc=utf8, renderizó el utf-8, pero se quejó [ILLEGAL BYTE in line 286](la primera línea de la parte binaria) dentro del archivo. Supongo que el comportamiento predeterminado es retroceder silenciosamente a alguna otra codificación cuando esto sucede en la apertura de Vim. Sin embargo, por alguna razón, echo &enctodavía informa utf-8 en ese caso.
Dmitry Minkovsky
1
@DmitryMinkovsky, &ences la codificación que vim usa internamente para almacenar el contenido del búfer. La configuración que contiene la codificación del archivo actual es&fenc
Benoit
60

Has probado

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

?

Maxim Sloyko
fuente
5
Probé con estas dos configuraciones y todavía no puedo ver los caracteres utf-8.
Sathish Manohar
1
-1. En realidad, esto no puede funcionar. Ninguna de estas opciones recargará el archivo. El primero modificará cómo vim almacena los búferes (y otras cosas) internamente, el segundo especificará que desea cambiar la codificación de un archivo que ya está cargado en un búfer, lo que se aplicará al guardarlo.
Benoit
:set encoding=utf8 SE refrescar la memoria intermedia y si el problema estaba en la codificación incorrecta, será solucionarlo. Agregué una set fileencoding=utf8opción para que no se encuentre con el error más confuso "No se puede convertir algún carácter" al guardar.
Maxim Sloyko
Establecer codificación funcionó. Agregué set encoding = utf8 al archivo .vimrc y ahora todo está bien con utf8.
Alexander Kim
En OSX, agregué estas dos líneas (sin los dos puntos) a mi ~/.vimrcy funcionó bien
lionello
7

Si los japoneses vienen aquí, agregue las siguientes líneas a su ~/.vimrc

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

En Microsoft Windows, gvim no le permitiría seleccionar fuentes no monoespaciadas. Desafortunadamente, Latha es una fuente no monoespaciada.

Hay una forma de pirateo para que esto suceda: usando FontForge (puede descargar el binario de Windows desde http://www.geocities.jp/meir000/fontforge/ ) para editar Latha.ttf y marcarlo como una fuente monoespaciada. Haciendo así:

  1. Cargue fontforge, seleccione latha.ttf.
  2. Menú: Elemento -> Información de fuente
  3. Seleccione "OS / 2" de la lista de la izquierda en el cuadro de diálogo Información de fuente
  4. Seleccione la pestaña "Panose"
  5. Establecer proporción = monoespaciado
  6. Guarde la nueva versión TTF de esta fuente, ¡pruébela!

¡Buena suerte!

Yi Zhao
fuente
1
No pude cambiar la fuente latha a monoespacio. Seguí tus pasos exactamente, pero el archivo guardado aún no funciona como fuente monoespaciada :(
Sathish Manohar
1
@Sathish Manohar 1) sobrescriba el archivo TTF existente, reinicie Windows y pruébelo. o 2) puede guardar el TTF en un archivo nuevo y modificar el nombre de la fuente. Instale el nuevo archivo TTF. Esta nueva fuente debería estar disponible en su lista.
Yi Zhao
Después de todos esos años (7 años) después, hay varias fuentes gratuitas disponibles para VIM. Fuentes Google Noto google.com/get/noto ; e Iosveka github.com/be5invis/Iosevka/releases son muy buenas alternativas para evaluar.
Yi Zhao
3

En Linux, abra el archivo de configuración de VIM

$ sudo -H gedit /etc/vim/vimrc

Añadidas las siguientes líneas:

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

Guardar y salir, y comando de terminal:

$ source /etc/vim/vimrc

En este momento, VIM mostrará correctamente el chino.

Paul Chen
fuente
2

¿Se resuelve este problema mientras tanto?

Tuve el problema de que gvim no mostraba todos los caracteres Unicode (sino solo un subconjunto, incluidas las diéresis y los caracteres acentuados), mientras :set guifont?estaba vacío; mira mi pregunta . Después de leer aquí, estableciendo guifontun valor razonable me lo arregló. Sin embargo, no necesito caracteres de más de 2 bytes.

Tobias
fuente
1
¿Cuál es un valor razonable para guifont? ¿Qué pusiste?
Christian
Enumeré los valores que funcionaron para mí en esta respuesta .
Tobias
2

No pude obtener ninguna otra fuente que instalé para que apareciera en mi editor de Windows GVim, así que simplemente cambié a la Lucida Consoleque tiene al menos una compatibilidad algo mejor con UTF-8. Agregue esto al final de su _vimrc:

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

Ahora veo al menos algunos caracteres UTF-8.

Ryan Shillington
fuente
en mi caso, cANSI tuvo que cambiarse a cGREEK (Editar -> Seleccionar fuente ... en GVim), con fuente Consolas, para mostrar correctamente un archivo de texto codificado en UTF-8 con caracteres griegos
hello_earth
1

En Windows gvim, simplemente seleccione la fuente "Lucida Console".

Alex Dvoretskiy
fuente