2013-05-11 55 views
0

我需要在Vim中獲得一個屏幕副本。不是緩衝區,窗口,選項卡,而是整個屏幕,即如果終端大小是80x25,那麼我需要一個2000字符的字符串。顏色無關緊要(儘管如果可能的話,我也很樂意收集這些數據)。便攜式解決方案(即僅限vimscript,或者一些python技巧)值得歡迎。如何在Vim中獲取整個屏幕的內容?

+0

如果顏色無關緊要,只需用鼠標或終端仿真器的「全選」功能選擇整個終端窗口並複製即可。 – romainl 2013-05-11 06:53:51

+0

感謝您的建議,但我需要使用腳本來完成此操作,而不是手動完成。 Vimscript,python並不重要。 – alx 2013-05-11 06:59:28

+0

你應該在你的問題中這樣說。 – romainl 2013-05-11 07:40:45

回答

1

ScreenShot plugin允許你做出當前Vim視圖的副本(所有窗口分割,狀態行,等等,包括語法突出顯示),其爲HTML文件。

您可能可以「降級」實現以生成簡單的文本,或將生成的HTML後處理爲文本。

+0

出色的起點來創造我所需要的。非常感謝你! – alx 2013-05-19 16:12:56

0

我不確定這是不是你想要的,而且我不確定你想要如何處理字符串。

但是,這是一個函數,它返回字符串列表中每個窗口的可見文本。它使用w0w$行標記提取可見範圍,並將範圍抽出以註冊a,並將返回的列表中的寄存器轉儲。 (現有的寄存器被保存並在結束恢復。)

function! WindowStrings() 
    let areg = getreg('a') 
    let atype = getregtype('a') 
    let strings = [] 
    windo exe ':' . line("w0") . ',' . line("w$") . 'yank a' | 
     \ call add(strings,getreg('a')) 
    call setreg('a',areg,atype) 
    return strings 
endfunction 
+0

謝謝你的代碼。這是我想避免的難題,因爲它必須擴展到包括狀態行,標籤,窗口分隔符,摺疊列,行號(如果啓用了這些功能),即從頭開始繪製整個屏幕。 – alx 2013-05-11 08:45:16