3 คะแนน โดย GN⁺ 2025-09-24 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • libghostty กำลังถูกพัฒนาให้เป็น ไลบรารีเทอร์มินัลอีมูเลเตอร์แบบฝังตัว ที่สามารถใช้งานได้ในทุกแอปพลิเคชัน
  • องค์ประกอบแรกอย่าง libghostty-vt เป็น API แบบ ไร้การพึ่งพาใด ๆ ที่ปรับแต่งมาเพื่อการพาร์สและการคงสถานะ
  • เกิดขึ้นมาเพื่อแก้ปัญหาความซับซ้อนของ การจำลองเทอร์มินัล และปัญหาการต้องเขียนซ้ำ โดยมุ่งสู่การรองรับข้ามแพลตฟอร์มและการพกพาที่สูง
  • ในอนาคตมีแผนขยายไลบรารีเพิ่มเติม เช่น การจัดการอินพุตคีย์บอร์ด, การเรนเดอร์ด้วย GPU, การเชื่อมต่อกับเฟรมเวิร์กหลากหลายแบบ
  • ตอนนี้ Zig API สามารถทดสอบได้แล้ว และ C API ก็มีแผนจะเปิดเผยในเร็ว ๆ นี้ พร้อมเปิดรับฟังความคิดเห็นจากผู้ใช้อย่างจริงจัง

บทนำและที่มาของการพัฒนา libghostty

  • libghostty เป็น โครงการไลบรารี ที่ออกแบบมาเพื่อให้ทุกแอปพลิเคชันสามารถฝังความสามารถของเทอร์มินัลอีมูเลเตอร์สมัยใหม่ที่รวดเร็วและสมบูรณ์ได้
  • ปัจจุบันมีโปรแกรมจำนวนมากที่ต้องลงมือสร้างเทอร์มินัลอีมูเลเตอร์ในแบบของตนเอง หรือแยกทำเฉพาะความสามารถด้านเทอร์มินัลในรูปแบบที่จำกัดมาก
  • ชุดการติดตั้งการจำลองเทอร์มินัล ที่ถูกพัฒนาแยกกันเหล่านี้ มักเป็นโค้ดแบบ ad-hoc ใช้ครั้งเดียวจำนวนมาก และรับมือกับกรณียกเว้นกับความซับซ้อนได้ไม่เพียงพอ จึงมักเจอปัญหา ความไม่สมบูรณ์, บั๊ก, ประสิทธิภาพตก
  • สำหรับนักพัฒนาส่วนใหญ่ การติดตั้งการจำลองเทอร์มินัลไม่ใช่ธุรกิจหลัก จึงมีความต้องการ โซลูชันกลางที่ใช้ซ้ำได้สูง
  • libghostty มอบ C API แบบข้ามแพลตฟอร์ม ที่ออกแบบด้วยการพึ่งพาให้น้อยที่สุด ทำให้แอปพลิเคชันหลากหลายสามารถใช้ความสามารถด้านการจำลองเทอร์มินัลที่เสถียรและรวดเร็วได้

