在 Windows 10 上面使用 WSL 已經一個月了1。小狀況也就罷了,但 Cmder 不夠穩定的顯示邏輯卻最讓我頭痛,在視窗尺寸變化時,無法正確處理字元位置。更令人費解的是,即使是其他狀似更華麗(也更耗資源)的替代方案,也仍然有這些問題2。
既然酷炫的終端機競品問題多多,乾脆回歸極簡的 WSLtty3,並混搭 tmux4 來彌補。可惜,畢竟是組合技,無法完全複製 Mac 的 iTerm2 使用經驗。
此事古難全。
WSLtty 剪貼簿
在 X Window 或 Mac 的終端機,只要按下滑鼠右鍵就能夠 paste 文字。如果在 WSLtty 上也想這麼玩,請在 %APPDATA%\wsltty\config
設定檔加上這一行:
RightClickAction=paste
Tmux 與 zsh
啟動 tmux 時,似乎並不會根據 /etc/passwd
的資訊來喚起自訂的 shell,而是一律喚起 bash。
解決方法是,在 ~/.tmux.conf
加上這一行:
set-option -g default-shell /bin/zsh
Tmux 的 pane
用慣 iTerm2 的我,對 tmux 的 pane 功能不太習慣。
譬如說,在 tmux 新增 pane 或 window 時,不會自動帶入目前的目錄 $PWD
,而是一律帶入 $HOME
,很不方便。Tmux 預設的組合鍵 <prefix> %
及 <prefix> "
難記又難按,也很令人頭痛。
因此,我綜合多人的做法5,解決目錄問題,換成好記好按的組合鍵,更可用方向鍵來切換 pane:
# Create new window (tab) with current path
unbind c
bind -n M-t new-window -c '#{pane_current_path}' # mimic for iTerm2 habit
# Split panes with current path
# @see https://unix.stackexchange.com/a/247449
unbind '"'
unbind '%'
bind -n M-d split-window -h -c '#{pane_current_path}' # Split panes horizontal
bind -n M-D split-window -v -c '#{pane_current_path}' # Split panes vertically
# Switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
Tmux Plugin Manager
Tmux 設定太多了,就有人寫了外掛管理系統 Tmux Plugin Manager。雖然目前我還用不到,但還是先安裝,以備不時之需。
首先,下載 TPM:
% git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
將以下幾行加到 .tmux.conf
最後面:
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# Initialize TMUX plugin manager
# (keep this line at the very bottom of tmux.conf)
run -b '~/.tmux/plugins/tpm/tpm'
Tmux 還有很多高段的功能,以後有需要再研究吧。
如此這般拼湊起來,雖然還不能完全複刻 Mac 的 iTerm2 使用經驗,但也已經算是可以接受了。當然啦,私心還是希望 Cmder 或 Hyper 能夠好好解決顯示問題,就不必動用 tmux 了。
-
這段故事,詳見〈在 Windows 上復刻 Mac 使用習慣〉一文。 ↩︎
-
關於其他更華麗,卻也更耗資源的 Windows 終端機方案,可參考這幾篇介紹文章:〈在 Windows 上面用 WSL 优雅开发〉、“ConEmu vs Hyper vs Terminus vs MobaXTerm Terminator vs Ubuntu WSL”。 ↩︎
-
關於 WSLtty,可參考保哥的〈介紹好用工具:WSLtty (Mintty as a terminal for WSL)〉一文。 ↩︎
-
關於 tmux,可參考這幾篇介紹文章:〈tmux ,不只是 terminal multiplexer〉、〈tmux 快速入門筆記〉、〈終端機 session 管理神器 — tmux〉。 ↩︎
-
Shubham 提供的做法,可讓新開的 pane 及 window 保持在目前所在的目錄。Ham Vocke 的文章也介紹幾種有趣的 tmux 設定。 ↩︎