Exibir saída Vim para texto

9

Gostaria de saber se existe algum comando semelhante :TOhtml, mas apenas para texto simples e representando toda a exibição do Vim.

Por exemplo, dada a exibição:

insira a descrição da imagem aqui

Ele criaria o seguinte arquivo de texto:

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

(isso foi feito via copiar / colar do terminal e formatar manualmente o texto)

Não encontrei nenhuma opção, acho que não há.

Como, se possível, o Vim pode conseguir isso?

nobe4
fonte
11
Hmm. Eu não acho que exista alguma maneira de o Vim "ver" sua própria janela (ou seja, sua captura de tela acima, em oposição ao conteúdo dos buffers). Que curioso.
Sato Katsura
Na minha opinião, isso não é um problema para vi, mas para o terminal - que reconhecidamente não é muito diferente de usar o mouse! gnome-terminalpode "selecionar tudo", mas não verifiquei se você precisa reformatar após colar. Em outra tática, eu adoraria algo que jogasse toda a janela (rolável) em um arquivo!
precisa saber é o seguinte
Você pode usar o mouse para selecionar a tela inteira, incluindo os nomes das guias na parte superior e a barra de status na parte inferior e clique com o botão direito do mouse fora para colar a tela copiada. Isso funcionou para mim. Eu usei o 7.2 vim no Linux.
precisa saber é o seguinte

Respostas:

5

Sim, existe uma maneira de fazer isso! Você pode usar a screenchar()função De: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.

Para usar isso em um script, você pode fazer o seguinte:

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()

Esta adorável peça de vimscript foi escrita por Christian Brabandt ; portanto, se você achar útil, dê a ele um voto positivo.

Aqui está um exemplo disso em ação. Quando executei esta função na minha janela do vim:

insira a descrição da imagem aqui

Eu recebi este texto:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
James
fonte