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はこれをどのように実現できますか?


1
うーん。Vimが独自のウィンドウ(つまり、バッファーの内容ではなく、上のスクリーンショット)を「見る」方法はないと思います。なんて好奇心が強い。
佐藤桂

私の考えでは、これは問題ではありませんviが、ターミナルです-確かに、マウスの使用とそれほど大きな違いはありません!gnome-terminal「すべて選択」することはできますが、貼り付け後に再フォーマットする必要があるかどうかは確認していません。別の方法として、(スクロール可能な)ウィンドウ全体をファイルにダンプするものが好きです!
法律

マウスを使用して、上部のタブ名と下部のステータスバーを含む画面全体を選択し、外側を右クリックして、コピーした画面を貼り付けることができます。これでうまくいきました。Linuxでは7.2 vimを使用しました。
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の素敵な部分は、Christian Brabandtによって書かれたので、もしそれが役に立つと思ったら、彼に賛成票を投じてください。

これが動作中の例です。vimウィンドウでこの関数を実行したとき:

ここに画像の説明を入力してください

私はこのテキストを得ました:

  1                                    |  1                                     
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All|~                                       
  1                                    |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
~                                      |~                                       
[No Name]            0,0-1          All [No Name]             0,0-1          All
:call ScreenCapture()                                                           
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.