Anzeigen von UTF-8-Zeichen in VIM oder Gvim

106

Ich arbeite von Zeit zu Zeit an Webseiten mit nicht-englischen Skripten. Die meisten von ihnen verwenden den Zeichensatz utf-8, VIM und Gvim zeigen UTF-8-Zeichen nicht richtig an.

Verwenden von VIM 7.3.46 unter Windows 7 64-Bit mit set guifont=Monaco:h10in _vimrc

Gibt es eine Möglichkeit, dies zu beheben?

Update: Ich habe gegoogelt und festgestellt, dass es sich um einen set guifontwidezweiten Fallback für regionale Sprachen handelt.

Ich habe die folgenden Zeilen in _vimrc hinzugefügt und die meisten meiner Probleme wurden gelöst.

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

Die obige NSimsun-Schriftart funktioniert für Chinesisch. Das Problem ist, dass ich nicht weiß, wie sie den Schriftnamen für die Arbeit mit VIM erhalten haben. Sie Courier Newwird erwähnt, da sie sich Courier_Newauch NSimsunnirgends im Schriftartenverzeichnis befindet. Die Schriftart, die ich verwenden möchte, ist LathaAber ich weiß nicht, wie ich sie in der _vimrc-Datei verwenden soll. set guifontwide=latha:h12oder set guifontwide=Latha:h12funktioniert nicht.

Wenn ich das erfolgreich auf gesetzt guifontwidehabe latha, ist mein Problem gelöst. Wie geht das?

Sathish Manohar
quelle
Was ist der Wert von 'guifont'und der Wert von 'guifontwide'? Welches Betriebssystem verwenden Sie und welche Version von vim?
Benoit
Sathish, konnten Sie eine Lösung dafür finden? Ich versuche, gVim mit der eKalappai-Software einzugeben, aber vim zeigt es mir nur? Zeichen (anscheinend auf die gleiche Weise speichern).
Sundar - Reinstate Monica
@sundar Nein. Ich habe aufgegeben: |
Sathish Manohar
Mein Problem war, dass inkonsolata-g die utf-8-Zeichen in meinem Dokument nicht unterstützt.
AndrewPK
Die Verwendung set guifontwide=NSimsun:h12schlägt für mich fehl, sagt "Ungültige breite Schrift" wahrscheinlich das gleiche Nicht-Monospace-Problem?
Mikew

Antworten:

61

Versuchen Sie, das Dokument neu zu laden, indem Sie:

:e! ++enc=utf8

Wenn das funktioniert, sollten Sie möglicherweise die fileencodingsEinstellungen in Ihrer .vimrc ändern.

Benoit
quelle
2
Ändert nichts für mich
Thomas Levesque
8
Führen Sie dies NICHT aus, bevor Sie Ihre Arbeit gespeichert haben, da dadurch die von Ihnen vorgenommenen Änderungen gelöscht werden. :uwird dich aber retten.
Auch dies setzt die Datei schreibgeschützt, wenn Sie dies tun, so dass Sie auch dann ausführen müssen:set noro
Matt Vukomanovic
2
Danke dafür. Vim hat in meinem Fall utf-8 nicht gerendert, weil ich einen Block von Binärdaten hatte (mehrteiliger / Formulardaten-Anhangsteil). Als ich das tat :e! ++enc=utf8, hat es das utf-8 gerendert, sich aber [ILLEGAL BYTE in line 286](die erste binäre Teilzeile) in der Datei beschwert . Ich vermute, dass das Standardverhalten darin besteht, stillschweigend auf eine andere Codierung zurückzugreifen, wenn dies beim Öffnen von Vim geschieht. Aus irgendeinem Grund wird echo &encin diesem Fall jedoch immer noch utf-8 gemeldet.
Dmitry Minkovsky
1
@DmitryMinkovsky &encist die Codierung, die vim intern zum Speichern von Pufferinhalten verwendet. Die Einstellung, die die Codierung für die aktuelle Datei enthält, ist&fenc
Benoit
60

Hast du versucht

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

?

