官方的Vim python接口documentation声明,使用python修改缓冲区非常简单,基本上是:
:py import vim
:py vim.current.buffer[0] = "Hello world"
但是,当我尝试这样做时,python会抛出异常:
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]
工作正常。我在这里遗漏了什么吗?为什么我不能用python脚本修改vim缓冲区?
[注意:我正在使用最近的Vim 7.3]
答案 0 :(得分:3)
为我工作,“Hello World”插入缓冲区。你的vim是用+python
我使用的是7.3.162版本
修改强>
在hg日志中查找if_python.c
我看到很多与python相关的问题,例如这一个:
changeset: 2641:b803b2776880
tag: v7-3-062
user: Bram Moolenaar <bram@vim.org>
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)
你在哪个版本?
答案 1 :(得分:0)
这可能是编码问题。我遇到了一个非常相似(但不完全相同)的用例,例如:在vim python函数中:
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如何处理python的默认(对我来说)us-ascii字符串有关。转换为utf-8后,它运行正常。我希望这会有所帮助。