2011-05-27 7 views
5

अधिकारी विम अजगर इंटरफ़ेस documentation राज्यों, कि अजगर के साथ बफ़र्स को संशोधित करने के बहुत सरल है, मूल रूप से:एक पायथन स्क्रिप्ट के साथ एक विम बफर को कैसे संशोधित करें?

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

हालांकि, अजगर, एक अपवाद फेंकता है जब मैं ऐसा करने की कोशिश:

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

पढ़ें केवल प्रवेश (उदाहरण के लिए :py print vim.current.buffer[0] ठीक काम करता है। क्या मुझे यहां कुछ याद आ रहा है? मैं पाइथन स्क्रिप्ट के साथ विम बफर क्यों संशोधित नहीं कर सकता?

[नोट: मैं हाल ही में विम 7.3 का उपयोग कर रहा हूं]

उत्तर

3

मेरे लिए काम करता है, "हैलो वर्ल्ड" बफर में डाला जाता है। अपने vim +python

मैं संस्करण का उपयोग कर रहा हूँ 7.3.162

संपादित

if_python.c के लिए एचजी लॉग में देख मैं अजगर, उदा से संबंधित एक बहुत मुद्दों को देखने के साथ संकलित किया गया है यह एक:

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) 

आप किस संस्करण पर हैं?

+0

हाँ, यह है। केवल पढ़ने के लिए उपयोग (जैसे ': py print vim.current.buffer [0] 'ठीक काम करता है। –

+0

मैं उलझन में हूं, बस यह सुनिश्चित करने के लिए, समस्या तब होती है जब आप' बफर [0] =" हैलो करने का प्रयास करते हैं दुनिया "' –

+0

आपने मुझे विश्वास दिलाया है कि मैं एपीआई को सही ढंग से समझता हूं, और मेरे विम और/या पायथन में कुछ बग है। बस पूर्णता के लिए, मैं इस बग को नवीनतम विम 7.3.206 में पुन: उत्पन्न कर सकता हूं। बाकी बग ट्रैकर्स पर है, स्टैक ओवरफ्लो नहीं। –

0

यह एक एन्कोडिंग समस्या हो सकती है। मैंने एक बहुत ही समान (लेकिन समान नहीं) उपयोग केस में भाग लिया है, उदाहरण के लिए एक vim अजगर समारोह के अंदर:

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. 

यह UTF-8 में मजबूर कर के बिना, मैं एक ही अपवाद है, जो मुझे लगता है कि करने के लिए कैसे vim अजगर का डिफ़ॉल्ट (मेरे लिए) संभालती संबंधित है हमें-ascii तार मिलता है। Utf-8 में कनवर्ट करने के बाद यह ठीक काम करता है। आशा है कि ये आपकी मदद करेगा।

संबंधित मुद्दे