Hinweis: Der folgende Inhalt wurde nur mit Kaori Ya Version Vim 7.3.865 (Version 2013/03/17) bestätigt.
Wenn in der Python 3-Oberfläche von Vim eine Zeichenfolge in der ersten Zeile des Puffers angezeigt wird, wenn die Zeichenfolge "abcde" ist
py3 text = "abcde"
py3 import vim
py3 vim.eval('setline(1, "{}")'.format(text))
Ist in Ordnung, aber wenn Sie eine japanische Zeichenfolge anzeigen möchten, z. B. "aiueo",
py3 text = "\u3042\u3044\u3046\u3048\u304A" # == "AIUEO"
py3 import vim
py3 vim_encoding = vim.eval("&encoding")
py3 vim.eval('setline(1, "{}")'.format(''.join([r"\x{:02x}".format(x) for x in text.encode(vim_encoding)])))
Ich musste. Es ist ein Ärger.
Der Grund, warum die Anzeige von Japanisch so lange dauert, liegt in der Angabe von vim.eval () der Python 3-Oberfläche.
Die Python 3-Schnittstelle vim.eval () akzeptiert nur Python-Zeichenfolgen als Argumente. Es handelt sich jedoch um eine Mystery-Spezifikation, die diese Zeichenfolge mit UTF-8 codiert und anschließend mit Vim-Codierung decodiert. Es ist.
Wenn Sie daher eine japanische Zeichenfolge übergeben möchten, codieren Sie die Python-Zeichenfolge (Beispiel: "A") mit Vim-Codierung (Beispiel: b '\ x82 \ xa0') und anschließend mit hexadezimaler Escapezeichenfolge. (Beispiel: '\\ x82 \\ xa0'), konvertieren Sie es dann in eine Zeichenfolge in doppelten Anführungszeichen und übergeben Sie es an vim.eval () (Beispiel: 'setline (1, "\\ x82 \") Ich musste mir die Mühe machen, \ xa0 ") ').
Vielleicht gibt es einen einfacheren Weg. Wenn jemand es weiß, lass es mich wissen. m (__) m
Recommended Posts