Maxim Sloyko
quelle
5
Ich habe es mit beiden Einstellungen versucht und kann immer noch keine utf-8-Zeichen sehen.
Sathish Manohar
1
-1. Eigentlich kann das nicht funktionieren. Keine dieser Optionen lädt die Datei neu. Der erste ändert, wie vim Puffer (und andere Dinge) intern speichert, der zweite gibt an, dass Sie die Codierung einer bereits in einen Puffer geladenen Datei ändern möchten, die beim Speichern angewendet wird.
Benoit
:set encoding=utf8 WILL den Puffer aktualisieren und wenn das Problem in einem falschen Codierung ist, wird es beheben. Ich habe die set fileencoding=utf8Option hinzugefügt, damit beim Speichern nicht der verwirrendste Fehler "Zeichen können nicht konvertiert werden" auftritt.
Maxim Sloyko
Set Codierung funktioniert. Ich habe set encoding = utf8 zur .vimrc-Datei hinzugefügt und jetzt ist alles in Ordnung mit utf8.
Alexander Kim
Unter OSX habe ich diese beiden Zeilen (ohne Doppelpunkte) zu meiner hinzugefügt ~/.vimrcund es hat gut funktioniert
Lionello
7

Wenn Japaner hierher kommen, fügen Sie bitte die folgenden Zeilen hinzu ~/.vimrc

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

Unter Microsoft Windows können Sie mit gvim keine nicht monospaced Schriftarten auswählen. Leider ist Latha eine nicht monospaced Schriftart.

Es gibt einen Hack-Weg, um dies zu erreichen: Verwenden Sie FontForge (Sie können Windows-Binärdateien von http://www.geocities.jp/meir000/fontforge/ herunterladen ), um die Latha.ttf zu bearbeiten und als monospaced Schriftart zu markieren. So machen:

  1. Laden Sie fontforge und wählen Sie latha.ttf.
  2. Menü: Element -> Schriftinfo
  3. Wählen Sie "OS / 2" aus der linken Liste im Dialogfeld "Schriftinfo"
  4. Wählen Sie die Registerkarte "Panose"
  5. Proportion = Monospaced setzen
  6. Speichern Sie die neue TTF-Version dieser Schriftart und probieren Sie sie aus!

Viel Glück!

Yi Zhao
quelle
1
Ich konnte die Latha-Schrift nicht in Monospace ändern. Ich habe Ihre Schritte genau befolgt, aber die gespeicherte Datei funktioniert immer noch nicht als monospaced Schriftart :(
Sathish Manohar
1
@Sathish Manohar 1) Überschreiben Sie die vorhandene TTF-Datei, starten Sie Windows neu und probieren Sie es aus. oder 2) Sie können die TTF in einer neuen Datei speichern und den Schriftnamen ändern. Installieren Sie die neue TTF-Datei. Diese neue Schriftart sollte in Ihrer Liste verfügbar sein.
Yi Zhao
Nach all den Jahren (7 Jahre) später stehen für VIM mehrere kostenlose Schriftarten zur Verfügung. Google Noto-Schriftarten google.com/get/noto ; und Iosveka github.com/be5invis/Iosevka/releases sind sehr gute Alternativen zur Bewertung.
Yi Zhao
3

Öffnen Sie unter Linux die VIM-Konfigurationsdatei

$ sudo -H gedit /etc/vim/vimrc

Folgende Zeilen wurden hinzugefügt:

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

Speichern und beenden und Terminalbefehl:

$ source /etc/vim/vimrc

Zu diesem Zeitpunkt zeigt VIM Chinesisch korrekt an.

Paul Chen
quelle
2

Ist dieses Problem inzwischen gelöst?

Ich hatte das Problem, dass gvim nicht alle Unicode-Zeichen (sondern nur eine Teilmenge, einschließlich der Umlaute und Zeichen mit Akzent) anzeigte , während :set guifont?es leer war. siehe meine Frage . Nachdem ich hier gelesen habe, wurde guifontes für mich behoben , indem ich den Wert auf einen vernünftigen Wert eingestellt habe. Ich benötige jedoch keine Zeichen über 2 Bytes.

Tobias
quelle
1
Was ist ein sinnvoller Wert für Guifont? Was hast du reingesteckt?
Christian
In dieser Antwort habe ich die Werte aufgelistet, die für mich funktioniert haben .
Tobias
2

Ich konnte keine anderen von mir installierten Schriftarten in meinem Windows GVim-Editor anzeigen lassen, daher habe ich einfach zu einer Schriftart gewechselt, Lucida Consoledie zumindest etwas bessere UTF-8-Unterstützung bietet. Fügen Sie dies am Ende Ihres _vimrc:

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

Jetzt sehe ich mindestens einige UTF-8-Zeichen.

Ryan Shillington
quelle
In meinem Fall musste cANSI mit Consolas-Schriftart in cGREEK (Bearbeiten -> Schriftart auswählen ... in GVim) geändert werden, um eine UTF-8-codierte Textdatei mit griechischen Zeichen korrekt
anzuzeigen
1

Unter Windows gvim wählen Sie einfach die Schriftart "Lucida Console".

Alex Dvoretskiy
quelle