เทอร์มินัล
Backend เทอร์มินัล สภาพแวดล้อม shell ลิงก์ การแจ้งเตือน และความปลอดภัยของ Zshell
ทุกช่องเทอร์มินัลรัน login shell จริงของคุณและใช้หนึ่งในสอง backend แบบ native ที่เร่งด้วย GPU Zshell ดูแลพฤติกรรมรอบข้าง ทั้งโฟกัส ค้นหา การแจ้งเตือน ลิงก์ ประวัติ ธีม และการวางอย่างปลอดภัย จึงสม่ำเสมอไม่ว่าจะเลือก emulator ใด
Backend เทอร์มินัล
เลือกที่ การตั้งค่า → เทอร์มินัล → Backend:
| Backend | หมายเหตุ |
|---|---|
| Ghostty | ค่าเริ่มต้น |
| Alacritty | โดยทั่วไปใช้หน่วยความจำน้อยกว่า |
ทั้งสองรองรับการเร่ง GPU เรนเดอร์รูป ชุดธีมร่วมของ Zshell ค้นหา รายงานเมาส์ การแจ้งเตือน และรายงานความคืบหน้า การเปลี่ยน backend มีผลเฉพาะเทอร์มินัลใหม่ ช่องเดิมคง emulator ที่เริ่มไว้
Shell ของคุณเหมือนเดิม
แต่ละเซสชันเริ่ม login shell ของบัญชี พรอมป์ alias ฟังก์ชัน และ dotfile จึงโหลดเหมือนในเทอร์มินัลอื่น Zshell เพิ่มตัวแปรความสามารถและตัวตน:
| ตัวแปร | ค่า |
|---|---|
TERM_PROGRAM | ghostty |
TERM_PROGRAM_VERSION | รุ่นความสามารถ Ghostty ที่ Zshell รองรับ |
ZSHELL_TERM | ghostty หรือ alacritty ตาม backend จริงของช่อง |
ทั้งสองประกาศ Ghostty ผ่าน TERM_PROGRAM เพราะ CLI ที่รองรับรูปและการแจ้งเตือนใช้เป็นสัญญาณความสามารถ ใช้ ZSHELL_TERM เฉพาะเมื่อต้องแยกตัวเรนเดอร์จริง ๆ
Zshell ไม่อ่าน ~/.config/ghostty หรือการตั้งค่า Alacritty ฟอนต์ สี พฤติกรรมอินพุต และ backend กำหนดในการตั้งค่า ของ Zshell เอง
เมื่อเปิดจาก Dock หรือ Finder Zshell อ่าน SSH_AUTH_SOCK จาก login shell แบบโต้ตอบเพื่อใช้ agent ที่ dotfiles เลือก เมื่อเปิดจากเทอร์มินัลจะคง agent ที่สืบทอดและใช้ได้
สิทธิ์ของระบบ
โปรแกรมภายในเครื่องที่ทำงานในเทอร์มินัล Zshell สามารถขอใช้กล้องหรือไมโครโฟน หรือควบคุมแอปอื่นผ่าน Apple Events ได้ macOS ถือว่าคำขอเหล่านี้มาจาก Zshell โปรดอนุญาตเฉพาะโปรแกรมที่เชื่อถือ โดยต้องอนุญาตการทำงานอัตโนมัติให้แต่ละแอปเป้าหมายแยกกัน
จัดการสิทธิ์ได้ที่ การตั้งค่าระบบ → ความเป็นส่วนตัวและความปลอดภัย → กล้อง ไมโครโฟน หรือการทำงานอัตโนมัติ การปฏิเสธคำขอจะทำให้ใช้ความสามารถนั้นไม่ได้ Zshell จะไม่ให้สิทธิ์เหล่านี้โดยอัตโนมัติ
โฟกัสตามเมาส์
เปิด การตั้งค่า → เทอร์มินัล → พฤติกรรม → โฟกัสตามเมาส์ เพื่อย้ายโฟกัสเมื่อเมาส์เข้าบาน ปิดไว้เริ่มต้น ใช้ได้กับทั้งสอง backend และเทอร์มินัลด่วน ไม่แย่งโฟกัสระหว่างลาก จากตัวแก้ไข หรือเมื่อเปิดเมนูหรือกล่องโต้ตอบ
terminal.focus-follows-mouse = true
ค้นหา
| การกระทำ | ปุ่มลัด |
|---|---|
| ค้นหา | Cmd+F |
| ค้นหาถัดไป | Cmd+G |
| ค้นหาก่อนหน้า | Shift+Return ในแถบค้นหา |
| ใช้ข้อความที่เลือกค้นหา | Cmd+E |
| ล้างเทอร์มินัล | Cmd+K |
ค้นหาทำงานกับช่องเทอร์มินัลหรือตัวแก้ไขที่มีโฟกัส และยังทำงานเมื่อช่องค้นหาถือโฟกัสแป้นพิมพ์
แก้ไขพรอมป์
คลิกในพรอมป์ shell ที่ทำงานเพื่อย้ายเคอร์เซอร์แล้วพิมพ์ต่อที่ตำแหน่งนั้น ใน zsh ลากบนอินพุตเพื่อเลือกช่วง พิมพ์จะแทนที่ส่วนเลือก ส่วน Backspace หรือ Delete จะลบ ดับเบิล/ทริปเปิลคลิกยังเลือกข้อความเทอร์มินัล โปรแกรมที่เปิดรายงานเมาส์ เช่น TUI เต็มจอ ยังรับเหตุการณ์เมาส์ของตนเอง
หาก shell ซ้อนหรือ shell ที่มาแทนยังไม่โหลดส่วนสนับสนุนแก้พรอมป์ของ Zshell การลากยังเลือกข้อความเพื่อคัดลอกแต่ไม่แก้อินพุต เมื่อออกกลับพรอมป์เดิมจะกลับมาแก้ส่วนเลือกได้
กล่องอินพุตมาตรฐานของ Claude Code รองรับคลิกวางเคอร์เซอร์และลากแก้ไขบนทั้งสอง backend รวมร่างที่ตัดบรรทัดและหลายบรรทัด พิมพ์หรือวางเพื่อแทนส่วนเลือก กด Backspace/Delete เพื่อลบ โหมด normal/visual ของ Vim กล่องโต้ตอบ ตัวยึดตำแหน่งไฟล์แนบหรือข้อความวางที่ยุบ และข้อความสนทนาที่เลื่อนไปแล้วคงพฤติกรรมเลือกข้อความเทอร์มินัลเดิม แอปที่จับเมาส์ยังดูแลอินพุตของตน
เสียงป้อนเข้าจาก Zisla ใช้การวางของเทอร์มินัล ใน Claude Code ยังแทนที่ช่วงอินพุตที่เลือกได้ และรองรับการพูดวลีซ้ำโดยตั้งใจ
ปุ่มลัดแอปเบื้องหน้า
หากปุ่มลัดโปรแกรมเทอร์มินัลชนกับ Zshell คลิกขวาช่องแล้วเปิด บล็อกคำสั่ง Zshell ปุ่มที่มี modifier รวม Ctrl+Return จะไปแอปเบื้องหน้าขณะช่องถือโฟกัสแป้นพิมพ์ คัดลอก วาง และเลือกทั้งหมดยังใช้ได้
ค่านี้ใช้เฉพาะช่องนั้น คลิกขวาเอาเครื่องหมายออกเพื่อคืนปุ่ม Zshell หากแอปจับเมาส์ กด Shift ค้างขณะคลิกขวาเพื่อเปิดเมนู Zshell
คิวคำสั่ง
โฟกัสเทอร์มินัลแล้ว Cmd+Shift+M หรือเลือก เปิด/ปิดคิวคำสั่ง ในจานคำสั่ง แถบเปิดใต้เทอร์มินัลนั้น พิมพ์รายการแล้ว Return หรือ เพิ่มเข้าคิว แต่ละรายการเป็นบรรทัดเดียว การขึ้นบรรทัดใหม่ที่วางถูกแทนด้วยช่องว่าง
เมื่อ zsh เดิมกลับสู่พรอมป์ว่าง Zshell ส่งรายการถัดไปแล้ว Return รายการรันตามลำดับ การส่งอัตโนมัติรอขณะเอเจนต์หรือโปรแกรมเบื้องหน้าครองเทอร์มินัล หรือพรอมป์มีร่างอินพุต ต้องใช้การผสาน zsh ของ Zshell ส่วน shell อื่นและ shell ซ้อนส่งเองได้
แต่ละรายการมี ส่งเดี๋ยวนี้ และ ลบ ปุ่ม ส่งเดี๋ยวนี้ ส่งข้อความและ Return ให้โปรแกรมปัจจุบันทันทีโดยไม่รอพรอมป์ Esc หรือปุ่มปิดซ่อนแถบแต่เก็บคิว ทุกเทอร์มินัลมีคิวของตนเอง การปิดเซสชันหรือออก Zshell ทิ้งคิวนั้น
เส้นทางและ URL
Zshell รู้จัก URL เว็บและเส้นทางไฟล์ในเครื่องที่มีอยู่ซึ่งโปรแกรมพิมพ์ออกมา เส้นทางอาจเต็ม สัมพัทธ์ ~/, ./, ../ หรือเทียบกับไดเรกทอรีทำงานสดของช่อง ส่วนท้ายข้อมูลวินิจฉัย เช่น :42 หรือ :42:7 ไม่ขัดขวางการหาไฟล์
- Command-คลิก เส้นทางเพื่อแสดงใน Finder หรือ URL เพื่อเปิดในเบราว์เซอร์เริ่มต้น
- Command-คลิกขวา เส้นทางเพื่อ แท็บไฟล์ใหม่ / ช่องไฟล์ใหม่ หรือ URL เพื่อ แท็บเบราว์เซอร์ใหม่ / ช่องเบราว์เซอร์ใหม่
- โปรแกรมเต็มจอที่เปิดรายงานเมาส์รับคลิกขวาที่ไม่มี modifier หากต้องการเมนูเทอร์มินัลและช่องของ Zshell ให้กด Shift ขณะคลิกขวา
เอาต์พุต compiler และบทสนทนาเอเจนต์จึงเชื่อมกลับสู่โปรเจกต์เดียวกันได้โดยตรง พฤติกรรมเบราว์เซอร์อยู่ที่ช่องเบราว์เซอร์
การแจ้งเตือน
Zshell ส่งสองเหตุการณ์ไปศูนย์การแจ้งเตือน:
- เสียง bell จากเซสชันที่ไม่ได้โฟกัส
- คำขอ
OSC 777;notifyจากโปรแกรม เช่น build ที่นานหรือเอเจนต์เขียนโค้ด
การแจ้งเตือนเล่นเสียงระบบได้ คลิกแล้วเปิดใช้ Zshell และไปเซสชันที่ส่งโดยตรง macOS ขอสิทธิ์เมื่อเทอร์มินัลพยายามแจ้งครั้งแรก ไม่ใช่ตอนเปิด Zshell
คำสั่งเสร็จสิ้น
เปิด การตั้งค่า → เทอร์มินัล → การแจ้งเตือนคำสั่ง เพื่อให้แจ้งเมื่อคำสั่งจบ:
- คำสั่งที่ทำงานนาน: เลือก 5, 10, 30 หรือ 60 วินาที คำสั่งที่รันอย่างน้อยเท่านี้แจ้งเมื่อเสร็จ ค่าเริ่มต้น ปิด
- คำสั่งล้มเหลว: แจ้งเมื่อ exit status ไม่ใช่ศูนย์ไม่ว่ารันนานเท่าใด เปิดโดยค่าเริ่มต้นในการตั้งค่าใหม่และปิดแยกได้
ค่าใช้กับเทอร์มินัล zsh ที่สร้างหลังเปลี่ยน บนทั้งสอง backend ใช้เหตุการณ์จบคำสั่งของ shell เดิม คำสั่งใน shell ซ้อนหรือโปรแกรมโต้ตอบไม่รายงานการจบแต่ละครั้งผ่านการผสานนี้
บันทึกค่าเดียวกันใน ~/.config/zshell/config.toml ได้:
terminal.notify-finish-seconds = 30
terminal.notify-on-error = trueตั้ง terminal.notify-finish-seconds เป็น 0 เพื่อปิดการแจ้งตามระยะเวลา การส่งแจ้งเตือนเป็นไปตามการตั้งค่า macOS
รายงานความคืบหน้า
โปรแกรมที่ส่งความคืบหน้า OSC 9;4 มีแถบบางเหนือเทอร์มินัล พร้อมสถานะปกติ หยุดชั่วคราว และผิดพลาดที่แยกชัด ไม่ต้องเปิดอะไร หากโปรแกรมรายงาน ช่องก็แสดง
คลิปบอร์ด การวางไฟล์ และความปลอดภัยการวาง
- ยืนยันก่อนอ่านคลิปบอร์ด
OSC 52ขอคลิปบอร์ด macOS ได้ รวมจากโฮสต์ SSH ระยะไกล Zshell ถามก่อนส่งคืน - ระบุการวางที่เสี่ยง ข้อความหลายบรรทัดหรือคล้ายคำสั่งต้องยืนยันก่อน ไม่ถูกส่งทันที
- ไฟล์และภาพหน้าจอเป็นพาธที่ปลอดภัยกับ shell ไฟล์ Finder แทรกเป็นพาธเต็มในเครื่องหมายคำพูด ภาพอย่างเดียวบันทึกเป็น PNG ชั่วคราวส่วนตัวแล้ววางพาธ บานระยะไกลอัปโหลดไฟล์และภาพไปยังโฮสต์ก่อน
อินพุตปุ่ม Option
ค่าเริ่มต้นให้ Option อยู่กับแหล่งอินพุต macOS ที่ใช้งาน เพื่อให้เค้าโครงอย่าง Polish Pro พิมพ์อักขระผสมได้ เปิด ใช้ Option เป็น Alt/Meta ในการตั้งค่าเมื่อต้องการส่งชุดปุ่ม Option ให้โปรแกรมเป็นปุ่มลัด Meta ดู terminal.macos-option-as-alt
คำสั่ง zshell
ทุกเทอร์มินัล Zshell มี CLI ที่รู้จักโปรเจกต์:
zshell # สร้างโปรเจ็กต์ในไดเรกทอรีปัจจุบัน
zshell vim ~/src/app.swift # สร้างโปรเจ็กต์และเรียกใช้ argv นี้ในเทอร์มินัลแรก
zshell +themes # เรียกดูและดูตัวอย่างธีมแบบโต้ตอบ
zshell +themes --list --dark # แสดงชื่อธีมโดยไม่เปิดตัวเลือกธีม
zshell +help # แสดงกลุ่มคำสั่งทั้งหมดตัวเลือกธีมพรีวิวทุกการเลือกทั่วแอป Return บันทึก และ Escape คืนธีมก่อนหน้า
ฟอนต์
Zshell มี JetBrains Mono และสัญลักษณ์ Nerd Font ฟอนต์ monospace ที่ติดตั้งเปลี่ยนฟอนต์ Latin ได้ และฟอนต์ CJK ที่ติดตั้งเพิ่มไว้ก่อนฟอนต์สัญลักษณ์และระบบสำรองได้ ดู font-family, terminal.font-fallback-family, font-size, terminal.font-thicken และ terminal.line-height
เทอร์มินัลด่วนส่วนกลาง
ขณะ Zshell ทำงาน Cmd+I หรือ เทอร์มินัล → เทอร์มินัลด่วน จะแสดงหรือซ่อนเทอร์มินัลอิสระ ปรับขนาด ความทึบ และปุ่มลัดที่ การตั้งค่า → เทอร์มินัล → เทอร์มินัลด่วน
การทำงานของเซสชัน: ใช้พื้นที่ทำงานเดิม (ค่าเริ่มต้น) / พื้นที่ทำงานใหม่ทุกครั้ง. การใช้ซ้ำจะเก็บบานหน้าต่างและงาน พื้นที่ใหม่จะสิ้นสุดเมื่อซ่อน โหมดจะเปลี่ยนในการแสดงครั้งถัดไป และพื้นที่เดิมยังคงอยู่เมื่อสลับกลับ ประวัติคำสั่งเป็นไปตามการตั้งค่าเชลล์ พื้นที่ทำงานใหม่จะเริ่มด้วยเทอร์มินัลว่างหนึ่งช่องเสมอ โดยไม่คืนค่าผลลัพธ์ ผังบานหน้าต่าง หรือสถานะเซสชันก่อนหน้า
แบ่งด้วย แบ่งไปขวา / แบ่งลง เมนูคลิกขวา หรือ Cmd+D / Cmd+Shift+D การเก็บข้อมูลด้านล่างใช้กับพื้นที่ที่ใช้ซ้ำ รวมถึงอัตราส่วนและโฟกัส
- ปุ่มลัด Esc การคลิกด้านนอก หรือการเสียโฟกัสจะซ่อนหน้าต่างเท่านั้น เชลล์ ข้อความที่ป้อน ประวัติ และงานเดิมยังคงทำงาน
- ปักหมุดหน้าต่างเพื่อให้ยังแสดงเมื่อสลับแอป ขนาด ความทึบ และสถานะปักหมุดยังคงอยู่เมื่อซ่อน
- รัน
exitเพื่อจบเซสชัน การเปิดอีกครั้งจะเริ่มเชลล์ใหม่
เปิด terminal.preserve-sessions ก่อนเปิดเทอร์มินัลด่วนใหม่เพื่อให้ทำงานต่อหลังออกจาก Zshell ตามปกติ เมื่อเปิดใหม่ทั้งสองแบ็กเอนด์จะเชื่อมต่อกับเชลล์เดิม Zshell → ออกและสิ้นสุดทุกเซสชัน จะจบเซสชันที่ซ่อนด้วย การรีสตาร์ต macOS จะจบเซสชัน
เรียกใช้ด่วน ซึ่งบันทึกและรันคำสั่ง เป็นคนละคุณสมบัติ
คำแนะนำคำสั่ง Vim
ปรับคำแนะนำใน การตั้งค่า → เทอร์มินัล → พฤติกรรม → คำแนะนำคำสั่ง Vim แล้วเปิดแท็บ ข้อมูล ด้านขวา ส่วน คำสั่ง VIM ปรากฏใต้ข้อมูลเซสชันเมื่อ Vim, Vi หรือ Neovim ทำงาน เปิดโดยค่าเริ่มต้นในการตั้งค่าใหม่และมีผลทันทีต่อเทอร์มินัลเดิมบนทั้งสอง backend
รายการคำสั่งทั่วไปครบถ้วนยังอยู่เสมอ เปลี่ยนเฉพาะลำดับความสำคัญ Normal วาง :w, :q, yy, p/P ก่อน Visual Block วาง I/A การแก้บล็อกและเคลื่อนมุมก่อน ส่วน Insert, Replace, Visual, Visual Line, Select, บรรทัดคำสั่ง และค้นหามีลำดับของตน ทุกคำสั่งระบุโหมดที่ใช้ ค้นด้วยปุ่ม คำอธิบาย หรือชื่อโหมดได้ คำอธิบายและ UI ค้นหาตามหนึ่งใน 17 ภาษาของแอป ล้างคำค้นเพื่อคืนรายการเต็ม คำแนะนำมีไว้ดูอ้างอิง ไม่ส่งอินพุตเข้าตัวแก้ไข
ตัวแก้ไขในเครื่องตรวจจาก executable เบื้องหน้า ภายใน SSH, Mosh หรือ terminal multiplexer ตรวจด้วยบรรทัดโหมด/สถานะ Vim ที่เห็นและเค้าโครงหน้าจอโดยไม่ติดตั้งปลั๊กอินระยะไกล เปิด showmode หรือแถบสถานะที่จำแนกได้ไว้ การตั้งค่าที่ซ่อนหรือเปลี่ยนป้ายโหมดอาจกลับไปคำแนะนำ Normal หรือทำให้ตรวจระยะไกลไม่ได้ การ map ปุ่มเองไม่ถูกตีความ เก็บตัวอย่างเฉพาะแผงข้อมูลที่ใช้งาน คำแนะนำหายเมื่อโปรแกรมเบื้องหน้าเปลี่ยนหรือจำแนกตัวแก้ไขไม่ได้แล้ว
เปิดในไฟล์ตั้งค่าด้วย terminal.vim-command-hints = true ได้เช่นกัน