No puedo escribir Unicode con Gvim y VIM en Windows 7

11

Quiero escribir en diferentes idiomas usando (g) Vim. Pero cuando cambio a otro idioma usando la barra de idioma (caracteres Devanagari o Hindi) y escribo cualquier cosa, aparece (g) vim ??? ??.

Lo que probé:

write ++enc=utf-8 foo.txt  
set fileencoding=utf-8   
set enc=utf-8

Información:

  • Versión de GVim: 7.4, y también su + multi_byte.
  • No hay cambios en el archivo vimrc predeterminado.

Acabo de comenzar con (g) vim.

msinfo
fuente
55
Puede ser una fuente. ¿Qué fuente estás usando?
muru
1
7 fuentes (consolas, 2 courier, 2 lucida, fixedsys y terminal) se enumeran en gvim. Los probé todos. Si bien mi sistema también tiene otras fuentes, pero gvim muestra solo 7. También lo seguí: stackoverflow.com/questions/3766204/vim-doesnt-support-unicode pero aún no tuve suerte.
msinfo
3
"Otro idioma" es bastante vago. ¿Que lenguaje? ¿Polaco? ¿Hebreo? ¿Chino? Klingon? Si está utilizando un lenguaje oscuro, es muy posible que ninguna de esas fuentes sea compatible con ese idioma.
Martin Tournoij
1
En mi caso, estoy probando Malayalam con GVim 7.4.800 (o por ahí) con la fuente Ubuntu Mono . De texto de ejemplo, ver el malayalam Wikipedia . En Linux (Ubuntu y Arch), con el terminal y las fuentes GVim configuradas en Ubuntu Mono, Malayalam aparece, incluso si está un poco apretado. He probado las otras fuentes msinfo mencionadas en el segundo comentario.
Muru
1
En Linux, gvim puede mostrar los caracteres que desee porque Pango extraerá los glifos de otras fuentes para poder mostrar todos los caracteres. Es por eso que los caracteres se ven diferentes al resto del texto. Si intenta lo mismo en xterm, no verá todos los caracteres porque se usa una sola fuente. Sospecho que algo similar está sucediendo en Windows.
jamessan

Respuestas:

5

La codificación predeterminada parece ser latin1:

:set encoding?
  encoding=latin1

Al ingresar caracteres, Vim intenta convertirlos del conjunto de caracteres entrantes (probablemente unicode) a latin-1. Esto falla ya que latin-1 no tiene estos caracteres. De ahí los signos de interrogación.

Abrir un archivo existente (guardado con el bloc de notas o algún otro programa) debería dar como resultado un texto confuso, ya que ahora Vim solo está tratando de leer bytes e interpretarlos de acuerdo con el conjunto de caracteres latin-1, y no convertirlos al conjunto latin-1.

Usted querrá usar utf-8o algo así:

:set encoding=utf-8

Después de lo cual el script Malayalam parece funcionar.

Tenga en cuenta que esto no hará que funcionen los signos de interrogación preexistentes. Estos realmente se convierten en signos de interrogación (carácter 0x3f) en la entrada. No hay forma de recuperar lo que se ingresó. Sospecho que esta es la fuente de confusión de esta pregunta.

También vea :help 'encoding'.

Como nota al margen, los glifos no admitidos en la fuente generalmente se representan con un glifo distinto; esto varía según la fuente, pero generalmente es un bloque cuadrado o un signo de interrogación de estilo diferente. puede ver la diferencia entre un signo de interrogación "real" y un glifo no compatible con g8, que mostrará el código de caracteres.

Martin Tournoij
fuente
1
Necesito escribir caracteres devanagari o hindi. La codificación se estableció previamente en latin1, se modificó según su sugerencia a utf-8. Pero aún no hay caracteres Devanagari o Hindi visibles. Pero cuando copio esos cuadros (tal como los representa VIM), desde VIM al navegador o Notepad ++, se ven como caracteres Unicode. Entonces VIM reconoce, pero no puede mostrarlos.
msinfo
1
@msinfo ¿Qué versión de Vim estás usando? ¿Mencionó 7.4, pero no mencionó el nivel de parche? Usé 7.4.1024 de vim.org .
Martin Tournoij
1
Parece sin parches, ya que traté de averiguarlo en una de sus respuestas ;-) en vi.stackexchange.com/questions/2466/… . Vim --version no muestra ninguna información de parche. No he realizado ningún cambio de complemento o parche después de la instalación.
msinfo
44
@msinfo Vim 7.4 se lanzó hace casi dos años y medio. Intenta instalar la versión más nueva. Tal vez eso es todo lo que se necesita?
Martin Tournoij