最新バージョンのtmux(gitリポジトリから)とxclip(0.12)を実行しています。Emacsのようなキーボードバインディングを使用してcopy-mode
のテキストを移動できるようにしたいのですが、コピー(M-w
)の選択をクリップボードにコピーし、(C-y
)をコピーバッファーから/にコピーバッファーに貼り付けます。
これまでのところ、C-y
を使用してテキストを貼り付け、Emacsのようなキーボードバインディングを使用してcopy-mode
内を移動することができましたが、まだテキストをコピーできません tmuxからバッファ(例:copy-mode
)
私はバッファ全体をクリップボードにコピーするために this thread を見つけました(そしてその逆も同様です)が、私にとっては機能していないようです。
また、tmux-users
メーリングリストで、tmuxの最近のバージョン(gitリポジトリのみ)がcopy-pipe
というコマンドを提供するように言われました。マニュアルページでは、このコマンドについて次のように述べています。
の1つのコマンドは、引数copy-pipeを受け入れます。copy-pipeは、選択をコピーしてそれをコマンドにパイプします。たとえば、次の例では「C-q」をバインドして、選択範囲を/ tmpと貼り付けバッファにコピーします。
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
copy-pipe
は、選択を別のコマンドにパイプするために部分的に使用されることを意図しているように見えます。この説明とコマンドにもタイプミスがあるようです(temacs-copy
とは何ですか?)
いずれにせよ、私がしたいのは:
C-f
、C-b
、M-f
、M-b
、C-a
、C-e
など]カーソルを移動するには)。 接頭辞なしこれらのいずれか。M-w
(接頭辞なしどちらでも)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
"の部分は適切に機能します。I canコマンドラインでクリップボードにコピーするため、次のようになります。
echo "Hello world. How are you?" | xclip -i -selection clipboard
これらすべてを使って、選択をコピーモードからクリップボードにコピーするにはどうすればよいですか?
次を使用してくださいtmux.conf
とcopy-pipe
tmuxの新しいバージョン(1.8以降):
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"
prefix+[
をコピーモードにM-w
その部分をシステムのクリップボードにコピーするにはC-y
tmux内に貼り付けますC-v
Webブラウザのような他の通常のアプリケーション内に貼り付けます。Tmux 2.4では( this commit 以降)、バインディング構文が変更されていることに注意してください。私は言い換えます このGithubコメント 変更を簡単に要約します:
-t
を-T
に置き換えますvi-<name>
を<name>-mode-vi
に置き換えます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'
changelog から:
キーテーブルに大きな変更が加えられました。モードキーテーブルは、メインキーテーブルから分離されなくなりました。 bind-keyおよびunbind-keyへの-tフラグとともに、すべてのモードキーテーブルが削除されました。
Emacs-edit、vi-edit、emacs-choose、vi-chooseテーブルは、コマンドプロンプトと選択モードの固定キーバインディングに置き換えられました。モードキーとステータスキーのオプションは残ります。
Emacs-copyテーブルとvi-copyテーブルは、copy-modeテーブルとcopy-mode-viテーブルに置き換えられました。コマンドは-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
これらの変更により、完全なコマンドパーサー(コマンドシーケンスを含む)とコマンドセットを使用できます。たとえば、通常のコマンドプロンプトと編集と履歴を使用して、カスタムコマンドプロンプトの代わりに検索、ジャンプなどを行うことができます。デフォルトのC-rバインディングは次のとおりです。
bind -Tcopy-mode C-r command-Prompt -p'search up' "send -X search-backward-incremental '%%'"
Copy-pipe-and-cancelなど、send -Xで使用できる新しいコマンドもいくつかあります。
-temacs-copy
はタイプミスではありません。先頭のダッシュは、これがbind-keys
コマンドのオプションであることを示します(オプションの引数も含まれます)。よければ、-t emacs-copy
と同じです。
コピーモードは、異なるバインディングとコマンドのセットを使用します1 「通常モード」より。 copy-pipe
コマンドは、代替の「モード」バインディングテーブルでのみ使用できます。 mode-keys
がemacs
の場合、コピーモードはemacs-copy
テーブルを使用するため、M-wをそのテーブルのcopy-pipe
にバインドする必要があります。
bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"
「接頭辞なし」のバインディングを作成しすぎないように注意してください。それらはtmuxの内部で実行されているプログラムにこれらのバインドされたキーを入力することを難しくします(たとえば、CyをEmacsの内部で実行されているttyモードのインスタンスに入力したい場合- tmux)。いつでも(プレフィックス)send-keys C-y
を実行するいくつかのキーをバインドできますが、十分な頻度で必要な場合は、入力が面倒になる可能性があります。
1 移動と編集のコマンドのみ使用できます。 copy-pipe
を除いて、これらのコマンドは引数を取りません(これは、マンページで「1つのコマンドは引数を受け入れる」という意味です。「in」はおそらくタイプミスまたは編集ミスです)。 。
他の答えが役立つかもしれませんが、これは私が同じことをする方法です: