Afficher l'affichage Vim en texte

9

Je me demande s'il existe une commande similaire à :TOhtml, mais pour le texte brut uniquement et représentant l'ensemble de l'affichage Vim.

Par exemple, étant donné l'affichage:

entrez la description de l'image ici

Cela créerait le fichier texte suivant:

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

(cela a été fait via copier / coller à partir du terminal et formater manuellement le texte)

Je n'ai trouvé aucune option pour le faire, je pense qu'il n'y en a pas.

Comment, si possible, Vim peut-il y parvenir?

nobe4
la source
1
Hmm. Je ne pense pas qu'il existe un moyen pour Vim de "voir" sa propre fenêtre (c'est-à-dire votre capture d'écran ci-dessus, par opposition au contenu des tampons). Comme c'est curieux.
Sato Katsura
À mon avis, ce n'est pas un problème pour vi, mais pour le terminal - qui n'est certes pas très différent de l'utilisation de la souris! gnome-terminalpeut "tout sélectionner", mais je n'ai pas vérifié que vous devez reformater après le collage. Sur un autre point, j'aimerais quelque chose qui a vidé toute la fenêtre (défilante) dans un fichier!
Loi29
Vous pouvez utiliser votre souris pour sélectionner tout l'écran, y compris les noms des onglets en haut ainsi que la barre d'état en bas et cliquer avec le bouton droit à l'extérieur pour coller l'écran copié. Cela a fonctionné pour moi. J'ai utilisé 7.2 vim sous Linux.
SibiCoder

Réponses:

5

Oui, il existe un moyen de le faire! Vous pouvez utiliser la screenchar()fonction. 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.

Pour l'utiliser dans un script, vous pouvez effectuer les opérations suivantes:

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

Ce joli morceau de vimscript a été écrit par Christian Brabandt , donc si vous le trouvez utile, donnez-lui une note positive.

En voici un exemple en action. Lorsque j'ai exécuté cette fonction sur ma fenêtre vim:

entrez la description de l'image ici

J'ai eu ce texte:

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