Published on
TMUX

จดบันทึกการใช้งาน tmux

2022-03-23-tmux-101
Discord

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
Discord