Output Vim display to Text


9

Mi chiedo se esiste un comando simile a :TOhtml, ma solo per il testo semplice e che rappresenta l'intero display Vim.

Ad esempio, dato il display:

inserisci qui la descrizione dell'immagine

Creerebbe il seguente file di testo:

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

(questo è stato fatto tramite copia / incolla dal terminale e formattando manualmente il testo)

Non ho trovato alcuna opzione per farlo, penso che non ce ne sia.

In che modo Vim può raggiungere questo obiettivo?


1
Hmm. Non credo che Vim abbia modo di "vedere" la propria finestra (ovvero lo screenshot sopra, al contrario del contenuto dei buffer). Che curioso.
Sato Katsura,

A mio avviso, questo non è un problema vi, ma per il terminale, che certamente non è molto diverso dall'uso del mouse! gnome-terminalposso "selezionare tutto", ma non ho verificato la necessità di riformattare dopo averlo incollato. Su un'altra virata, mi piacerebbe qualcosa che ha scaricato l'intera finestra (scorrevole) in un file!
Legge 29

È possibile utilizzare il mouse per selezionare l'intero schermo, inclusi i nomi delle schede in alto, nonché la barra di stato in basso e fare clic con il pulsante destro del mouse all'esterno per incollare lo schermo copiato. Questo ha funzionato per me. Ho usato 7.2 vim in Linux.
SibiCoder,

Risposte:


5

Sì, c'è un modo per farlo! Puoi usare la screenchar()funzione. A partire dal: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.

Per usarlo in uno script, puoi fare quanto segue:

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

Questo adorabile pezzo di vimscript è stato scritto da Christian Brabandt , quindi se lo trovi utile vai a dargli un voto.

Ecco un esempio in azione. Quando ho eseguito questa funzione sulla mia finestra di VIM:

inserisci qui la descrizione dell'immagine

Ho ricevuto questo testo:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.