Output Vim menampilkan ke Teks

9

Saya ingin tahu apakah ada perintah yang mirip dengan itu :TOhtml, tetapi hanya untuk teks biasa dan mewakili seluruh tampilan Vim.

Misalnya, diberi tampilan:

masukkan deskripsi gambar di sini

Itu akan membuat file teks berikut:

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

(ini telah dilakukan melalui copy / paste dari terminal dan memformat teks secara manual)

Saya tidak menemukan opsi untuk melakukannya, saya pikir tidak ada.

Bagaimana, jika mungkin, dapat Vim mencapai ini?

nobe4
sumber
1
Hmm. Saya tidak berpikir ada cara bagi Vim untuk "melihat" jendelanya sendiri (yaitu, tangkapan layar Anda di atas, yang bertentangan dengan isi buffer). Penasaran sekali.
Sato Katsura
Untuk pikiran saya itu bukan masalah bagi vi, tetapi untuk terminal - yang memang diakui tidak jauh berbeda dengan menggunakan mouse! gnome-terminaldapat "memilih semua", tapi saya belum memeriksa Anda perlu memformat ulang setelah menempel. Pada taktik lain, saya akan menyukai sesuatu yang membuang seluruh jendela (yang dapat digulir) ke sebuah file!
Law29
Anda dapat menggunakan mouse untuk memilih seluruh layar, termasuk nama tab di bagian atas serta bilah status di bagian bawah dan klik kanan di luar untuk menempelkan layar yang disalin. Ini berhasil untuk saya. Saya menggunakan 7.2 vim di Linux.
SibiCoder

Jawaban:

5

Ya, ada cara untuk melakukan ini! Anda dapat menggunakan screenchar()fungsi ini. Dari: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.

Untuk menggunakan ini dalam skrip, Anda dapat melakukan hal berikut:

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

Sepotong vimscript yang indah ini ditulis oleh Christian Brabandt , jadi jika Anda merasa berguna, beri dia dukungan.

Berikut ini contoh tindakannya. Ketika saya menjalankan fungsi ini di jendela vim saya:

masukkan deskripsi gambar di sini

Saya mendapatkan teks ini:

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