tmuxのcopy-pipeとsplit-windowを組み合わせると捗る

tmux 1.8 以前こういうエントリを書いた。 tmuxのコピーモードの選択範囲を外部のコマンドにわたす - handlename's blog ローカルで使っている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 >> ~/. »

Author image handlename on #tmux,

tmuxのコピーモードの選択範囲を外部のコマンドにわたす

tmux 1.8 tmuxのコピーモードで、選択中のテキストを外部のコマンドに渡せたら捗るのになー と思ってman引いたらそのまんまな例が載ってた。 One command accepts an argument, copy-pipe, which copies the selection and pipes it to a command. For example the following will bind `C-q' to copy the selection into /tmp as well as the paste buffer: bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out" cat >/tmp/out の部分を置き換えれば好きなコマンドに選択範囲を渡せる。 つまり、範囲を選択してNoPasteに投げる、みたいなことがコマンド一発でできる。 べんり〜 »

Author image handlename on #tmux,

emacs から git diff を開く

emacs 24.2.1 git 1.8.2 tmux 1.7 iTerm 1.0.0.20130319 emacs から tig blame を開く - handlename's blog の派生。 diff も見れたら便利なんじゃないかということで追加してみた。 ついでにリファクタリング。 tmux にコマンド送るのは他にも色々応用できそう。 »

emacs から tig blame を開く

emacs 24.2.1 tmux 1.7 iTerm 1.0.0.20130319 tig blame が便利らしいということで、emacs からさくっと開けるようにしてみた。 git-project-p はこちらから拝借。関数名は変えてある。 http://shibayu36.hatenablog.com/entry/2013/01/18/211428 べんり〜 »

tmux で直前の window に戻りたいとき

tmux 1.7 last-window にキーバインドを設定しておくと捗る。 むしろなんで今まで設定しておかなかったのか…。 bind-key C-t last-window 自分の場合プレフィックスキーを C-t にしてあるので、 C-t C-t とすれば直前の window に切り替えられる。 大量に window を開いている時に、 特定の window 間を行ったり来たりするのに便利。 »

Author image handlename on #tmux,

ディレクトリの履歴からcanythingで絞り込んで移動する

こういうエイリアスを設定してみた。 alias cda=’cd pushd | tr " " "\n" | sed -e "s/~/\/Users\/handle/" | canything‘ ディレクトリの履歴を対象に、canythingで絞り込んで移動先を選ぶ。 ディレクトリを飛び回るときは cd -[TAB] するよりも便利。 以下うまく行かなかった部分メモ。 canything | xargs cd じゃうまく行かなかった (xargsに-Pを付けてみると xargs: max. processes must be >0 と表示される) ~/path/to/dir の形式をcdに渡しても cd: no such file or directory: ~/path/to/dir って言われるのでしかたなく置換してる。パスの重複 (/Users/handle/hogeと~/hoge) がなくなるのでまあいいか tmux の window-split の shell-command 部分に書きたかったんだけど、 shell-command が実行されるのは tmux が実行されているシェルで、pushd が今いるシェルと一致してなかったので断念 »