Ausgabe der Vim-Anzeige in Text

9

Ich frage mich, ob es einen ähnlichen Befehl gibt :TOhtml, aber nur für einfachen Text, der die gesamte Vim-Anzeige darstellt.

Zum Beispiel angesichts der Anzeige:

Geben Sie hier die Bildbeschreibung ein

Es würde die folgende Textdatei erstellen:

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

(Dies wurde durch Kopieren / Einfügen vom Terminal und manuelles Formatieren des Textes durchgeführt.)

Ich habe keine Option dafür gefunden, ich denke, es gibt keine.

Wie kann Vim dies nach Möglichkeit erreichen?

nobe4
quelle
1
Hmm. Ich glaube nicht, dass es für Vim eine Möglichkeit gibt, ein eigenes Fenster zu "sehen" (dh Ihren Screenshot oben im Gegensatz zum Inhalt der Puffer). Wie neugierig.
Sato Katsura
Meiner Meinung nach ist das kein Problem für vi, sondern für das Terminal - was sich zugegebenermaßen nicht sehr von der Verwendung der Maus unterscheidet! gnome-terminalkann "alle auswählen", aber ich habe nicht überprüft, ob Sie nach dem Einfügen neu formatieren müssen. Auf einer anderen Seite würde ich etwas lieben, das das gesamte (scrollbare) Fenster in eine Datei kopiert!
Law29
Sie können mit der Maus den gesamten Bildschirm auswählen, einschließlich der Registerkartennamen oben sowie der Statusleiste unten, und mit der rechten Maustaste nach außen klicken, um den kopierten Bildschirm einzufügen. Das hat bei mir funktioniert. Ich habe 7.2 vim unter Linux verwendet.
SibiCoder

Antworten:

5

Ja, es gibt eine Möglichkeit, dies zu tun! Sie können die screenchar()Funktion verwenden. Von: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.

Um dies in einem Skript zu verwenden, können Sie Folgendes tun:

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

Dieses schöne Stück Vimscript wurde von Christian Brabandt geschrieben . Wenn Sie es also nützlich finden, geben Sie ihm eine positive Bewertung.

Hier ist ein Beispiel dafür in Aktion. Als ich diese Funktion in meinem vim-Fenster ausführte:

Geben Sie hier die Bildbeschreibung ein

Ich habe diesen Text bekommen:

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