2011-10-20 62 views
0

我正在嘗試編寫一個可以自動運行vim的python腳本,但是python vim界面並沒有給我足夠的權力去做我需要的一切。我想與vim溝通,就好像我的腳本是tty(能夠發出「視覺模式」指令等)。就vim而言,我的腳本是一個運行xterm(或其他)的人。這可以在python中構建我自己的終端模擬器嗎?「腳本編寫」使用Python的粒度更大的Vim

+1

你不能像':exec「正常V2jx」'從該Python接口? – ninjalj

回答

1

所有非vim腳本接口大罵:與VIM通信(除非你想編輯/得到一個緩衝區,可使用緩衝對象的內容)的executevim.command(string)在python)和eval的唯一途徑(vim.eval(string) python),都需要序列化參數。如果你想剛開始的視覺模式使用

vim.command("normal! V") 

vim.eval("feedkeys('V')") 

。但是,如果你想,例如,要返回一些值的來電功能,你將不得不使用

import json 
# Some code that puts result into variable r 
# This won't work if r contains non-unicode strings, 
# you will have to write your own serializer in this case. 
# As far as I know, it will also fail if some characters in the string 
# can be represented only using surrogate pairs. 
vim.command("let reply=".json.dumps(r)) 
# Now in the caller function variable l:reply is defined