tmux

tmux: cut&paste

tmuxのコピペは便利につかえるが、ひと工夫することでより便利に。

bind-key        [       copy-mode
bind-key        C-[     copy-mode
bind-key        C-]     choose-buffer "paste-buffer -p -b %%" 
bind-key        ]       choose-buffer

choose-bufferをつかうことでペーストしたいバッファをインタラクティブに選べて、不要になったバッファを消すこともできる。

paste-buffer -pオプションで(アプリがサポートしていれば)bracketed paste modeをつかって、エディタに直接ペーストできるので、たとえば普通にペーストするとインデントがずれてしまうところ、braceted paste modeをつかうとエディタが(キー入力じゃなくて)ペーストだと認識できるのでインデントがずれないし、ペーストをUNDOできる(キー入力扱いだと一発でUNDOできない)、巨大なテキストを貼り付けた場合には処理時間が短くて済む利点も。

tmux-logo-small

tmux: 画面分割

~/.tmux.confに

bind-key        /       split-window -hv
bind-key        |       split-window -h
bind-key        -       split-window -v
bind-key        _       split-window -vf

って書いておくと、縦分割横分割で、縦ってどっちだっけ?って悩む必要がなくなってよい。

tmux-logo-small

tmux: ドラッグ&ドロップでペイン入れ替え

~/.tmux.confに

bind-key -T root DoubleClick3Pane select-pane -m
bind-key -T root MouseDragEnd3Pane swap-pane -t= \; select-pane -M

というのを追加しておくと、右ボタンをダブルクリックしてドラッグするとペインの入れ替えができて便利。

tmux-logo-small

tmux2.3: pane-border-status

tmux2.3でpane-border-status/pane-border-formatが追加されてpane_titleが表示できるようになった。便利かもしれない。うっとおしいだけかもしれな。

* New option 'pane-border-status' to add text in the pane borders.

設定はこんなかんじで。

tmux set -g pane-border-status bottom
tmux set -g pane-border-format "#{?pane_active,#[reverse],}#{pane_index}:#{pane_title}"

タイトルを設定するエスケープシーケンスを出すと反映される。

printf "\033]2;`hostname`:`/bin/pwd`\033\\"

hoge

tmuxのレイアウト情報をしらべてみた

tmux list-windows ででてくるlayout情報は tmux select-layout で復元できるが、フォーマットがマニュアルには書いてないのでソースコードをみてみた。

% tmux list-windows
0: emacs  (1 panes) [309x91] [layout bd46,309x91,0,0,9] @4
1: ssh  (1 panes) [309x91] [layout bd45,309x91,0,0,8] @3
2: ssh  (18 panes) [309x91] [layout bbb8,309x91,0,0[309x18,0,0{77x18,0,0,10,77x18,78,0,11,76x18,156,0,12,76x18,233,0,13},309x18,0,19{77x18,0,19,14,77x18,78,19,15,76x18,156,19,16,76x18,233,19,17},309x17,0,38{77x17,0,38,18,77x17,78,38,19,76x17,156,38,20,76x17,233,38,21},309x17,0,56{77x17,0,56,22,77x17,78,56,23,76x17,156,56,24,76x17,233,56,25},309x17,0,74{77x17,0,74,26,231x17,78,74,27}]] @5
3: tcsh- (1 panes) [309x91] [layout ded0,309x91,0,0,40] @12
4: tcsh* (1 panes) [309x91] [layout ded4,309x91,0,0,44] @13 (active)
%

最初の4文字は16進数でカンマ以降の内容のチェックサムになっている。チェックサムルーチンは layout-custom.cのlayout_checksum()でローテートしながら文字を足し込んでいくだけの簡単なもの。ちょっと気になるのは、文字をcharで扱っているのでMSBが立っているとcharがsignedかunsignedかで符号拡張でチェックサムが違ってきてマシン間でポータブルじゃないが、そもそもペーンIDが埋め込まれているのでポータブルである必要がなかったし、そもそもasciiしかつかってないのでok。

レイアウト     ::= チェックサム "," レイアウト情報
レイアウト情報 ::= コンテナ | 単体
コンテナ       ::= 横幅 "x" 高さ "," 左上X座標 "," 左上Y座標 "," 内部
単体           ::= 横幅 "x" 高さ "," 左上X座標 "," 左上Y座標 "," PANE_ID
内部           ::= 上下分割 | 左右分割
上下分割       ::= "[" レイアウト情報 "]"
左右分割       ::= "{" レイアウト情報 "}"

ここでの上下分割はtmux split-window -v、左右分割はtmux split-window -h。これもどっちが縦でどっちが横なのかわかりにくいので、日本語なら上下分割・左右分割と呼ぶのがいいとおもうなぁ。

paneをzoomしているとそのpaneがウィンドウを専有するレイアウトが出力されるんだなぁ。でもこのズーム状態をselect-layoutで復元することはできないようだ。なんか謎。

koie

記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2018-11-15
    • 今日の練習 2018-11-15
    • 今日の練習 2018-11-13
    • 今日の練習 2018-11-11
    • 今日の練習 2018-11-11
    • 今日の練習 2018-11-10
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