PuTTYとtmuxを使用したコマンドのコピー

PuTTYとtmuxを使用したコマンドのコピー

私はWindows 10でPuTTYを使用してSSHを介してさまざまなLinuxシステムにアクセスします。これらのシステムでは、Linux環境での生活を簡素化するためにTmuxを頻繁に使用しています。 Tmuxセッションでは、通常、1つ以上のウィンドウを複数のウィンドウに分割します。

私はしばしばマウスを使ってPuTTYからテキストを選択/コピーし、右クリックして貼り付けます。通常、これは改行時にTmuxの外部でうまく機能しますが、tmuxセッション内では特定のウィンドウ内で複数行の選択を実行することはできません。

どうすればいいですか?

答え1

何かをコピーしてtmuxに貼り付けたい場合は、組み込みのコピー/貼り付け機能を使用できます。 viキーバインディングを有効にしてデフォルト設定を使用している場合は、<prefix> [コピーモードに入り、テキストに移動してspace強調表示を開始してenter完了します。その後、prefix ]tmuxに貼り付けることができます。コピーされたテキストはtmux独自のバッファに残り、ローカルシステムのクリップボードには入りません。

PuTTYの外側に貼り付ける必要がある場合は、Altキーを押しながらマウスで選択してウィンドウ内のブロックを選択できます。

答え2

いくつかのトリックを使用すると、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 Document Writer
  • プリンタ名> " PuTTY Printer"
  • %USERPROFILE%\Documents\PuTTY_Printer_Fileオプション:テストページを印刷して、file@""の内容に表示されることを確認してください。

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

  • ターミナル>プリンタANSIプリンタ出力の送信を次に設定します。PuTTY Printer""という名前の新しく作成されたプリンタ
  • 「接続」>「SSH」>「リモートコマンド:」を「」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枚の写真が1,000語の価値があるので、何が起こったのかをまとめると、次のようになります。

リンク:
スタックオーバーフローに対する私の答え -https://stackoverflow.com/a/41560941/3163993
ビデオデモンストレーション/説明 -https://www.youtube.com/watch?v=kEIpE2XpDdY

答え3

この問題に対する解決策は、まずウィンドウを最大化してからマウスを使用してテキストをコピーすることです。現在のウィンドウを最大化するには、プレフィックス-Zを使用してください。

答え4

垂直ウィンドウが複数ある場合は、1つのウィンドウからテキストをコピーするには、キーを押してからマウスをドラッグして<Alt>テキストブロックをコピーします。リモートCentOSサーバーに接続するWindows 10に適用されます。

関連情報