Wyjście wyświetlania Vima z tekstem

9

Zastanawiam się, czy istnieje podobne polecenie :TOhtml, ale tylko dla zwykłego tekstu i reprezentujące cały ekran Vima.

Na przykład, biorąc pod uwagę wyświetlacz:

wprowadź opis zdjęcia tutaj

Utworzyłby następujący plik tekstowy:

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

(dokonano tego poprzez kopiowanie / wklejanie z terminala i ręczne formatowanie tekstu)

Nie znalazłem takiej możliwości, myślę, że nie ma takiej możliwości.

Jak, jeśli to możliwe, Vim może to osiągnąć?

nobe4
źródło
1
Hmm Nie wydaje mi się, aby Vim mógł „zobaczyć” własne okno (czyli powyższy zrzut ekranu, w przeciwieństwie do zawartości buforów). Jak ciekawie.
Sato Katsura,
Moim zdaniem nie stanowi to problemu vi, ale terminala - co prawda nie różni się zbytnio od używania myszy! gnome-terminalmogę „zaznaczyć wszystko”, ale nie sprawdziłem, czy trzeba ponownie sformatować po wklejeniu. Na innym sprzęcie chciałbym coś, co zrzuciło całe (przewijalne) okno do pliku!
Ustawa 29
Możesz użyć myszy, aby wybrać cały ekran, w tym nazwy kart u góry, a także pasek stanu u dołu i kliknąć prawym przyciskiem myszy na zewnątrz, aby wkleić skopiowany ekran. To zadziałało dla mnie. Użyłem 7.2 vima w Linuksie.
SibiCoder,

Odpowiedzi:

5

Tak, jest na to sposób! Możesz użyć tej screenchar()funkcji. Od: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.

Aby użyć tego w skrypcie, możesz wykonać następujące czynności:

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

Ten cudowny vimscript został napisany przez Christiana Brabandta , więc jeśli uznasz to za przydatne, napisz mu opinię.

Oto przykład tego w akcji. Kiedy uruchomiłem tę funkcję w oknie vima:

wprowadź opis zdjęcia tutaj

Mam ten tekst:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
James
źródło