web-dev-qa-db-ja.com

vimにテキストをGNU画面のクリップボードバッファにコピーさせるにはどうすればよいですか?

Vimのコマンドでテキストをヤンクし、画面のクリップボードに入れて、後で^ A]を介して別のアプリケーションに貼り付けることができます。一度に画面に収まるよりも多くのテキストがあるため、vimは(画面のコピーモードではなく)コピーを行う必要があります。

other の質問への回答 have アプローチ this 問題ですが、ほとんどの場合、Xクリップボードへのvimのインターフェイス+および*の使用に依存しています。そもそもXセッションの存在下でリモートで開始されたアプリケーションまたはそうでないアプリケーションへ。私はPuTTYを使って作業していますが、[必ずしも]ローカルに転送するのではなく、画面間で転送したいだけなので、これは偶発的なことです。

最良のことは、画面に接続するvimに魔法のバッファーが存在することですが、回避策を聞きます:)

7
gws

余分なキーストロークが気にならない場合は、問題は発生しません。

GNU Screenのコピーアンドペーストレジスタ(.)は、箱から出してファイルの読み取り/書き込みが可能です。<C-a><および<C-a>>はデフォルトのホットキー、/tmp/screen-exchangeはデフォルトのファイルです。 、ただし、システム全体ではなくユーザー固有の方がよいので、.screenrcに次のように設定します。

setenv BUFFERFILE "$HOME/.buffer" 
bufferfile "$BUFFERFILE"

Vimにはそのようなコマンドはすぐにはありませんが、作成して必要なものにマップするのは難しくありません。 g。それぞれ<leader><<leader>>

if exists("$BUFFERFILE")
    nnoremap <silent><leader>< :let @" = join(readfile($BUFFERFILE), "\n")<CR>
    nnoremap <silent><leader>> :call writefile( split(@", "\n"), $BUFFERFILE )<CR>
endif

ただし、気になる場合は、もう少し複雑になります。理解している限り、次のことを行う必要があります。

  • vimで可能なすべてのヤンク、カット(特定のレジスタの変更時にautocmdイベントがないため)および貼り付け(実際に実行可能な唯一のトリガーであるため)ショートカットを再マップします。複雑で面倒なことはありません。その方法を知っているといいのですが。
  • GNU画面で2つのショートカットを再マップします:1つを貼り付ける間は非常に明白です:

     bind ] eval readbuf "paste ."
    

    特別なコピーモードでの<Return>または<Space>のヤンクは、私にとって困難です。

5