会社では 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
#!/bin/bash
if type reattach-to-user-namespace >/dev/null 2>&1; then
reattach-to-user-namespace $@
else
exec $@
fi
#!/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
# 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
に実行権限付けてあげる。