ตั้งค่า tmux เบื้องต้น: ปรับ Prefix เมาส์ และสีให้ Terminal ใช้งานคล่องขึ้น
เรียนรู้การตั้งค่า tmux ผ่านไฟล์ .tmux.conf ตั้งแต่การเปลี่ยน Prefix เปิด Mouse Mode ไปจนถึงปรับสี Status Bar และกรอบ Pane ให้ทำงานได้คล่องและเห็นบริบทชัดเจนขึ้น

tmux ช่วยให้เราแบ่งหน้าจอ เปิดหลายหน้าต่าง และรักษา session การทำงานไว้ได้ แต่ค่าเริ่มต้นอาจยังไม่เข้ากับพฤติกรรมของทุกคน บางคนกดสลับหน้าต่างไม่ถนัด เลื่อนดู log ลำบาก หรือมองไม่ชัดว่ากำลังพิมพ์อยู่ใน pane ใด
วิธีแก้ที่คุ้มค่าที่สุดคือปรับเฉพาะจุดที่รบกวนการทำงานบ่อย ๆ บทความนี้จะเริ่มจากสามส่วนสำคัญ ได้แก่ Prefix, Mouse Mode และสีของหน้าจอ ซึ่งเพียงพอที่จะทำให้ tmux ใช้งานสะดวกขึ้นอย่างเห็นได้ชัด
เริ่มต้นด้วยไฟล์ .tmux.conf
ค่าของ tmux สามารถเก็บไว้ในไฟล์ ~/.tmux.conf เพื่อให้ถูกนำมาใช้กับทุก session โดยอัตโนมัติ วิธีนี้ช่วยให้เราไม่ต้องพิมพ์คำสั่งตั้งค่าเดิมซ้ำทุกครั้ง และยังทำให้ย้าย configuration ไปใช้กับเครื่องอื่นได้ง่ายขึ้น
ควรเริ่มจากไฟล์ขนาดเล็กที่แก้ปัญหาหลักของตัวเองก่อน เมื่อใช้งานไปสักระยะจึงค่อยเพิ่ม key binding หรือ plugin ตามความจำเป็น เพราะ configuration ที่ยาวไม่ได้หมายความว่าจะเหมาะกับการทำงานมากกว่าเสมอไป
เปลี่ยน Prefix จาก Ctrl+B เป็น Ctrl+A
Prefix คือปุ่มนำหน้าที่ใช้สั่งงาน tmux เช่น การสร้าง window แบ่ง pane หรือสลับ session ค่าเริ่มต้นคือ Ctrl+B ซึ่งใช้งานได้ดี แต่บางคนใช้คีย์นี้กับโปรแกรมอื่นอยู่แล้ว หรือรู้สึกว่าตำแหน่งของปุ่มกดไม่สะดวก
ตัวเลือกที่ได้รับความนิยมคือ Ctrl+A เพราะอยู่ใกล้มือและกดได้ง่ายกว่า เพิ่มค่าต่อไปนี้ลงใน ~/.tmux.conf
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
แต่ละบรรทัดทำหน้าที่ต่างกันดังนี้
unbind C-bยกเลิก Prefix เดิมที่เป็นCtrl+Bset-option -g prefix C-aกำหนดให้Ctrl+Aเป็น Prefix ใหม่bind-key C-a send-prefixทำให้สามารถส่งCtrl+Aเข้าไปยังโปรแกรมภายใน pane ได้ด้วยการกด Prefix ซ้ำอีกครั้ง
บรรทัดสุดท้ายมีประโยชน์เมื่อ shell, editor หรือโปรแกรมที่กำลังใช้งานต้องรับ Ctrl+A โดยตรง หากไม่มี binding นี้ tmux อาจจับคีย์ดังกล่าวไว้เป็น Prefix แทน
เพิ่มปุ่ม Reload เพื่อทดลองค่าใหม่ได้ทันที
เราไม่จำเป็นต้องปิดทุก session แล้วเปิด tmux ใหม่หลังแก้ configuration เพียงสร้าง key binding สำหรับโหลดไฟล์อีกครั้ง ก็สามารถทดลองค่าต่าง ๆ ได้อย่างรวดเร็ว
bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"
หลังจาก tmux โหลด binding นี้แล้ว ให้กด Ctrl+A ตามด้วย r โปรแกรมจะอ่านค่าล่าสุดจากไฟล์และแสดงข้อความยืนยันบริเวณด้านล่าง หากเพิ่งสร้างไฟล์เป็นครั้งแรกและยังใช้ binding ไม่ได้ สามารถโหลดไฟล์จาก shell ด้วยคำสั่งต่อไปนี้ก่อน
tmux source-file ~/.tmux.conf
วงจรการปรับแต่งจึงเรียบง่ายมาก เพียงแก้ไฟล์ บันทึก กด Prefix ตามด้วย r แล้วทดลองใช้งานจริงได้ทันที
เปิด Mouse Mode เพื่อควบคุม Pane และดู Log
หลายคนคิดว่า tmux ใช้เมาส์ไม่ได้ แต่ความจริงสามารถเปิดการรองรับเมาส์ได้ด้วย configuration เพียงบรรทัดเดียว
set -g mouse on
เมื่อเปิด Mouse Mode แล้ว เราสามารถทำสิ่งต่อไปนี้ได้
- คลิกเพื่อเลือก pane ที่ต้องการใช้งาน
- ลากขอบเพื่อปรับขนาด pane
- คลิกเลือก window จาก Status Bar
- ใช้ล้อเมาส์เลื่อนดูประวัติคำสั่งและผลลัพธ์ภายใน pane
ความสามารถนี้มีประโยชน์มากเมื่อต้องติดตาม server log หรือดูผลการทดสอบที่ยาวหลายหน้าจอ แทนที่จะเข้า Copy Mode ทุกครั้ง เราสามารถเลื่อนเมาส์ขึ้นเพื่อย้อนดูข้อมูลก่อนหน้าได้ทันที
อย่างไรก็ตาม เมื่อ Mouse Mode เปิดอยู่ การลากเลือกข้อความเพื่อคัดลอกไปยังระบบปฏิบัติการอาจทำงานต่างจาก Terminal ปกติ ใน Terminal หลายตัวสามารถกด Shift ค้างไว้แล้วลากเลือกข้อความ แต่พฤติกรรมจริงอาจขึ้นอยู่กับแอป Terminal ที่ใช้งาน
ใช้ปุ่มแบบ vi ใน Copy Mode
หากต้องเลือกและคัดลอกข้อความภายใน tmux บ่อย ๆ สามารถตั้งค่า Copy Mode ให้ใช้แนวทางเดียวกับ vi ได้
setw -g mode-keys vi
หลังเข้า Copy Mode เราสามารถนำปุ่มแบบ vi มาใช้เลื่อนเคอร์เซอร์ เลือกข้อความ และคัดลอกข้อมูลได้ รูปแบบนี้เหมาะกับผู้ที่ใช้ Vim หรือ Neovim อยู่แล้ว เพราะไม่ต้องปรับตัวเข้ากับชุดปุ่มแบบใหม่
ผู้ที่ยังไม่คุ้นกับ vi ไม่จำเป็นต้องเปิดส่วนนี้ทันที การเริ่มจาก Mouse Mode ก่อนมักเพียงพอสำหรับการเลื่อนดู log และคัดลอกข้อความทั่วไป จากนั้นจึงค่อยทดลอง Copy Mode เมื่อเริ่มต้องจัดการข้อความผ่านคีย์บอร์ดมากขึ้น
ปรับสี Status Bar ให้เห็นบริบทชัดเจน
Status Bar ไม่ได้มีไว้แสดงหมายเลข window เท่านั้น แต่ช่วยบอกว่าเรากำลังอยู่ใน session และ window ใด รวมถึงมีหน้าต่างอื่นเปิดค้างอยู่หรือไม่ การทำให้ window ปัจจุบันเด่นกว่าส่วนอื่นจะช่วยลดการสลับผิดหน้าต่างได้มาก
ตัวอย่างต่อไปนี้ใช้พื้นหลังสีเข้ม ตัวอักษรสีอ่อน และเน้น window ที่กำลังใช้งานด้วยสีฟ้า
set -g status-style bg=colour235,fg=colour250
set -g status-left " #[fg=colour39,bold]#S #[default]"
set -g status-right "#[fg=colour245]%Y-%m-%d #[fg=colour39]%H:%M "
setw -g window-status-current-style fg=colour231,bg=colour39,bold
setw -g window-status-current-format " #I:#W "
setw -g window-status-format " #I:#W "
ตัวแปรสำคัญที่ปรากฏใน configuration ได้แก่
#Sแสดงชื่อ session#Iแสดงหมายเลข window#Wแสดงชื่อ window%Y-%m-%dแสดงวันที่%H:%Mแสดงเวลา
การแต่ง Status Bar ไม่จำเป็นต้องซับซ้อน หากใช้ Terminal พื้นหลังเข้ม ให้เลือกแถบด้านล่างเป็นสีเข้มอีกเฉดหนึ่ง แล้วใช้สีฟ้าหรือเขียวเน้นเฉพาะ window ที่ active ก็เพียงพอที่จะอ่านง่ายโดยไม่แย่งความสนใจจากเนื้อหาใน pane
เน้นกรอบของ Pane ที่กำลังใช้งาน
เมื่อแบ่งหน้าจอออกเป็นหลาย pane เราอาจเผลอพิมพ์คำสั่งผิดช่องได้ง่าย โดยเฉพาะเมื่อเปิด server log, shell สำหรับ deploy และ editor พร้อมกัน การกำหนดสีกรอบของ pane ที่ active ให้เด่นขึ้นช่วยบอกตำแหน่งเคอร์เซอร์ได้ทันที
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=colour39
กรอบของ pane ทั่วไปจะใช้สีที่กลืนกับพื้นหลัง ส่วน pane ที่กำลังรับคำสั่งจะมีกรอบสีฟ้าเด่นขึ้น การเปลี่ยนแปลงเล็กน้อยนี้ช่วยลดความเสี่ยงจากการส่งคำสั่งไปยัง shell ผิดตัวได้อย่างมาก
ปิดการเปลี่ยนชื่อ Window อัตโนมัติ
โดยปกติ tmux สามารถเปลี่ยนชื่อ window ตามโปรแกรมที่กำลังทำงานอยู่ได้ แต่ถ้าเราตั้งชื่อ window เพื่อแบ่งหน้าที่อย่างชัดเจน การเปลี่ยนชื่ออัตโนมัติอาจทำให้ค้นหาหน้าต่างได้ยากขึ้น
setw -g automatic-rename off
เมื่อปิด Automatic Rename แล้ว เราสามารถตั้งชื่อ window ให้สื่อถึงงานที่รับผิดชอบได้ เช่น
apiสำหรับเซิร์ฟเวอร์ APIworkerสำหรับ background workerlogsสำหรับติดตาม logdatabaseสำหรับจัดการฐานข้อมูล
ชื่อที่ชัดเจนช่วยให้มอง Status Bar แล้วเข้าใจโครงสร้างของ workspace ได้ทันที และยังทำให้การสลับ window ด้วย Prefix ตามด้วยหมายเลขทำได้รวดเร็วขึ้น
ตัวอย่าง Configuration พร้อมใช้งาน
เมื่อนำค่าทั้งหมดมารวมกัน ไฟล์ ~/.tmux.conf สำหรับเริ่มต้นจะมีลักษณะดังนี้
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"
set -g mouse on
setw -g mode-keys vi
set -g status-style bg=colour235,fg=colour250
set -g status-left " #[fg=colour39,bold]#S #[default]"
set -g status-right "#[fg=colour245]%Y-%m-%d #[fg=colour39]%H:%M "
setw -g window-status-current-style fg=colour231,bg=colour39,bold
setw -g window-status-current-format " #I:#W "
setw -g window-status-format " #I:#W "
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=colour39
setw -g automatic-rename off
หลังบันทึกไฟล์แล้วให้โหลด configuration และลองใช้งานตามปกติสักสองสามวัน ระหว่างนั้นควรสังเกตว่าปุ่มใดกดยาก ข้อมูลใดบน Status Bar ไม่จำเป็น หรือสีส่วนใดเด่นเกินไป แล้วจึงปรับให้เหมาะกับสภาพแวดล้อมของตัวเอง
สรุป
tmux configuration ที่ดีไม่จำเป็นต้องเหมือนของผู้อื่น จุดสำคัญคือเริ่มจากปัญหาที่พบจริง ได้แก่ เปลี่ยน Prefix ให้กดถนัด เปิด Mouse Mode เมื่อต้องเลื่อนดูข้อมูลบ่อย และใช้สีช่วยแยก window กับ pane ที่กำลังทำงาน
เมื่อสามส่วนนี้ลงตัวแล้วจึงค่อยเพิ่ม key binding หรือ plugin ตามความต้องการ การปรับแต่งอย่างพอดีจะทำให้ tmux ค่อย ๆ กลายเป็น workspace ที่ควบคุมได้คล่อง เห็นบริบทชัดเจน และรองรับการทำงานระยะยาวได้จริง