Вывод Vim на текст

9

Интересно, есть ли какая-либо команда, похожая на :TOhtml, но только для простого текста и представляющая весь дисплей Vim.

Например, с учетом отображения:

введите описание изображения здесь

Это создаст следующий текстовый файл:

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

(это было сделано с помощью копирования / вставки из терминала и ручного форматирования текста)

Я не нашел никакой возможности сделать это, я думаю, что нет ни одного.

Как, если возможно, Vim может достичь этого?

nobe4
источник
1
Хм. Я не думаю, что у Vim есть какой-либо способ «увидеть» свое собственное окно (то есть ваш скриншот выше, в отличие от содержимого буферов). Как любопытно.
Сато Кацура
На мой взгляд, это не проблема vi, но для терминала - который, по общему признанию, не сильно отличается от использования мыши! gnome-terminalМожно «выбрать все», но я не проверил, нужно ли переформатировать после вставки. С другой стороны, я хотел бы что-то, что сбрасывает все (прокручиваемое) окно в файл!
Закон 29
Вы можете использовать мышь, чтобы выбрать весь экран, включая имена вкладок вверху, а также строку состояния внизу и щелкните правой кнопкой мыши снаружи, чтобы вставить скопированный экран. Это сработало для меня. Я использовал 7.2 VIM в Linux.
SibiCoder

Ответы:

5

Да, есть способ сделать это! Вы можете использовать screenchar()функцию. От: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.

Чтобы использовать это в сценарии, вы можете сделать следующее:

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

Этот прекрасный фрагмент vimscript был написан Кристианом Брабандтом , так что, если он окажется полезным, отправьте ему голос.

Вот пример этого в действии. Когда я запустил эту функцию в моем окне vim:

введите описание изображения здесь

Я получил этот текст:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
Джеймс
источник