Jak wyświetlić znaki UTF-8 w VIM lub Gvim

106

Od czasu do czasu pracuję na stronach internetowych zawierających skrypty nieanglojęzyczne, większość z nich używa zestawu znaków utf-8, VIM i Gvim nie wyświetlają poprawnie znaków UTF-8.

Używanie VIM 7.3.46 w systemie Windows 7 64-bitowym, z set guifont=Monaco:h10_vimrc

Czy jest sposób, aby to naprawić?

Aktualizacja: przeszukałem w Google i znalazłem set guifontwideakty jako drugie rozwiązanie zastępcze dla języków regionalnych.

Dodałem następujące linie w _vimrc i większość moich problemów została rozwiązana.

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

Powyższa czcionka NSimsun działa dla języka chińskiego. Problem polega na tym, że nie wiem, w jaki sposób otrzymali nazwę czcionki do pracy z VIM, Courier Newjest wspomniana, ponieważ Courier_Newrównież NSimsunnie ma jej nigdzie w katalogu czcionek. Czcionka, której chcę użyć, to LathaAle nie wiem, jak jej używać w pliku _vimrc. set guifontwide=latha:h12lub set guifontwide=Latha:h12nie działa.

Jeśli pomyślnie ustawię wartość guifontwidena latha, to mój problem zostanie rozwiązany. Jak to zrobić?

Sathish Manohar
źródło
jaka jest wartość 'guifont'i jaka jest wartość 'guifontwide'? Ponadto jakiego systemu operacyjnego używasz i jakiej wersji vim?
Benoit
Sathish, czy byłeś w stanie znaleźć na to jakieś rozwiązanie? Próbuję wpisać gVim z oprogramowaniem eKalappai, ale vim pokazuje tylko mnie? postaci (najwyraźniej zapisując je w ten sam sposób).
sundar - Przywróć Monikę
@sundar Nie. Poddałem się: |
Sathish Manohar
Mój problem polegał na tym, że inconsolata-g nie obsługuje znaków utf-8 w moim dokumencie.
AndrewPK
U set guifontwide=NSimsun:h12mnie się nie udaje, wyświetla się komunikat „Nieprawidłowa szeroka czcionka”, prawdopodobnie ten sam problem, który nie dotyczy stałej szerokości?
mikew

Odpowiedzi:

61

Spróbuj ponownie załadować dokument za pomocą:

:e! ++enc=utf8

Jeśli to zadziała, może powinieneś zmienić fileencodingsustawienia w swoim .vimrc.

Benoit
źródło
2
Dla mnie to nic nie zmienia
Thomas Levesque
8
NIE uruchamiaj tego przed zapisaniem swojej pracy, ponieważ spowoduje to wymazanie wprowadzonych zmian. :ujednak cię uratuje.
Również to ustawia plik do odczytu tylko wtedy, gdy to zrobisz, więc musisz również uruchomić:set noro
Matt Vukomanovic,
2
Dzięki za to. Vim nie renderował utf-8 w moim przypadku, ponieważ miałem blok danych binarnych (część wieloczęściowa / załącznik danych formularza). Kiedy to zrobiłem :e! ++enc=utf8, wyrenderował utf-8, ale narzekał [ILLEGAL BYTE in line 286](pierwsza linia części binarnej) w pliku. Domyślam się, że domyślnym zachowaniem jest cichy powrót do innego kodowania, gdy dzieje się to podczas otwierania Vima. Z jakiegoś powodu jednak echo &encnadal raportuje utf-8 w tym przypadku.
Dmitry Minkovsky
1
@DmitryMinkovsky, &encto kodowanie , którego Vim używa wewnętrznie do przechowywania zawartości bufora. Ustawienie, które zawiera kodowanie dla bieżącego pliku to&fenc
Benoit
60

Próbowałeś

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

?

