2010-08-23 55 views
2

我剛開始圍繞vim + python腳本(沒有使用本地vim腳本的經驗)打包頭。在Vim-embedded python腳本中打開一個新窗口

如何打開一個新窗口來包含來自後臺進程的stdout?

目前,閱讀一些經過:幫助蟒蛇,我看到的唯一的選擇是一樣的東西:

cmd = ":bel new" 
vim.command(cmd) 
+0

確定你的意思是窗口?一個窗口只是一個到緩衝區的視口。例如,你是否想將當前窗口分成兩部分,並將某些命令的stdout加載到此窗口中的新緩衝區中? – Sarah 2010-11-03 10:43:44

+0

@Sarah:我也注意到了,但不知道如何更好地表達它。你說的後者是有道理的。 – 2010-11-03 11:01:18

+0

在這種情況下,不需要使用腳本。所有你需要做的是:新的+讀\!升...記得要逃避所有的空間。 :新的窗口分裂,創建一個空的緩衝區並運行讀取。用有用的東西替換ls。 – Sarah 2010-11-03 11:10:49

回答

3

由於vim.command可以執行大部分(如果不是全部?)ex命令,你可以簡單地從內調用:new +read!ls它。

:new拆分當前窗口並將新的(空的,無名稱)緩衝區放入上部窗口。它需要一個參數,我們用這個參數來執行read!cmd,這個參數讀取緩衝區中爆炸後的cmd的stdout。要知道,你需要逃避你的命令空間與\

總而言之,你得到vim.command("new +read!cmd")

:python vim.command("new +read!ls") 

在當前目錄的內容讀入一個新的緩衝區中的cichew,水平分割窗口。

如果你要處理的特殊字符轉義,可以考慮使用python的re.escape():

:py import re;vim.command("new +read!"+re.escape("ls Dire*")) 

這應該足以滿足大多數情況下。如果有疑問,請檢查其文檔並將其與您的shell進行比較。

+0

不處理轉義,但確實回答了大部分問題。這個問題看起來不太可能得到更多的關注,所以我獎勵了獎金。 – 2010-11-05 14:08:35

相關問題