2011-05-27 17 views
5

Oficjalne interfejsu Python Vim documentation stwierdza, że ​​modyfikując bufory z Python jest bardzo prosta, w zasadzie:Jak zmodyfikować bufor Vima za pomocą skryptu Pythona?

:py import vim 
:py vim.current.buffer[0] = "Hello world" 

Jednak pyton zgłasza wyjątek, gdy próbuję to zrobić:

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
TypeError: bad argument type for built-in operation 

Read -tylko dostęp (np. :py print vim.current.buffer[0] działa dobrze.Jak tu brakuje czegoś tutaj? Dlaczego nie mogę zmodyfikować buforów vim za pomocą skryptów Pythona?

[Uwaga: używam najnowszego Vim 7.3]

Odpowiedz

3

Działa dla mnie, "Hello World" jest wstawiany do bufora. Czy Twój vim skompilowana z +python

używam wersji 7.3.162

EDIT

patrząc w dzienniku Hg if_python.c Widzę problemy związane z partii, np pytona ten:

changeset: 2641:b803b2776880 
tag:   v7-3-062 
user:  Bram Moolenaar <[email protected]> 
date:  Tue Nov 16 19:26:02 2010 +0100 
files:  src/auto/configure src/configure.in src/if_python.c src/if_python3.c src/version.c 
description: 
updated for version 7.3.062 
Problem: Python doesn't work properly when installed in another directory 
     than expected. 
Solution: Figure out home directory in configure and use Py_SetPythonHome() 
     at runtime. (Roland Puntaier) 

W której wersji jesteś?

+0

Tak, jest. Dostęp tylko do odczytu (np. ': Py print vim.current.buffer [0]' działa dobrze. –

+0

Jestem zdezorientowany, po prostu, aby upewnić się, problem jest, gdy próbujesz zrobić 'buffer [0] =" hello świat "? –

+0

Przekonałeś mnie, że rozumiem API poprawnie, i jest jakiś błąd w moim Vimie i/lub pytonie, tylko ze względu na kompletność, mogę odtworzyć ten błąd w najnowszym Vim 7.3.206. reszta należy do śledzenia błędów, a nie do StackOverflow. –

0

Może to być problem z kodowaniem. Wpadłem na bardzo podobny (ale nie identyczny) przypadek użycia, np. wewnątrz funkcji vim Pythona:

buf = vim.current.buffer 
names = [x.name for x in triggers] #encoded as a default python unicode, e.g. u'foo' 
names = [x.encode('utf-8') for x in names] # Force to utf-8 
buf[:] = names #Now this works. 

bez zmuszania go na UTF-8, uzyskać ten sam wyjątek, który moim zdaniem jest związane, jak uchwyty vim domyślne Pythona (dla mnie) sznury US-ASCII. Po konwersji na utf-8 działa dobrze. Mam nadzieję, że to pomoże.

Powiązane problemy