Edited at

tmux 1.8 + Mac or X 環境 + zsh or fish でクリップボード設定

More than 5 years have passed since last update.

会社では Mac + fish、

自宅では Ubuntu + fish, Mac + zsh と、

不思議な環境で作業しており、tmux のクリップボード設定ではまったのでメモ。

-

tmuxのバージョンを1.8にアップデートして、クリップボードの設定」を基本に設定を行う。

また Mac では、下記も設定しておかないと、ターミナル上で Vim を使うときにキーバインドが反応しなくて困った。

set-option -g default-command "reattach-to-user-namespace -l $SHELL"

Mac は以上で問題ないが、共通の設定を Ubuntu 環境でも使いまわそうとすると reattach-to-user-namespace がない為、default-command の時点で強制終了する。

ならば reattach-to-user-namespace があるかどうかを判断すれば良いと下記の設定をすると、今度は fish でコケる(zsh では問題ない)。

set -g default-command "which reattach-to-user-namespace >/dev/null 2>&1 && reattach-to-user-namespace -l $SHELL"

これは fish の文法が他のシェルスクリプトと異なっているのが原因。&&;and としないといけない。

二つのシェルでも使える様にするにはどうしたら良いのか…


別にシェルスクリプト用意して、そいつを実行したら良いじゃない

て事で、新たにシェルスクリプトを書いて対応した。

~/.tmux

├── bin

│   ├── reattach-to-user-namespace

│   └── tmux-copy

└── tmux.conf -> ~/.tmux.conf


~/.tmux/bin/reattach-to-user-namespace

#!/bin/bash

if type reattach-to-user-namespace >/dev/null 2>&1; then
reattach-to-user-namespace $@
else
exec $@
fi



~/.tmux/bin/tmux-copy

#!/bin/bash

if type pbcopy >/dev/null 2>&1; then
pbcopy
elif type xclip >/dev/null 2>&1; then
xclip -sel c
elif type xsel >/dev/null 2>&1; then
xsel -ib
fi



tmux.conf

# Setup 'v' to begin selection as in Vim

bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe '~/.tmux/bin/reattach-to-user-namespace ~/.tmux/bin/tmux-copy'

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe '~/.tmux/bin/reattach-to-user-namespace ~/.tmux/bin/tmux-copy'

set-option -g default-command '~/.tmux/bin/reattach-to-user-namespace -l $SHELL'


~/.tmux/bin/reattach-to-user-namespace~/.tmux/bin/tmux-copy に実行権限付けてあげる。

-

参考:Way to ignore this script if not on OS X?