Salida de pantalla Vim a texto

9

Me pregunto si hay algún comando similar a :TOhtml, pero solo para texto sin formato y que represente toda la pantalla de Vim.

Por ejemplo, dada la pantalla:

ingrese la descripción de la imagen aquí

Crearía el siguiente archivo de texto:

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

(esto se ha realizado mediante copiar / pegar desde el terminal y formatear manualmente el texto)

No encontré ninguna opción para hacerlo, creo que no hay ninguna.

¿Cómo, si es posible, puede Vim lograr esto?

nobe4
fuente
1
Hmm No creo que Vim tenga alguna forma de "ver" su propia ventana (es decir, su captura de pantalla anterior, a diferencia del contenido de los buffers). Que curioso
Sato Katsura
En mi opinión, eso no es un problema vi, sino para el terminal, que ciertamente no es muy diferente del uso del mouse. gnome-terminalpuede "seleccionar todo", pero no he verificado si necesita reformatear después de pegar. En otra táctica, ¡me encantaría algo que volcara toda la ventana (desplazable) a un archivo!
Ley29
Puede usar su mouse para seleccionar toda la pantalla, incluidos los nombres de las pestañas en la parte superior, así como la barra de estado en la parte inferior y haga clic derecho afuera para pegar la pantalla copiada. Esto funcionó para mí. Usé 7.2 vim en Linux.
SibiCoder

Respuestas:

5

¡Sí, hay una manera de hacer esto! Puedes usar la screenchar()función. Desde: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 esto en un script, puede hacer lo siguiente:

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 hermosa pieza de vimscript fue escrita por Christian Brabandt , así que si te resulta útil, dale un voto positivo.

Aquí hay un ejemplo de ello en acción. Cuando ejecuté esta función en mi ventana vim:

ingrese la descripción de la imagen aquí

Recibí 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
fuente