tmuxのcopy-pipeとsplit-windowを組み合わせると捗る
- tmux 1.8
以前こういうエントリを書いた。
ローカルで使っているtmux.confに以下のような設定を書いて、 選択範囲をnopasteに投げられるようにしていた。
bind-key -temacs-copy C-q copy-pipe "cat | ~/bin/np"
上の例にあるnp
というコマンドは、
- nopasteした後にそのURLを標準出力に出す
- そのURLをブラウザで開く
というもの。
copy-pipe
した場合は標準出力が見られないものの、
ブラウザで開くというのは有効なのでローカルで使っている分には特に問題がなかった。
しかし、リモートでtmuxを使っている場合は ブラウザが開けないのでnopasteしたURLが得られず 無意味な設定になってしまう。
アカウントに紐付いたものリストが見られるような nopasteサービスを使っていればそこから辿れなくはないが、 めんどくさいし今使っている社内nopasteにはそんな機能はない。
とはいえこれが使えないとちょっとしたテキストを 共有するのにすごく不便(一度ファイルに落としてからnpコマンドに食わせないといけない)。
そこでtmuxのsplit-window
(ウィンドウの分割)と組み合わせて
その場でnopaste先のURLを確認できるようにしてみた。
bind-key -temacs-copy C-q copy-pipe "cat | ~/bin/np > ~/.last_np; tmux split-window -p 1 'less ~/.last_np'"
下の方にピコッと表示される (社内nopasteのURLなのでモザイクだらけとなっております)
ちょっと長いがやっていることは簡単で、
nopasteした後にその結果をtmuxのsplit-window
に渡している。
- npコマンドの結果(=nopaste先のURL)を
~/.last_np
というファイルに保存 split-window
コマンドで~/.last_np
の内容をless
で表示- URLが表示できればいいだけなので
-p
は最小の1に
split-window
は引数にコマンドを指定すると
そのコマンドが終了すると同時にペインを閉じる。
今回はless
で開いているので、q
を入力すればペインごと閉じてくれる。
いちいちファイルを介さないといけないので無駄な感じもするが、 手を動かさないといけないわけではないし、 履歴を確認できると思えばまあいいかな、と。
cat | ~/bin/np >> ~/.last_np; tmux split-window -p 1 'tail -n1 ~/.last_np' | less
とすればすべての履歴を残すことも。
とりあえず捗る。