Nie można wpisać Unicode w Gvim i VIM w Windows 7

11

Chcę pisać w różnych językach za pomocą (g) Vima. Ale kiedy przełączam się na inny język za pomocą paska języka (znaki Devanagari lub hindi) i piszę cokolwiek, wyświetla się (g) vim ??? ??.

Co próbowałem:

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

Informacja:

  • Wersja GVim: 7.4, a także jego + multi_byte.
  • Brak zmian w domyślnym pliku vimrc.

Właśnie zacząłem z (g) vim.

msinfo
źródło
5
Może to być czcionka. Jakiej czcionki używasz?
muru
1
7 czcionek (konsole, 2 kurier, 2 lucida, fixedsys i terminal) są wymienione w gvim. Próbowałem ich wszystkich. Chociaż mój system ma także inne czcionki, ale gvim wyświetla tylko 7. I śledziłem także: stackoverflow.com/questions/3766204/vim-doesnt-support-unicode, ale nadal nie mam szczęścia.
msinfo
3
„Inny język” jest raczej niejasny. Jaki język? Polskie? Hebrajski? Chiński? Klingon? Jeśli używasz niejasnego języka, bardzo możliwe, że żadna z tych czcionek nie obsługuje tego języka.
Martin Tournoij,
1
W moim przypadku próbuję malajalam z GVim 7.4.800 (lub dalej) z czcionką Ubuntu Mono . Przykładowy tekst można znaleźć w Wikipedii w języku malajalam . W Linuksie (Ubuntu i Arch), z czcionkami terminalu i GVim ustawionymi na Ubuntu Mono, malajalam pojawia się, nawet jeśli jest nieco spłaszczony. Próbowałem innych czcionek msinfo wymienionych w drugim komentarzu.
muru
1
W systemie Linux gvim może wyświetlać żądane znaki, ponieważ Pango pobierze glify z innych czcionek, aby wyświetlić wszystkie znaki. Dlatego też znaki wyglądają inaczej niż reszta tekstu. Jeśli spróbujesz tego samego w xterm, nie zobaczysz wszystkich znaków, ponieważ używana jest jedna czcionka. Podejrzewam, że coś podobnego dzieje się w systemie Windows.
jamessan

Odpowiedzi:

5

Domyślne kodowanie wydaje się latin1:

:set encoding?
  encoding=latin1

Podczas wprowadzania znaków Vim próbuje przekonwertować je z zestawu znaków przychodzących (prawdopodobnie Unicode) na Latin-1. To się nie udaje, ponieważ Latin-1 nie ma tych znaków. Stąd znaki zapytania.

Otwarcie istniejącego pliku (zapisanego za pomocą notatnika lub innego programu) powinno skutkować zniekształconym tekstem, ponieważ teraz Vim próbuje tylko odczytać bajty i zinterpretować je zgodnie z zestawem znaków Latin-1, a nie konwertować ich na zestaw Latin-1.

Będziesz chciał użyć utf-8lub kilka takich:

:set encoding=utf-8

Po czym skrypt malajalam wydaje się działać.

Pamiętaj, że nie spowoduje to działania wcześniej istniejących znaków zapytania. Naprawdę są one konwertowane na znaki zapytania (znak 0x3f) na wejściu. Nie ma możliwości odzyskania tego, co zostało wprowadzone. Podejrzewam, że jest to źródłem pomieszania tego pytania.

Zobacz także :help 'encoding'.

Jako sidenoteut nieobsługiwane glify w czcionce są zwykle renderowane z wyraźnym glifem; różni się w zależności od czcionki, ale zazwyczaj jest to kwadratowy blok lub znak zapytania w innym stylu. widać różnicę między „prawdziwym” znakiem zapytania a nieobsługiwanym glifem g8, który pokaże kod znaku.

Martin Tournoij
źródło
1
Muszę wpisać znaki Devanagari lub hindi. Kodowanie było wcześniej ustawione na latin1, zostało zmienione zgodnie z twoją sugestią na utf-8. Ale nadal nie widać znaków Devanagari ani hindi. Ale kiedy kopiuję te pola (renderowane przez VIM), z VIM do przeglądarki lub Notepad ++, wyglądają jak znaki Unicode. VIM rozpoznaje je, ale nie może ich wyświetlić.
msinfo
1
@ msinfo Jakiej wersji Vima używasz? Wspominałeś 7.4, ale nie wspominałeś o poziomie łaty? Użyłem 7.4.1024 z vim.org .
Martin Tournoij,
1
Wydaje się, że nie został załatany, ponieważ próbowałem znaleźć jedną z twoich odpowiedzi ;-) na vi.stackexchange.com/questions/2466/… . Vim --version nie wyświetla żadnych informacji o łatce. Po instalacji nie wprowadziłem żadnych zmian we wtyczkach ani łatkach.
msinfo
4
@msinfo Vim 7.4 został wydany prawie dwa i pół roku temu. Spróbuj zainstalować nowszą wersję. Może to wszystko, czego potrzeba?
Martin Tournoij,