Maxim Sloyko
źródło
5
Próbowałem z obydwoma tymi ustawieniami i nadal nie widzę znaków utf-8.
Sathish Manohar
1
-1. Właściwie to nie może działać. Żadna z tych opcji nie załaduje ponownie pliku. Pierwsza z nich zmodyfikuje sposób, w jaki vim przechowuje bufory (i inne rzeczy) wewnętrznie, druga określi, że chcesz zmienić kodowanie pliku, który jest już załadowany do bufora, co zostanie zastosowane podczas zapisywania.
Benoit
:set encoding=utf8 Odświeży bufor i jeśli problem był w nieprawidłowym kodowaniu, naprawi go. Dodałem set fileencoding=utf8opcję, więc nie napotkasz najbardziej zagmatwanego błędu „Nie można przekonwertować niektórych znaków” podczas zapisywania.
Maxim Sloyko,
kodowanie zestawu zadziałało. Dodałem set encoding = utf8 do pliku .vimrc i teraz wszystko jest w porządku z utf8.
Alexander Kim
Na OSX dodałem te dwie linie (bez dwukropków) do mojego ~/.vimrci działało dobrze
lionello
7

Jeśli przyjeżdżają tu Japończycy, dodaj następujące wiersze do swojego ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
kujiy
źródło
6

W systemie Microsoft Windows gvim nie pozwala na wybór czcionek o stałej szerokości. Niestety Latha nie jest czcionką o stałej szerokości.

Jest na to sposób: użyj FontForge (możesz pobrać plik binarny Windows z http://www.geocities.jp/meir000/fontforge/ ), aby edytować Latha.ttf i oznaczyć go jako czcionkę o stałej szerokości. Robiąc tak:

  1. Załaduj fontforge, wybierz latha.ttf.
  2. Menu: Element -> Informacje o czcionce
  3. Wybierz „OS / 2” z listy po lewej stronie w oknie dialogowym Informacje o czcionce
  4. Wybierz kartę „Panose”
  5. Ustaw proporcję = o stałej szerokości
  6. Zapisz nową wersję TTF tej czcionki, wypróbuj ją!

Powodzenia!

Yi Zhao
źródło
1
Nie mogłem zmienić czcionki latha na monospace. Dokładnie wykonałem twoje kroki, ale zapisany plik nadal nie działa jako czcionka o stałej szerokości :(
Sathish Manohar
1
@Sathish Manohar 1) nadpisz istniejący plik TTF, zrestartuj system Windows i wypróbuj. lub 2) możesz zapisać TTF do nowego pliku i zmodyfikować nazwę czcionki. Zainstaluj nowy plik TTF. Ta nowa czcionka powinna być dostępna na Twojej liście.
Yi Zhao,
Po tych wszystkich latach (7 latach) dostępnych jest kilka darmowych czcionek dla VIM. Czcionki Google Noto google.com/get/noto ; i Iosveka github.com/be5invis/Iosevka/releases są bardzo dobrymi alternatywami do oceny.
Yi Zhao,
3

W systemie Linux otwórz plik konfiguracyjny VIM

$ sudo -H gedit /etc/vim/vimrc

Dodano następujące wiersze:

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

Zapisz i wyjdź, a polecenie terminala:

$ source /etc/vim/vimrc

W tym czasie VIM będzie poprawnie wyświetlał język chiński.

Paul Chen
źródło
2

Czy ten problem został w międzyczasie rozwiązany?

Miałem problem z tym, że gvim nie wyświetlał wszystkich znaków Unicode (ale tylko podzbiór, w tym umlauty i znaki akcentowane), podczas gdy :set guifont?był pusty; zobacz moje pytanie . Po przeczytaniu tutaj ustawienie guifontrozsądnej wartości naprawiło to za mnie. Jednak nie potrzebuję znaków powyżej 2 bajtów.

Tobias
źródło
1
Jaka jest rozsądna wartość dla guifont? Co włożyłeś?
Christian
W tej odpowiedzi wymieniłem wartości, które mi pomogły .
Tobias
2

Nie mogłem pobrać żadnych innych czcionek, które zainstalowałem, aby pojawiły się w moim edytorze Windows GVim, więc właśnie przełączyłem się na Lucida Consolektóry ma przynajmniej nieco lepszą obsługę UTF-8. Dodaj to na końcu swojego _vimrc:

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

Teraz widzę przynajmniej kilka znaków UTF-8.

Ryan Shillington
źródło
w moim przypadku cANSI musiało zostać zmienione na cGREEK (Edit -> Select Font ... in GVim), z czcionką Consolas, aby poprawnie wyświetlić plik tekstowy zakodowany w UTF-8 z
greckimi
1

W systemie Windows gvim po prostu wybierz czcionkę „Lucida Console”.

Alex Dvoretskiy
źródło