จดบันทึกการใช้งาน tmux
tmux เรียกตัวเองเป็น terminal multiplexer มีประโยชน์มากเวลาอยากแบ่ง windows แยกหน้าจอ หรือทำงาน session ค้างๆนานๆ เห็น dev หลายๆ คนใช้ tmux + vi/vim ก็เลยอยากลองใช้ดูบ้าง
อ่านเพิ่มเติม Getting Started tmux
ติดตั้ง tmux
brew install tmux
สร้าง Session ใหม่
tmux
# หรือ
tmux new -s name
Detach ออกจาก Session ใช้ Ctrl
+ b
และกด d
ctrl-b-d
หรือพิมพ์
tmux detach
ตัว session ยังทำงานอยู่ แค่เพียงเราออกจากหน้าจอเฉยๆ ลองสั่ง ls ดู
tmux ls
เข้า session ไปใหม่
tmux attach -t 0
# หรือตามชื่อ ถ้าเกิดตอน tmux new ตั้งชื่อ session ไว้
tmux attach -t name
Kill server ใช้คำสั่ง
tmux kill-server -t name
# หรือ kill หมดเลย
tmux kill-server
คำสั่งคีย์ลัดต่างๆ
ใช้ ctrl
+ b
เป็น shortcut ในการ trigger command นะครับ
เช่น ctrl
+ b
+ ?
จะเป็นการแสดง help คำสั่งทั้งหมดของ tmux
-b C-b Send the prefix key [49/49]
C-b C-o Rotate through the panes
C-b C-z Suspend the current client
C-b Space Select next layout
C-b ! Break pane to a new window
C-b " Split window vertically
C-b # List all paste buffers
C-b $ Rename current session
C-b % Split window horizontally
C-b & Kill current window
C-b ' Prompt for window index to select
C-b ( Switch to previous client
C-b ) Switch to next client
C-b , Rename current window
C-b - Delete the most recent paste buffer
C-b . Move the current window
C-b / Describe key binding
C-b 0 Select window 0
C-b 1 Select window 1
C-b 2 Select window 2
C-b 3 Select window 3
C-b 4 Select window 4
C-b 5 Select window 5
C-b 6 Select window 6
C-b 7 Select window 7
C-b 8 Select window 8
C-b 9 Select window 9
C-b : Prompt for a command
C-b ; Move to the previously active pane
C-b = Choose a paste buffer from a list
C-b ? List key bindings
C-b C Customize options
C-b D Choose a client from a list
C-b E Spread panes out evenly
ลองแยกหน้าจอเป็น 2 จอ (เรียกว่า pane) ทั้งแนวตั้งแนวนอน
C-b " # หมายถึง Ctrl + b แล้วกด "
C-b % # หมายถึง Ctrl + b แล้วกด %
สลับจอไปมา แต่ละ pane ใช้ Ctrl
+ b
+ o
oh my zsh tmux
ถ้าหากใครใช้ Ohmyzsh แบบผม และตั้งค่า plugin tmux ไว้ ก็จะมี shortkey ให้ใช้ (เป็น alias) สั้นลงไปอีก (ซึ่งก่อนหน้านี้ผมใช้ shortkey นี้แหละครับ เลยแทบไม่ได้จำ key จริงๆ ของ tmux เลย)
ตัว alias ที่ถูกตั้งค่าไว้
alias ta='tmux attach -t'
alias tad='tmux attach -d -t'
alias ts='tmux new-session -s'
alias tl='tmux list-sessions'
alias tksv='tmux kill-server'
alias tkss='tmux kill-session -t'
alias tmuxconf='$EDITOR $ZSH_TMUX_CONFIG'
เห็นไหม ผมใช้แค่ ts
, ta
, tad
, tksv
ไม่กี่คำสั่งเอง
Config File
ไฟล์ config ของ tmux จะอยู่ที่ ~/.tmux.conf
ตอนนี้ปัญหาผมก็มีแค่ mouse อย่างเดียว ก็ตั้งค่าให้กด mouse ที่ pane ได้แล้ว ส่วน config อื่นๆ เดี๋ยวค่อยนั่งดูเมื่อเจอปัญหา ก็ค่อยๆ ใส่ config ไม่อยากใส่ config เยอะ โดยที่เราไม่รู้ปัญหา หรือใส่มาทำไม ฮ่าๆ
ตัวอย่าง repository tmux.conf ที่น่าสนใจ
ปัญหาที่เจอ
- ยังมีปัญหา เรื่อง clipboard บ้าง ที่ใช้ตอนเปิด iTerm2
- มีปัญหา status line ซ้อนกัน ระหว่าง tmux กับ vim เดี๋ยวขอไปลองเล่น ลองปรับก่อน
สรุป
จริงๆ แล้วผมใช้ tmux แค่เอาไว้ให้มันมี session ค้างไว้ กรณี ssh เข้าไป remote server แค่นั้น กับบางทีเปิด terminal เพื่อรัน command อะไรซักอย่าง เช่น server หรือ docker แบบไม่อยากใช้ daemon แทบไม่ค่อยได้ใช้ tmux trigger เลย
พอมานั่งไล่อ่าน ลองเล่น ให้คุ้นมือ ให้จำได้ ก็รู้สึกว่า มีประโยชน์อยู่เหมือนกัน และจริงๆ แล้ว แทบไม่ต้องเปิดหลาย windows หรือ หลาย pane เลย เอาจริงๆ แค่ 3 panes กำลังโอเค มากกว่านั้น คือ รกมาก และดู multi tasks เกินไป สำหรับผม ส่วน .tmux.conf
ก็มีอะไรให้ปรับแต่งอีกเยอะ ค่อยอ่านเพิ่มเติม
Happy Coding ❤️
References
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit