Hiển thị Vim thành văn bản


9

Tôi tự hỏi nếu có bất kỳ lệnh tương tự :TOhtml, nhưng chỉ cho văn bản đơn giản và đại diện cho toàn bộ màn hình Vim.

Ví dụ, được hiển thị:

nhập mô tả hình ảnh ở đây

Nó sẽ tạo tập tin văn bản sau:

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

(điều này đã được thực hiện thông qua sao chép / dán từ thiết bị đầu cuối và định dạng văn bản theo cách thủ công)

Tôi không tìm thấy bất kỳ lựa chọn nào để làm như vậy, tôi nghĩ là không có.

Làm thế nào, nếu có thể, Vim có thể đạt được điều này?


1
Hừm. Tôi không nghĩ có cách nào để Vim "nhìn" cửa sổ của chính nó (nghĩa là ảnh chụp màn hình của bạn ở trên, trái ngược với nội dung của bộ đệm). Thật tò mò làm sao.
Sato Katsura

Đối với tôi, đó không phải là vấn đề vi, nhưng đối với thiết bị đầu cuối - điều được thừa nhận là không khác lắm so với sử dụng chuột! gnome-terminalcó thể "chọn tất cả", nhưng tôi chưa kiểm tra bạn cần định dạng lại sau khi dán. Trên một chiến thuật khác, tôi sẽ thích một cái gì đó đổ toàn bộ cửa sổ (có thể cuộn) vào một tập tin!
Luật29

Bạn có thể sử dụng chuột để chọn toàn bộ màn hình, bao gồm tên tab ở trên cùng cũng như thanh trạng thái ở dưới cùng và nhấp chuột phải bên ngoài để dán màn hình đã sao chép. Điều này làm việc cho tôi. Tôi đã sử dụng 7.2 vim trong Linux.
SibiCoder

Câu trả lời:


5

Vâng, có một cách để làm điều này! Bạn có thể sử dụng screenchar()chức năng. Từ: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.

Để sử dụng điều này trong một tập lệnh, bạn có thể làm như sau:

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

Đoạn vimscript đáng yêu này được viết bởi Christian Brabandt , vì vậy nếu bạn thấy nó hữu ích, hãy đưa cho anh ấy một upvote.

Đây là một ví dụ về nó trong hành động. Khi tôi chạy chức năng này trên cửa sổ vim của mình:

nhập mô tả hình ảnh ở đây

Tôi đã nhận được văn bản này:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.