将Vim输出显示为文本


9

我想知道是否有任何类似于的命令:TOhtml,但仅用于纯文本并代表整个Vim显示。

例如,给定显示:

在此处输入图片说明

它将创建以下文本文件:

  1 B                         1 a                     
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
 N  <me] [+]      100% 1:1  ~                         
  1 a                       ~                         
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
~                           ~                         
 N  <me] [+]      100% 1:1   N  <e] [+]      100% 1:1 

(这是通过从终端复制/粘贴并手动设置文本格式来完成的)

我没有找到任何选择,我认为没有选择。

如果可能的话,Vim如何做到这一点?


1
嗯 我认为Vim无法通过任何方式“查看”其自己的窗口(即您上面的屏幕截图,而不是缓冲区的内容)。真好奇
佐藤桂

在我看来,这vi对终端不是问题,但对于终端而言,这与使用鼠标并没有太大区别!gnome-terminal可以“全选”,但我尚未检查您是否需要在粘贴后重新格式化。另一方面,我希望将整个(可滚动)窗口转储到文件中的内容!
Law29 2016年

您可以使用鼠标选择整个屏幕,包括顶部的选项卡名称以及底部的状态栏,然后在外部右键单击以粘贴复制的屏幕。这对我有用。我在Linux中使用7.2 vim。
SibiCoder

Answers:


5

是的,有一种方法可以做到!您可以使用该screenchar()功能。从:help screenchar()

screenchar(row, col)                        *screenchar()*
        The result is a Number, which is the character at position
        [row, col] on the screen.  This works for every possible
        screen position, also status lines, window separators and the
        command line.  The top left position is row one, column one
        The character excludes composing characters.  For double-byte
        encodings it may only be the first byte.
        This is mainly to be used for testing.
        Returns -1 when row or col is out of range.

要在脚本中使用它,您可以执行以下操作:

fu! ScreenCapture()
    let array=[]
    for i in range(1,&lines)
        let row=''
        for j in range(1,&columns)
            let row.=nr2char(screenchar(i,j))
        endfor
        call add(array, row)
    endfor
    tabnew
    call setline(1,array)
endfu
com! ScreenCapture :call ScreenCapture()

这段可爱的抄本是克里斯蒂安·布拉班德Christian Brabandt)撰写的,因此,如果您觉得有用,请给他投票。

这是一个实际的例子。当我在vim窗口上运行此函数时:

在此处输入图片说明

我收到此文字:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.