2011-05-27 14 views
5

Los oficiales interfaz de Python Vim documentation estados, que la modificación de los tampones con Python es muy simple, básicamente:¿Cómo modificar un buffer Vim con un script python?

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

Sin embargo, Python lanza una excepción, cuando trato de hacer eso:

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

Leer -solo acceso (por ejemplo, :py print vim.current.buffer[0] funciona bien. ¿Me falta algo aquí? ¿Por qué no puedo modificar los buffers de vim con scripts de Python?

[Nota: estoy usando el reciente Vim 7.3]

Respuesta

3

Funciona para mí, "Hello World" se inserta en el búfer. ¿Es el vim compilado con +python

estoy usando la versión 7.3.162

EDITAR

busca en el registro de Hg para if_python.c veo un lote cuestiones relacionadas con la pitón, por ejemplo, este:

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) 

¿En qué versión estás?

+0

Sí, lo es. El acceso de solo lectura (por ejemplo ': py print vim.current.buffer [0]' funciona bien. –

+0

Estoy confundido, solo para estar seguro, el problema es cuando intentas hacer 'buffer [0] =" hola world "'? –

+0

Me has convencido de que entiendo la API correctamente, y hay algunos errores en mi Vim y/o Python. Solo para completar, puedo reproducir este error en el último Vim 7.3.206. el resto pertenece a los rastreadores de errores, no a StackOverflow. –

0

Esto puede ser un problema de codificación. Me encontré con un caso de uso muy similar (pero no idéntico), p. dentro de una función vim pitón:

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. 

sin forzarlo en UTF-8, tengo la misma excepción, que creo que tiene que ver con la forma en vim maneja por defecto de Python (para mí) las cuerdas US-ASCII. Después de convertir a utf-8, funciona bien. Espero que esto ayude.

Cuestiones relacionadas