tmuxとクリップボードの間のテキスト選択項目のコピー/貼り付け

tmuxとクリップボードの間のテキスト選択項目のコピー/貼り付け

私は最新バージョンのtmux(gitリポジトリで)とxclip(0.12)を実行しており、Emacsなどのキーバインディングを使用してからテキストを移動し、選択内容をクリップボードにcopy-modeコピー()したいと思います。M-w)コピーバッファからC-yクリップボードに貼り付け()します。

C-yこれまでは、Emacsのようなキーバインディングを使用してテキストを貼り付けて移動できましたが、copy-modeまだテキストをコピーできませんtmuxバッファ内(例:in copy-mode

私が見つけたこのスレッドバッファ全体をクリップボードにコピーしたり、その逆にコピーしたりすることがありますが、私には機能しないようです。

また、tmux-usersメーリングリストから最新バージョンのtmux(gitリポジトリにのみ存在する)がというコマンドを提供していると聞きましたcopy-pipe。マニュアルページでは、このコマンドについて次のように説明します。

コマンドの1つは、選択をコピーしてコマンドにパイプするcopy-pipeという1つの引数を受け入れます。たとえば、次のコマンドは「Cq」をバインドして、選択内容を/ tmpおよび貼り付けバッファにコピーします。

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

copy-pipe選択項目を別のコマンドにパイプするために部分的に使用されているようです。この説明と命令にも少し誤字があるようです。 (何ですかtemacs-copy?)

とにかく私がしたいことは次のとおりです。

コピー:

  1. コピーモード開始
  2. Emacsナビゲーションコマンドを使用して、コピーしたいテキストに移動します(C-fカーソルを移動するには、、、C-bなどM-f)。M-bC-aC-eプレフィックスなしそれらのどれにでも。
  3. 選択したテキストをクリップボードにコピーするには、次のコマンドを使用しますM-wプレフィックスなし誰でも)

生地:

  1. C-y(いいえ)を入力してcopy-mode端末にテキストを貼り付けることができます(プレフィックスなし誰でも)

次のレプリケーション方法を試しましたが、成功しませんでした。

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

しかし、貼り付けはうまくいきます。

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

奇妙なことに、xclip -i -selection clipboard上記のコピーコマンドの「」部分が正しく機能していることがわかります。私はできます。コマンドラインからコンテンツをクリップボードにコピーします。例:

echo "Hello world. How are you?" | xclip -i -selection clipboard

これらすべて、コピーモードで選択内容をクリップボードにコピーするには?

答え1

新しいバージョンのtmux(1.8+)では、次のコマンドを使用します tmux.confcopy-pipe

set -g mouse on
# To copy:
bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
  1. prefix+[コピーモード開始
  2. マウスでコンテンツを選択する(長押し)
  3. M-wこのセクションをシステムクリップボードにコピーします。
  4. C-ytmuxに貼り付け、C-vWebブラウザなどの他の一般的なアプリケーションに貼り付けます。

答え2

Tmux 2.4の場合(以降今回提出してください)、バインディング構文が変更されました。言い換えれば、このGithubコメント変更の簡単な要約:

  1. -t使用。 。 。交換-T
  2. vi-<name>使用。 。 。交換<name>-mode-vi
  3. コマンドプレフィックスは次のとおりです。send-keys -X

私は持っています:

bind-key -n -t vi-copy Enter copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -t vi-copy MouseDragEnd1Pane copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

次のように変更する必要があります。

bind-key -n -T copy-mode-vi Enter send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

~から変更ログ:

メインテーブルが大幅に変更されました。モードキーテーブルは、主キーテーブルから分離されなくなりました。すべてのモードキーテーブルとキーバインディングとバインド解除のための-tフラグが削除されました。

emacs-edit、vi-edit、emacs-choose、およびvi-chooseテーブルは、コマンドプロンプトと選択モードで固定キーバインディングに置き換えられました。モードキーとステータスキーオプションはそのまま残ります。

emacs-copy および vi-copy テーブルは copy-mode および copy-mode-vi テーブルに置き換えられました。 send キーにコマンドを送信するには、-X および -N フラグを使用します。したがって、次のようになります。

bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-up

になる:

bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

これらの変更により、完全なコマンドパーサ(コマンドシーケンスを含む)とコマンドセットを使用できます。たとえば、カスタムコマンドプロンプトの代わりに、検索、ジャンプなどの編集と履歴を含む一般的なコマンドプロンプトが使用されるようになりました。これで、デフォルトのCrバインディングは次のようになります。

bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"

send -X は、copy-pipe-and-cancel など、いくつかの新しいコマンドも提供します。

答え3

他の答えも役に立つかもしれませんが、私がした方法は次のとおりです。

  • Shiftキーを押しながらカーソルでテキストを選択します。
  • Ctrl + Shift + Cはテキストをクリップボードにコピーします。

答え4

これは-temacs-copyタイプミスではありません。先行ダッシュは、これがbind-keysコマンドのオプション(およびそのオプションの引数)であることを意味します。必要に応じて同じです-t emacs-copy

レプリケーションモードは、「通常モード」1とは異なるバインディングとコマンドセットを使用します。このcopy-pipeコマンドは、代替の「モード」バインディングテーブルでのみ使用できます。この場合、レプリケーションモードmode-keysではemacsこのテーブルを使用するため、Mwをこのテーブルemacs-copyにバインドする必要があります。copy-pipe

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

「プレフィックスのない」バインディングを生成しすぎないように注意してください。内部で実行されているプログラムでこれらのキーバインディングを入力するのは困難です。マルチプレクサ(たとえば、ttyモードインスタンスでCyを入力したい場合Emacs中に走るマルチプレクサ)。あるキーはいつでも(プレフィックス)バインドできますが、send-keys C-y必要に応じて入力が面倒になることがあります。


1移動および編集コマンドのみ使用できます。これらのコマンドはin以外の引数を受け付けませんcopy-pipe(マンページの意味は、「inコマンドは引数を受け入れます」と呼ばれています。「in」は誤りまたは編集エラーの可能性があります)。

関連情報