libghostty-vt: จุดเริ่มต้นของไลบรารีตัวแรก

  • libghostty-vt เป็นไลบรารีที่ ไม่พึ่งพาอะไรเลยแม้แต่ libc และมี API สำหรับการพาร์สลำดับคำสั่งของเทอร์มินัล รวมถึงการคงสถานะของเทอร์มินัล เช่น ตำแหน่งเคอร์เซอร์ สไตล์ และการขึ้นบรรทัดใหม่
  • การพาร์สลำดับคำสั่งของเทอร์มินัลนี้ไม่เพียงเป็นความสามารถหลักของเทอร์มินัลอีมูเลเตอร์เท่านั้น แต่ยังจำเป็นอย่างยิ่งสำหรับเว็บไซต์ที่ต้องแสดงผลแบบมีสไตล์อย่างง่ายด้วย เช่น GitHub Actions, Vercel build logs เป็นต้น
  • การพาร์สโปรโตคอลเทอร์มินัลอาจดูเรียบง่ายบนผิวเผิน แต่ความยากในการติดตั้งจริงสูงมาก และมีกรณีที่ implementation หลายตัว เช่น Jediterm แสดงปัญหาในการจัดการบางลำดับคำสั่ง
  • นักพัฒนาบางคนอาจหยุดอยู่แค่การพาร์ส ANSI sequence แบบง่าย ๆ แต่ด้วยความต้องการด้านการจัดการสไตล์ที่ซับซ้อน เช่น รูปแบบการเขียน RGB หลายแบบ และความต้องการความเข้ากันได้อย่างสมบูรณ์ จึงจำเป็นต้องมี พาร์เซอร์ที่ประณีต
  • libghostty-vt ถูกแยกออกมาจากแกนหลักที่ผ่านการพิสูจน์แล้วของ Ghostty และมีคุณสมบัติอย่าง การพาร์สที่ปรับแต่งด้วย SIMD, การรองรับ Unicode ที่ยอดเยี่ยม, โครงสร้างหน่วยความจำที่ล้ำหน้า, ความเข้ากันได้กับโปรโตคอลอย่างกว้างขวาง (Kitty Graphics, Tmux Control Mode เป็นต้น)
  • มีให้ใช้งานเป็น C API แบบไร้การพึ่งพาในไฟล์เดียว ทำให้ฝังลงในทุกภาษาทั่วไปและทุกสภาพแวดล้อมได้ง่าย โดยเริ่มรองรับ macOS, Linux(x86_64, aarch64) ก่อน และมีแผนค่อย ๆ ขยายไปยัง Windows, อุปกรณ์ฝังตัว, WASM เป็นต้น
  • รองรับเป้าหมายได้ครอบคลุมกว่า Ghostty GUI

libghostty ที่จะขยายต่อในระยะยาว

  • หลังจาก libghostty-vt แล้ว จะมีไลบรารีชุดต่อไปตามมาเพื่อมอบความสามารถเพิ่มเติม เช่น การจัดการอินพุต (การเข้ารหัสคีย์บอร์ด เป็นต้น), การเรนเดอร์ด้วย GPU(OpenGL, Metal), GTK widget และ Swift framework
  • การขยายความสามารถเหล่านี้จะถูกจัดเป็นโมดูล เพื่อทำให้การพึ่งพา ขนาดโค้ด และความซับซ้อนในการบำรุงรักษาต่ำที่สุด

สถานะการพัฒนา libghostty-vt

  • PR (pull request) ที่เปิดเผย libghostty-vt ภายนอกในรูปแบบโมดูล Zig เพิ่งถูก merge ไม่นานนี้ และนักพัฒนา Zig สามารถใช้งานได้ทันที
  • C API อยู่ระหว่างการนิยาม และจะเปิดให้ทดสอบในเร็ว ๆ นี้ (ตรรกะแกนหลักเป็นซอร์สที่ผ่านการใช้งานจริงใน Ghostty มานานหลายปีแล้ว)
  • ในแอป Ghostty บน macOS ก็ใช้ C API ภายในเช่นกัน แต่ header ภายในปัจจุบันไม่เหมาะกับการเปิดเผยภายนอกและการใช้งานทั่วไป จึงกำลังออกแบบ C API ชุดใหม่ทั้งหมด
  • libghostty มี การจัดการเวอร์ชัน แยกจากแอปพลิเคชัน Ghostty และตอนนี้อยู่ในช่วงอัลฟา โดยคาดหวังการนำไปใช้ตั้งแต่เนิ่น ๆ และ การมีส่วนร่วมจากนักพัฒนา language binding
  • ตั้งเป้าเปิดตัวรีลีสแรกที่มี tag ภายใน 6 เดือน

คำขอความคิดเห็นจากผู้ใช้

  • ตอนนี้ยังอยู่ใน ขั้นตอนออกแบบ API ดังนั้นความเห็นและฟีดแบ็กจากผู้ใช้จริงจึงสำคัญมาก
  • นอกจาก Ghostty แล้ว ยังมีสมาชิกจากชุมชนหลากหลายกลุ่มที่กำลังพัฒนาโครงการบนพื้นฐานของ libghostty และหวังว่าจะมีผู้ใช้เข้ามามีส่วนร่วมเพิ่มขึ้นอีก
  • หากมีไอเดียการใช้งานโครงการหรือความต้องการต่าง ๆ สามารถสื่อสารกับนักพัฒนาได้โดยตรงผ่าน Ghostty Discord หรืออีเมล
  • ปัจจุบัน libghostty ยังเป็นเวอร์ชันอัลฟา API จึงยังไม่เสถียร แต่ ตรรกะแกนหลักมีเสถียรภาพสูงที่ผ่านการพิสูจน์ในการใช้งานจริง

