tmux

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

More than 3 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?