Виведення 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 

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

Я не знайшов жодного варіанту для цього, я думаю, що такого немає.

Як, якщо можливо, Вім може цього досягти?


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

Цю чудову вимскрипту написав Крістіан Брабандт , тож, якщо вам це стане в нагоді, дайте йому нагороду.

Ось приклад цього в дії. Коли я запустив цю функцію у вікні vim:

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

Я отримав цей текст:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.