2011-05-27 11 views
5

Gli ufficiali un'interfaccia Python Vim documentation stati, che modifica i buffer con Python è molto semplice, in fondo:Come modificare un buffer Vim con uno script python?

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

Tuttavia, python genera un'eccezione, quando cerco di farlo:

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

Leggi -accesso solo (ad esempio, :py print vim.current.buffer[0] funziona bene.Mi manca qualcosa qui? Perché non posso modificare i buffer vim con script python?

[Nota: sto usando recente Vim 7.3]

risposta

3

Funziona per me, "Hello World" è inserito nel buffer. È il vostro vim compilato con +python

Sto utilizzando la versione 7.3.162

EDIT

guardando nel registro Hg per if_python.c Vedo un sacco questioni relative a Python, per esempio questo:

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) 

In quale versione sei?

+0

Sì, lo è. Accesso in sola lettura (ad esempio ': py print vim.current.buffer [0]' funziona bene. –

+0

Sono confuso, tanto per essere sicuro, il problema è quando si tenta di fare 'buffer [0] =" ciao world "'? –

+0

Mi hai convinto di aver capito correttamente l'API, e ci sono alcuni bug nel mio Vim e/o Python. Solo per completezza, posso riprodurre questo bug nell'ultimo Vim 7.3.206. il resto appartiene ai tracker dei bug, non a StackOverflow. –

0

Questo potrebbe essere un problema di codifica. Ho riscontrato un caso d'uso molto simile (ma non identico), ad es. all'interno di una funzione vim pitone:

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. 

senza forzare in UTF-8, ottengo la stessa eccezione, che credo è legato al modo in vim gestisce default di python (per me) le stringhe US-ASCII. Dopo la conversione in utf-8 funziona perfettamente. Spero che aiuti.

Problemi correlati