2013-05-11 22 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