tmuxのvi-copyモードでシステムクリップボードを使用する


51

私はtmux 1.6を実行していますが、viスタイルのキーバインドを使用するように構成しようとしています。また、インタラクティブモードでコピーするときにシステムクリップボードを使用しようとしています。

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

簡単に言えば、C+ を実行し[、それを使用vしてコピーするテキストの選択を開始し、yプッシュされたら、選択をtmux選択にコピーし、それを使用してシステムクリップボードにエクスポートしxclipます。

残念ながら、これを行おうとすると、次のように表示されます。

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

tmux構成でこれを行う方法はありますか?

回答:


87

これもここで回答されましたが、使用方法を理解するのに時間がかかりましたので、混乱した他の人のために説明します。

これは基本的にあなたが行っている設定です:

(tmux バージョン<2.5の場合

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(tmux バージョン> = 2.5の場合

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

次に、ヒットCtrl+b [してコピーモードに入ります。次にSpace、任意のvi移動キーを押して選択します。次に、を押す代わりにEnter、ヒットするyと選択範囲がクリップボードにコピーされます。

注:これは、viキーでtmuxのデフォルトバインディングを使用していることを前提としています。

Tmuxには、モードごとに異なるキーバインディングテーブルがあります。したがって、コピーモードでキーbind-key -t vi-copy yのアクションを設定しyます。最初は、Enter選択後にヒットすることに慣れていたため、混乱しました。Enter実際には、copy-selectionコマンドのデフォルトのキーバインディングにすぎません(コピーモードの場合)。このcopy-pipeコマンドを使用すると、新しいキーをバインドして、選択範囲をコマンドにパイプできます(この場合は)xclip

を実行すると、コピーモードのすべてのキーバインディングを表示できますlist-keys -t vi-copy


おかげで、tmux 1.9aをダウンロードしてコンパイルしなければなりませんでしたが、それほど難しくはなく、今では動作します™。
ナフトゥリケイ

3
xclipシステムに実際にインストールされているダブルチェックだけで機能しない場合(デフォルトではUbuntuにインストールされていないためsudo apt-get install xclip、取得する必要があります)
ecerulm

3
OSXの場合は、交換してくださいxclippbcopy。Windows上のCygwinの場合は、putclipcygutils-extraパッケージから)に置き換えます。
SnoringFrog

5
次からバインディング、このブログのエントリは、コピー時にtmuxは2.6に過ぎ素晴らしい作品と画面上に一見ランダムな文字を入れての欠点を持っていない:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
マティアス・ブラウン

1
.tmux.confからこの行を削除するまで、これは機能しませんでしたset -g mouse on。これにより、「マウスモード」が有効になりますが、それを削除した後でも、マウスに関するすべてが正常に動作します(スクロールホイールが動作し、マウス選択が動作します)
...-ndemou


6

いくつかの技術的な問題に直面しています:
「特別モード」バインディング(例vi-copy)…

  1. 別のコマンドセットを使用します(つまり、run-shell別名runは使用できません)。
  2. 複数のコマンドをバインドする機能はありません(通常は、;シェルの&&コマンド区切り文字で区切ることができます)。

tmux 1.8にはcopy-pipeがあります。

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

FAQにリストされいるこのようなバインディングがあります。)


1
私はtmux 1.8を持っていますが、これは機能していないようです。(編集)うーん、Enterで送信するtextarea入力が嫌いです。とにかく、このキーバインディングを追加しましたが、<prefix> -yを実行して[space]を押すと、内容はクリップボードにコピーされません。
ベンデイビス

ちょうどそれを考え出した。「vi-copy」キーバインドテーブルがどのように機能するのか理解できませんでした。
ベンデイビス


2

macOSの場合、この行を .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'


macOSユーザー、tmux> = 2.5の場合:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai

1

これが、tmux 2.2を使用してxclipをインストールした結果、私にとってはうまくいきました。Vimスタイルのコピーの場合、次を.tmux.confに追加します

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

ここで、コピーモードでPREFIX vが選択を開始すると、PREFIX yがクリップボードにコピーされます。PREFIX pを使用して、ターミナルに貼り付けることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.