2011-05-07 131 views
0

我寫了一個非常簡單的vim插件和python腳本,試圖測試兩者之間的一些通信。我的vim的腳本是這樣的:python腳本發送命令給vim(mvim)

function! HelloWorld() 
    silent :!python helloworld.py 
endf 

nmap <C-P> :call HelloWorld()<CR> 

然後我的python腳本是這樣的:

import os; 

os.system('mvim --servername VIM -u NONE -U NONE --remote-send \"<C-\\\\><C-N>:echo \'Hello World!\'<CR>\"') 

如果我在vim然後按下,用 「:調用的HelloWorld()」 命令,或只需從同一個或另一個mvim或vim實例中輸入「:!python helloworld.py」,什麼都不會發生。但是,如果我單獨從命令行調用腳本,則mvim會進行相應的響應:顯示「Hello World!」沿着底部。

有沒有人有任何想法,爲什麼它從vim調用時不工作?

+0

好奇你爲什麼稱它爲mvim而不是gvim? – Keith 2011-05-07 20:16:33

+0

我認爲mvim是macvim的縮寫形式http://code.google.com/p/macvim/ – bernie 2011-05-07 20:26:46

+0

您是否知道您可以重新編譯Vim,使其在內部與Python接口?在命令行中不需要靈活運行Python;與內置支持接口更容易,更快,更靈活和強大,只需要重新編譯Vim。在':h python'查看幫助。 – 2011-05-08 15:22:36

回答

3

嘗試用

silent :!(sleep 0.5s && python helloworld.py) & 
redraw! 

替換

silent :!python helloworld.py 

(該點在返回到VIM遠程命令到達之前)。如果有效,那麼問題是在接收shell輸出時處理遠程命令。您也可以嘗試另一種解決方法:

call system('python helloworld.py') 

call system('python helloworld.py &') 

pyfile helloworld.py 

(注意,最後一個需要的Vim +蟒蛇功能編譯,也改變了蟒蛇的狀態vim使用的解釋器)。

順便說一下,如果您不想看到腳本輸出,請使用system()而不是!。在silent !之後也使用redraw!

+0

原來是一個愚蠢的錯字...錯誤的腳本名稱。不過,我仍試圖將其改爲使用「system()」。 Vim告訴我,如果我以這種方式啓動系統,系統不是一個命令。你能給我一個例子,看看這條線應該是什麼樣的(重繪和一切)?我不完全理解你在暗示什麼 – drewag 2011-05-07 23:29:37

+0

@drewag我忘記了'system()'前面的'call'。更新。重繪線很簡單:只需在'silent!...'之後的下一行放置'redraw!'即可。 – ZyX 2011-05-08 06:53:58