2016-05-08

讓 tmux 還原重開機後的 tmux 和 vim 狀態: tmux-resurrect plugin

人生總是難免會遇到要重開機的時候,
tmux 在重開機之後原本的 session 是會消失的,
身為一個追求極致開發環境的人,
當然不允許自己手動解決這個問題(重新設置 tmux window/pane)
但究竟該怎麼做,才能夠自動恢復重開機之前的 tmux 和 vim session 呢?

首先,我們來瞄一下 tmux plugin manager (tpm) 這個好東西:
顧名思義,tpm 是一個 tmux 的 plugin 管理工具,
可以透過 ~/.tmux.conf 設定檔來配置 tmux 的 plugin,
是一種跟 vim vundle 概念頗為相似的工具。

tmux-resurrect 是一個 tpm 的外掛
主要的功能是讓 tmux 的 session/pane 可以被儲存及載入。
也就是,在重開機之前一旦做了儲存的動作,
重開機後,tmux 可以完全回覆到先前的狀態!

除此之外,tmux-resurrect 還支援 vim session 回復的功能,
這功能可以讓 tmux-resurrect 在重新載入 tmux 時,一併載入當時的 vim session!
這功能實在是很威呀~
當系統不得不 reboot 的時候,這功能可以大幅減低 context switch 的 overhead 呀~

底下記錄了 tpm和 tpm plugin 的安裝與設定步驟,
為了區別兩者安裝方式的不同,
我把步驟分成兩個階段,第一階段是裝 tpm,第二階段才是裝 tpm plugin:

1. 安裝 tpm
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
2. 在 ~/.tmux.conf 的最底下加上
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
run '~/.tmux/plugins/tpm/tpm'
3. 安裝 tmux (一定要先記得進入 tmux)
tmux
tmux source ~/.tmux.conf  
上述步驟完成之後,再重開一次 tmux,tpm 就裝好了!

接著是安裝 tmux-resurrect 還有 vim 狀態自動回覆的 tmux plugin 設定:

1. 在 ~/.tmux.conf 加上底下紅字兩行
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @resurrect-strategy-vim 'session'

run '~/.tmux/plugins/tpm/tpm'
2. 安裝剛剛加上的 plugin
Prefix + I          # 是大寫 I
3. 看到提示後,按 ESC 離開安裝畫面

一切就搞定了:
  • 儲存目前的 tmux 和 vim 狀態: Prefix + Ctrl-s
  • 還原目前的 tmux 和 vim 狀態: Prefix + Ctrl-r
* tmux 預設的 Prefix 是 Ctrl-b

這實在是一個很威的功能呀!

這年頭系統程式的開發環境真的是要什麼有什麼了,
容易管理又好安裝,還真是幸福呀~
  • shell: oh-my-zsh
  • vim: vundle
  • tmux: tpm

==
後記
雖然我本人很喜歡 tmux + vim + cscope 來開發系統程式
但是,經歷過用 Sublime Text 寫比較高階的語言之後
我總覺得 Sublime 除了 trace C/C++ 的外掛很鳥之外(ctags/cscope 外掛一整個悲劇)
整體使用的開發效能,不會輸給黏在鍵盤用盡各種 vim/tmux 熱鍵的組合,
也許是 Sublime 有自己的熱鍵,加上比 gvim 順的 GUI,
也許是 vim 的 tab 切換太囉唆 (1gt, 2gt, gT, gt),indent 對齊遜了點,folding 太醜陋..
不過 vim 的 split (ctrl-w v, ctrl-w s) 和 ctrl + ] 又具備超高效率...
天底下似乎還沒有完美的 editor...  (atom太吃ram又慢,emacs沒有 hjkl...)

沒有留言:

張貼留言

Configuring HAProxy as a proxy for Cargo

Configuring HAProxy as a proxy for Cargo (the Rust package manager) in a corporate network environment involves several steps. Here's a ...