31

ENV: Windows 7 ラップトップでパテで tmux を実行しています。仕事中にLinuxシステムにsshします。

すべてのニーズに使用する前に、tmux で 2 つの不具合を解決する必要があります。

  1. vimまたはtmuxターミナルからWindowsのメモ帳にテキストをコピーする必要があります。vim と putty の両方でマウスのサポートを有効にしました。

    試してみ"*yまし"+yたが、どちらも機能しません。パテのコピー機能を使用すると、隣接するグリッドのコンテンツもコピーされます。

  2. あるペインのvimファイルから別のペインで開かれたvimファイルにコンテンツをコピーする必要があります。これにはvimのトリックはありますか。私はそれを行う方法を使用したくありません<C-b>[

問題 2 には w/a があるため、問題 1 は私を悩ませています。

4

5 に答える 5

123

パテ v0.62 と tmux v1.8 を使用します。

tmux 設定: setw -g モード-マウス オン

tmux からシステム クリップボードにテキストをコピーしたいのですが、SHIFT を押したままマウスでテキストを選択し、マウスの左ボタンをクリックします。

テキストを tmux に貼り付けたい場合は、SHIFT を押してマウスの右ボタンをクリックします。

于 2013-11-15T08:17:07.770 に答える
5

PuTTY は単なる端末エミュレータです。Vim は登録*+、X の選択とクリップボードに関心があります。重複はありません。

PuTTY では、選択した端末の内容を Windows クリップボードにコピーすることしかできません。tmuxを実行すると、必然的にウィンドウ レイアウトが含まれます。

PuTTY から、X クリップボードと Windows クリップボードを統合する実際の X サーバーであるCygwin XWin サーバーのような、実際の統合を可能にするものに切り替える必要があります。PuTTY セッション内ではなく、ssh -Xサーバーに入り、Linux ターミナルで Vim を起動するか、GVIM を直接起動します。次に、期待どおりに via"+yをヤンクします。

あるいは、PuTTY を使い続けたい場合は、たとえば:write、選択内容をローカル ファイルに保存し、それを Windows に転送するなどの回避策を使用する必要がありscpます。

于 2013-06-23T19:50:01.717 に答える
4

ちょっとした工夫で、tmux バッファを PuTTY 経由でクライアントに戻すことができます。「AUX」ポート(シリアルプリンター)のANSIエスケープコードを使用してこれを実現しました。

以下は、その転送方法の実装の 1 つにすぎません。

1) サーバー側tmux.confで、以下を追加します。

# Send the tmux copy buffer to a file.  The file is read for ANSI printing by "t" alias in .bashrc
bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer' 

2) サーバー側.bashrcで、以下を追加します。

t() {
  # Configure a PuTTY profile to send "t" as the "Remote command".  This
  # function will automatically reattach to an existing tmux session if one
  # exists, or start a new one.  This function also repeatedly sends our
  # homemade tmux clipboard back to the PuTTY client in the form of an ANSI
  # printer escape sequence.  The contents of the homemade clipboard are
  # populated by `bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'` in
  # tmux.conf.  It is expected that the PuTTY client will be configured to
  # print to a "Microsoft XPS Document Writer" which saves the printer output
  # to a file.  The file is subsequently read by an AutoHotkey macro, and the
  # contents are made available for paste.
  [[ "$TERM" == "xterm" ]] || return 0 # This prevents recursive runs, in case t() is called after tmux is started.
  { while :; do tput mc5; cat ~/.tmux-buffer; tput mc4; sleep 5; done } &
  tmux attach || tmux
}

3) クライアント側 (Microsoft Windows) で、新しいプリンターを作成します。

  • プリンターを追加する
  • 新しいポートを作成 > ローカル ポート
  • ポート名を入力 > " PuTTY_Printer_File"
  • ドライバー > Microsoft XPS ドキュメント ライター
  • プリンター名 > " PuTTY Printer"
  • オプション: テスト ページを印刷し、ファイル @ " %USERPROFILE%\Documents\PuTTY_Printer_File"の内容に表示されることを確認します。

4) クライアント側の PuTTY 構成:

  • [ターミナル] > [ANSI プリンター出力を送信するプリンター:] を、新しく作成したプリンター " " に設定しますPuTTY Printer
  • Connection > SSH > "Remote command:" を " t" に設定します (上記の .bashrc 関数を参照)。

この時点で、tmux のコピー モードでテキストを強調表示して を押すと、tmux バッファーの内容を PuTTY クライアントに送信できますy。選択したテキストは%USERPROFILE%\Documents\PuTTY_Printer_File、クライアント上で終了します。さらに一歩進んで、このファイルからの「貼り付け」をエミュレートしたい場合は、ホットキー シーケンスを使用してファイルの内容を読み取って挿入することができます。これは AutoHotKey を利用する例ですが、必要に応じて PowerShell で同じ結果を達成することもおそらく可能です。


5) クライアント側の AutoHotKey マクロ:

;### Get contents of PuTTY ANSI printer device output and paste it
#v:: ;Winkey + v
FileRead, PuTTYPrinter, %USERPROFILE%\Documents\PuTTY_Printer_File
SendInput %PuTTYPrinter%
PuTTYPrinter = ; Free up memory
return

6) 完全な使用手順:

  • PuTTY でサーバーに接続し、t() 関数によって tmux にドロップされます。
  • コピーするテキストを選択する準備ができたら、コピー モードの tmux ホットキーを使用します ( Ctrl + b[)
  • 矢印キーでカーソルを移動
  • で選択を開始spacebar
  • 選択を終了し、それをコピーしますy
  • PuTTY を実行しているクライアント側に戻りWindowsKey + v、選択内容を貼り付けます

写真は 1,000 語に相当するため、何が起こっているかの概要を以下に示し ます。

于 2017-01-10T04:03:49.117 に答える