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ć?


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.


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

?


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

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!


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.


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.