แนวโน้มและผลกระทบในอนาคต

  • ด้วยการที่แอปพลิเคชัน Ghostty บรรลุเสถียรภาพ แล้ว ตอนนี้จึงสามารถเดินหน้าไปสู่เป้าหมายที่ใหญ่กว่าคือ libghostty ได้
  • หาก libghostty ถูกใช้อย่างแพร่หลายในแอปพลิเคชันหลากหลายประเภท ก็อาจสร้าง อิทธิพลและแรงกระเพื่อมต่อระบบนิเวศ ได้มากกว่า Ghostty ในฐานะแอปเดี่ยว
  • เมื่อการใช้งาน libghostty เพิ่มขึ้น ตัว Ghostty เองก็จะยิ่งได้ความสามารถที่หลากหลายและเสถียรภาพที่สูงขึ้น
  • Ghostty และ libghostty จะเติบโตไปในลักษณะที่เสริมกันและกัน และคาดว่าจะเป็นประโยชน์ต่อทั้งนักพัฒนาและผู้ใช้

3 ความคิดเห็น

 
yshrust 2025-09-24

ผมใช้มาตั้งแต่ 1.0 แล้ว นอกจากไม่มีการเลื่อนหน้าจอและการค้นหา ก็พอใจมากครับ 555 เดิมใช้ iTerm อยู่ แต่ตอนนี้ปักหลักกับตัวนี้แล้วครับ

 
GN⁺ 2025-09-24
ความคิดเห็นบน Hacker News
  • คนนี้นี่ระดับตำนานจริง ๆ ต่อให้ผ่านทั้งการก่อตั้งบริษัท เข้าตลาดหุ้น และขายกิจการมูลค่าหลายพันล้านมาแล้ว ก็ยังกลับมาสู่โลกของการเขียนโค้ดอีกครั้ง

    • ผมคิดว่า Hashimoto ไม่ได้แค่เป็นอัจฉริยะ แต่สิ่งที่น่าทึ่งที่สุดคือความสามารถด้าน abstraction ที่ไม่ธรรมดาในการทำให้ระบบและอินเทอร์เฟซแยกเป็นโมดูลอย่างถึงที่สุดและลดการพัวพันกันให้น้อยที่สุด รู้สึกเหมือนเป็นคนที่นำปรัชญา Simple Made Easy ของ Rich Hickey มาปฏิบัติจริง ซอฟต์แวร์ของเขาให้ความรู้สึกเหมือนถูกออกแบบมาในแบบที่มันแทบจะต้องทำงานได้อย่างถูกต้องอยู่แล้ว และพอได้ลองใช้ Ghostty ครั้งแรก ปกติเวลาใช้ iTerm2 กับธีม Zsh/Powerlevel10k จะมีอาการดีเลย์ตอนเรนเดอร์นิด ๆ อยู่เสมอ แต่ใน ghostty ตอบสนองแทบจะทันที

    • ทั้งอิจฉาและรู้สึกเหมือนชีวิตในฝันเหมือนกัน พอมีทรัพย์สินแล้วก็ยังสร้างสรรค์งานต่อไปเพื่อโปรเจกต์ล้วน ๆ อยู่ในจุดที่ไม่ต้องยอมลดคุณภาพเพราะเรื่องเงิน ทำให้นึกถึงคำคมเก่าของ Knuth

      การปล่อยให้นักวิทยาการคอมพิวเตอร์หลายพันคนได้ทำสิ่งที่พวกเขาอยากทำอย่างอิสระ คือสิ่งที่ขับเคลื่อนความก้าวหน้าทางวิชาการ

      แน่นอนว่าโปรเจกต์ที่ทำด้วยความรักกำลังประสบความสำเร็จมากขึ้นเรื่อย ๆ มันแสดงให้เห็นว่าถ้าไม่หมกมุ่นกับเงินก็อาจสร้างผลลัพธ์ที่ดีกว่าได้ ในอีกมุมหนึ่งมันก็ทำให้ย้อนคิดถึงโครงสร้างสังคมและเศรษฐกิจโดยรวม ว่าการจะใช้ชีวิตแบบนี้ได้ก็ต้องมีทุนตั้งต้นระดับหนึ่ง อย่างที่ Knuth ว่าไว้ ถ้าเราได้เวลาเพิ่มอีกหน่อย ทุกคนก็น่าจะสร้างผลลัพธ์ที่ดีขึ้นได้ แต่พอทุกอย่างต้องรีบ เราก็มักต้องเสียสละหลายอย่าง และอย่างอีกคำคมหนึ่งของเขา

      ถ้าพยายาม optimize ทุกอย่าง คุณจะไม่มีวันมีความสุข

      พอมาถึงตรงนี้ก็เลยต้องถามว่า เรากำลังตอบแทนคนที่แก้ปัญหาได้เก่งและทำให้ชีวิตง่ายขึ้นอย่างเหมาะสมจริงหรือเปล่า หรือแค่กำลังเพิ่มคะแนนในเกมที่ไร้ความหมาย แล้วสังคมแบบไหนกันที่จะสร้างตำนานได้มากขึ้น? จะทำอย่างไรให้เกิดสังคมที่คนอย่าง Mitchell ใช้ชีวิตตามแพสชันได้ โดยไม่ต้องแบกรับภาระในการอธิบายคุณค่าของคุณภาพให้บอร์ดบริหารฟัง

    • เคยเจอตัวจริงมาแล้ว เป็นคนอบอุ่นและนิสัยดีมาก ตอนก่อนก่อตั้ง Hashicorp เขาอยู่ที่ Kiip แล้วเราได้กินมื้อเที่ยงด้วยกันในงานคอนเฟอเรนซ์ Mitchell เป็นแฮกเกอร์ตัวจริง รู้สึกได้เลยว่าเขารักทุกอย่างเกี่ยวกับคอมพิวติ้งจากใจจริง โดยเฉพาะในงานคอนเฟอเรนซ์ด้าน distributed systems เขาจะอินมาก ทำอะไรก็น่าจะสำเร็จแน่ ๆ พอได้เจอ Ghostty และเริ่มใช้ ก็พอใจมากและใช้ต่อเนื่องมาตลอด

    • แล้วคนนี้ก็ยังทุ่มเทกับการพัฒนาซอฟต์แวร์ tty อีกด้วย ซึ่งเป็นหนึ่งในมุมที่เนิร์ดจัดมากของ Unix technology stack

    • ผมใช้ ghostty ทุกวันอยู่แล้ว แต่เพิ่งรู้ตอนนี้เองว่าคนสร้างคือ Mitchell Hashimoto เป็นประสบการณ์ที่เจ๋งมากจริง ๆ

  • Ghostty เจ๋งมาก น่าตื่นเต้นที่ terminal emulator แบบ omni-platform ตัวจริงอาจขยายไปถึงมือถือได้ด้วย ที่ Ghostty เขียนด้วย Zig ก็ทำให้ทึ่งเหมือนกัน นี่เป็นโปรแกรมแรกที่ผมใช้ซึ่งสร้างด้วย Zig และโครงสร้างรีโพก็ดูเหมือนสไตล์ Golang เป๊ะเลย เลยรู้สึกสนุกดี https://github.com/ghostty-org/ghostty

    • (มันไม่ได้เหมือน layout ของ Go) ซึ่งจริง ๆ ก็ดีแล้ว เพราะโครงสร้างไดเรกทอรีอย่าง pkg/ src/ ของ go ไม่ได้เป็นโครงสร้างที่ดีนัก
  • ผมอยากชอบ Ghostty มากจริง ๆ แต่ยังมีจุดที่เสียดายอยู่

    • ยังไม่รองรับการค้นหาด้วย ⌘F
    • ยังไม่มีวิธีเลือก/คัดลอก output ก่อนหน้าหรือสตริงบางอย่างด้วยคีย์บอร์ดล้วน ๆ
    • ปุ่ม ⌘. ยังส่ง CTRL-C ไม่ได้ (เป็นฟีเจอร์ที่ผู้ใช้แม็คน่าจะคาดหวัง)
    • การเรนเดอร์ฟอนต์ยังไม่เนียนเท่า Terminal.app ลองปรับด้วย font-thicken-strength แล้ว แต่ก็ยังไม่เหมือน 100% ดูเหมือนว่าจะเป็นไปไม่ได้หรือยากมากเพราะลักษณะของการเรนเดอร์ด้วย Metal สำหรับคนที่จ้องแต่ข้อความทั้งวัน นี่เป็นเรื่องสำคัญมาก
    • ตั้งค่าให้กด ⌘. แล้วส่ง CTRL-C ได้
      keybind = "cmd+.=text:\x03"
      
      การพูดคุยที่เกี่ยวข้อง: https://news.ycombinator.com/item?id=42889411
    • จะรองรับในเร็ว ๆ นี้: https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • การค้นหาใน scrollback จะเข้ามาในเวอร์ชัน 1.3 แต่ดูเหมือนน่าจะต้องรออีกประมาณ 6 เดือน Ghostty เองก็พัฒนาเร็วมากช่วงนี้ ดังนั้น release notes ของ 1.2 ก็น่าอ่านเหมือนกัน
    • เห็นคะแนนขึ้น ๆ ลง ๆ แล้วคิดว่าข้อความที่ผมเขียนอาจทำให้คนเข้าใจผิด จริง ๆ แล้วแนวคิดการทำ native GUI แยกตามแต่ละ vendor บนความเป็น cross-platform นั้นเท่มาก ผมดีใจมากที่โปรเจกต์นี้มีอยู่จริง แค่ในความเห็นส่วนตัวยังรู้สึกว่ามันยังไม่สมบูรณ์นัก แต่ก็ยังติดตามด้วยความคาดหวัง
    • ข้อสังเกตข้อที่สองนี่เอง (การเลือก output ก่อนหน้าด้วยคีย์บอร์ด) คือเหตุผลหลักที่ผมยังใช้ WezTerm ต่อไป
  • ความหลงใหลและความละเอียดที่ Mitchell ใส่ให้กับ developer experience นั้นน่าทึ่งมาก ผมยังจำความประทับใจตอนใช้ Vagrant ครั้งแรกที่ซานตาโมนิกาในปี 2011 ได้ชัดเจน เดิมทีไม่เคยคิดจะเปลี่ยนจาก iTerm2 เลย แต่พอได้ลอง Ghostty ก็ตกหลุมรักทันที

  • ช่วงนี้ผมใช้ ghostty ทุกวัน เพิ่งย้ายมาใช้ไม่นาน บน macOS พอแมป caps lock เป็น cmd แล้ว cmd+c ก็ใช้งานได้ดี การตั้งค่าพื้นฐานฉลาดและดีมาก โดยรวมพอใจหมด ยกเว้นเรื่องที่ปรับแต่งไม่ค่อยง่าย ธีม Gruvbox light ก็ดูดีมากด้วย การที่เขียนด้วย Zig ก็เท่มาก ถ้าใครสงสัยว่า Zig พร้อมสำหรับงานใช้งานจริงหรือยัง ghostty ก็น่าจะเป็นคำตอบนั้น ผมคงไม่กลับไปใช้ terminal ตัวอื่นอีกแล้ว เป็นประสบการณ์ที่น่าพอใจมากจริง ๆ เพิ่มเติม: ถ้าเอา ghostty ไปใช้คู่กับ aerospace ก็แทบจะได้สภาพแวดล้อมบนแม็คที่เกือบสมบูรณ์แบบสำหรับการใช้คีย์บอร์ดล้วน

    • อยากรู้ว่าเพราะอะไรถึงควรใช้ ghostty (ในฐานะคนที่ใช้ Terminal.app เป็นหลัก)
    • Clickhouse กับ Bun ก็เป็นโปรเจกต์ที่น่าทึ่งมาก
  • ตอนนี้ผมใช้ ghostty บน AirMac เครื่องเก่าที่พี่ส่งต่อมาให้ตอนเลิกเขียนโค้ดแล้ว ขอบคุณจากใจจริงที่ทำ ghostty ขึ้นมา ถึงจะเป็นเรื่องเล็ก แต่การไม่มี dependency กับ libc กลับรู้สึกมีคุณค่ามากอย่างประหลาด

  • ฮิสโตแกรมวิเคราะห์ความถี่ของ visidata เรนเดอร์ออกมาไม่ถูกต้อง บางส่วนแสดงเป็นสี่เหลี่ยมได้ แต่ที่เหลือขึ้นเป็นเครื่องหมายคำถามในรูปเพชร ปัญหานี้ทำให้ผมยังย้ายออกจาก iTerm ไม่ได้ ผมไม่รู้ด้วยซ้ำว่าควรค้นหาด้วยคีย์เวิร์ดอะไร เลยยิ่งแก้ยาก

    • อาจเป็นไปได้ว่าฟอนต์หลักและฟอนต์สำรองไม่มี codepoint นั้น ๆ ถ้าเป็นผู้ใช้ ghostty แนะนำให้ลองเช็กใน iTerm2 ว่ากลิฟนั้นแสดงด้วยฟอนต์อะไร แล้วค่อยไปหาว่า ghostty มีการตั้งค่าที่เหมาะสมหรือไม่
  • ผมกำลังจับตาดู Ghostty ต่อไปด้วยความหวังว่า text reflow ของมัน (โดยเฉพาะเมื่อรวม scrollback) จะช่วยแก้ปัญหาใน terminal ที่อิง Neovim ได้ด้วย ดีใจมากที่ Ghostty กำลังนำพานวัตกรรมใหม่เข้ามาสู่สภาพแวดล้อมเทอร์มินัล https://github.com/neovim/neovim/issues/33155

    • อยากรู้ว่าคุณเป็น power user ของ neovim terminal หรือเปล่า ก่อนหน้านี้ผมเคยพยายามเปลี่ยนเวิร์กโฟลว์จากแบบที่ให้ tmux รัน neovim ไปเป็นให้ neovim จัดการ terminal เองโดยตรง เพราะคิดว่าน่าจะสะดวกที่เปิดไฟล์ได้ในบัฟเฟอร์เดียว ไม่ต้องเจอปัญหาเปิดไฟล์ใน pane หนึ่งแล้วพบว่ามันถูกเปิดอยู่ใน neovim instance อื่นอยู่แล้ว ตอนทดสอบ ผมไม่ได้รู้สึกว่ามีปัญหา reflow อะไรเด่น ๆ ที่น่าจะแก้ได้ด้วย libghostty กลับรู้สึกว่าการปรับตัวเข้ากับ paradigm ใหม่ยากกว่า ในฐานะคนที่ชอบ terminal ในตัวของ neovim มาก อยากฟังประสบการณ์ว่าการใช้ libghostty จะช่วยให้ดีขึ้นตรงไหน
  • ผมอยากใช้ ghostty มากจริง ๆ แต่เพราะยังไม่มี cmd+f เลยยังไม่ได้ลอง ถึงอย่างนั้นก็ยังตื่นเต้นกับพัฒนาการของโปรเจกต์นี้มาก

    • อยู่ใน roadmap แล้ว
      https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • ใช้วิธีเปิดทั้งบัฟเฟอร์ใน text editor เริ่มต้นด้วยปุ่มอย่าง cmd+shift+f เพื่อค้นหาได้ หลายคนอยู่กับวิธีนี้ได้ และผมเองก็เหมือนกัน มันเป็นทางเลือกที่ใช้งานได้จริงพอสมควรจนกว่าการค้นหา scrollback แบบฝังในตัวจะมา
    • สงสัยว่าทำไมฟีเจอร์นี้ถึงไม่ถูกเพิ่มมาตั้งแต่ช่วงแรก ทั้งที่การค้นหา history ใน terminal ถือเป็นสิ่งจำเป็น หรือมีเหตุผลด้านความซับซ้อนบางอย่าง? จริง ๆ แล้ว Mitchell เองก็เคยเปิด issue นี้ไว้ตั้งแต่ 2 ปีก่อน
      https://github.com/ghostty-org/ghostty/issues/189
    • หลายคนบ่นเรื่องไม่มีการค้นหา history แบบ cmd+f แต่สำหรับผม ต่อให้มีผมก็ไม่เคยใช้เลย ถ้าใครอธิบายเวิร์กโฟลว์ที่ใช้อยู่ได้ก็น่าจะดี เผื่อผมกำลังพลาดอะไรสำคัญไป
    • อีกวิธีก็คือเปิด tmux ข้างในแล้วแมป cmd+f ไปที่ copy-mode + /