1 คะแนน โดย GN⁺ 2025-07-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Helix 25.07 มาพร้อมกับ การเปลี่ยนคอมโพเนนต์แกนหลัก และการเพิ่มฟีเจอร์ใหม่จำนวนมาก
  • การใช้งานและเวิร์กโฟลว์ดีขึ้นอย่างมาก เช่น ตัวสำรวจไฟล์, การแสดงสีเอกสาร LSP, การปรับปรุงโหมดคำสั่ง
  • มีการนำ crate ใหม่ชื่อ Tree-house มาใช้เพื่อปรับปรุง syntax highlighting และการเพิ่มประสิทธิภาพของคิวรี
  • Tree-house เสริมความสามารถด้าน การจัดการ injection และ local, รวมถึงประสิทธิภาพและความสามารถในการบำรุงรักษาอย่างมาก
  • วางรากฐานสำหรับการปรับปรุง ประสบการณ์หลายภาษาและความเร็ว ที่กว้างขึ้นในอนาคต

อัปเดตสำคัญของ Helix 25.07

การออกเวอร์ชัน Helix 25.07 ประกอบด้วยการเปลี่ยนฟังก์ชันแกนหลักที่รอกันมานาน และการเพิ่มฟีเจอร์ใหม่หลากหลายรายการ โดยเวอร์ชันนี้มี ผู้มีส่วนร่วม 195 คน Helix คือ modal text editor ที่รองรับ multiple selections, LSP, Tree-sitter และ DAP แบบทดลอง

ฟีเจอร์ใหม่หลัก

ตัวสำรวจไฟล์

  • ใน 25.07 ได้เพิ่มฟีเจอร์ ตัวสำรวจไฟล์ ที่ใช้งานได้ด้วย <space>e
  • ตัวสำรวจนี้มี UI คล้ายกับ telescope
  • ช่วยให้สำรวจโครงสร้างแบบลำดับชั้นภายในไดเรกทอรีได้ง่าย และควบคุมการสำรวจ โปรเจกต์ขนาดใหญ่ ได้ละเอียดขึ้น

การแสดงสีเอกสาร LSP

  • ตอนนี้ Helix สามารถ ขอข้อมูลสีของเอกสารจากเซิร์ฟเวอร์ LSP และแสดงช่วงสี RGB แบบ inline ได้
  • ตัวอย่างเช่น สามารถรับสีจาก tailwindcss-language-server, vscode-css-language-server เป็นต้น และดูกรอบสีในโค้ดได้ทันทีแบบเห็นภาพ

การปรับปรุงความสามารถของโหมดคำสั่ง (:)

  • มีการ เขียนใหม่ทั้งหมดสำหรับโค้ด parse คำสั่งและ autocomplete เพื่อแก้บั๊กและเพิ่มความสะดวกในการใช้งาน
  • เพิ่ม การรองรับ flag เช่น --no-format ให้กับคำสั่งตระกูล :write
  • เพิ่มความสามารถในการขยายตัวแปร/ค่าในคำสั่ง (%{variable_name}, %sh{명령어} เป็นต้น) และ autocomplete
  • มีการเปลี่ยนเป็น โครงสร้าง parser ที่ขยายต่อได้ เพื่อรองรับการจัดการค่าป้อนเข้าที่ซับซ้อน และทำให้การขยายคำสั่งในอนาคตง่ายขึ้น

Tree-house: โครงสร้างใหม่สำหรับการผสานรวม Tree-sitter

Tree-sitter คืออะไร

  • Tree-sitter คือเฟรมเวิร์กสำหรับสร้างและใช้งาน parser ที่รวดเร็วและทนต่อข้อผิดพลาด
  • สามารถเขียนกฎ parser ด้วยไวยากรณ์แบบ DSL และสร้าง/ใช้งาน syntax tree ภายในเอดิเตอร์หรือเครื่องมือต่าง ๆ ได้
  • ตัวอย่างการใช้งาน ได้แก่ code navigation และ highlighting ของ GitHub, spell-check ของ code server, เครื่องมือ diff เป็นต้น
  • คิวรีของ Tree-sitter ใช้สำหรับจับคู่แพตเทิร์นของ subtree และจับโหนดในไวยากรณ์

การเชื่อมต่อ Tree-sitter แบบเดิมของ Helix และปัญหา

  • ในช่วงแรก Helix ใช้ Rust binding ทางการ (tree-sitter crate) และตัวไฮไลต์ tree-sitter-highlight
  • tree-sitter-highlight เป็นแบบ ไม่ incremental จึงต้อง parse ทั้งเอกสารใหม่ทุกครั้ง ทำให้เกิดปัญหาด้านประสิทธิภาพและการใช้ทรัพยากรสิ้นเปลือง
  • Helix จึง fork ตัวไฮไลต์ขึ้นมาเองเพื่อปรับปรุงเรื่องนี้ แต่เมื่อเวลาผ่านไปความซับซ้อนเพิ่มขึ้นจนบำรุงรักษาได้ยาก

การนำ Tree-house มาใช้และข้อดี

  • Tree-house เน้นที่ โครงสร้าง parsing/query ที่แยกออกจากกัน, โค้ดที่สะอาด, การปิดจบบั๊กเรื้อรังเดิม ๆ และโครงสร้างที่รองรับอนาคต (เช่น parsing แบบขนาน)
  • จุดแข็งสำคัญคือการจัดการ injection ที่แข็งแกร่ง

Injection: รองรับหลายภาษา/หลายเลเยอร์

  • injection คือวิธีที่เมื่อมี Rust code block อยู่ใน Markdown ระบบจะ parse เฉพาะช่วงนั้นเป็น Rust แยกต่างหาก
  • แม้เป็นเคสซับซ้อน (เช่น Markdown ในคอมเมนต์ของ Rust และภายในนั้นมี Rust code block อีกชั้น) ก็รองรับได้อย่างแม่นยำด้วยการจัดการเลเยอร์แบบ โครงสร้างต้นไม้

Incremental injection

  • จะ parse ใหม่และรันคิวรีอย่างรวดเร็วเฉพาะเลเยอร์ที่มีการเปลี่ยนแปลงจริง ทำให้ใช้ หน่วยงานที่เล็กที่สุดเท่าที่จำเป็น
  • ช่วยเพิ่มประสิทธิภาพสูงสุดในเอกสาร Markdown ที่มีลิสต์ขนาดใหญ่มากหรือมีโครงสร้างซ้อนลึก

การไฮไลต์ตัวแปร local (locals)

  • สามารถไฮไลต์ local variables เช่นพารามิเตอร์ภายในฟังก์ชันได้อย่างแม่นยำ ทั้งในตำแหน่งประกาศและขอบเขตการอ้างอิง (scope)
  • ปัญหาเรื้อรังเดิมที่การไฮไลต์หายไปเมื่อ definition อยู่นอกมุมมอง ได้รับการแก้ไขใน Tree-house

การรองรับ injection แบบ globalized

  • ใน Syntax type สามารถค้นหาและเรียกดู injection layer ได้ในเวลา ลอการิทึม (logarithmic)
  • ทำให้สามารถใช้ injection layer ทั้งหมดได้ผ่าน API อย่าง TreeCursor, QueryIter เป็นต้น
  • วางรากฐานสำหรับการทำงานอย่างสม่ำเสมอข้าม ขอบเขตของภาษา เช่น โค้ดภายใน HTML <script> หรือ Markdown code block

สรุป

  • Helix 25.07 ยกระดับ ประสบการณ์การใช้งาน ด้วยตัวสำรวจไฟล์, color inlay, การปรับปรุงโหมดคำสั่ง/ตัว parser และยังโดดเด่นขึ้นในฐานะ ผู้ท้าชิงสำหรับ text editor รุ่นถัดไป ด้วยโครงสร้างใหม่บนพื้นฐาน Tree-house
  • ดูรายละเอียดอัปเดตเพิ่มเติมได้ที่ changelog
  • สามารถเข้าร่วมชุมชน/การมีส่วนร่วมได้ผ่าน Matrix และ GitHub repository

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

 
GN⁺ 2025-07-17
ความคิดเห็นบน Hacker News
  • Helix ยอดเยี่ยมจริง ๆ มีทั้งตัวเลือกไฟล์ syntax highlighting การ lint และฟีเจอร์อีกมากมายให้ใช้ได้ทันทีโดยไม่ต้องติดตั้งปลั๊กอินหรือตั้งค่าซับซ้อน ในขณะที่ vim หรือ neovim ต้องตั้งค่าค่อนข้างมากตั้งแต่ต้น ฉันอยากใช้มัน แต่ข้อเสียหลักคือคีย์ไบน์ดิ้งทำงานต่างจาก vim ประสบการณ์ที่คุ้นกับ vim มานานอย่างปุ่ม x ที่ลบอักขระใต้เคอร์เซอร์ หรือ d ที่รอคำสั่งถัดไป หากไม่ทำงานแบบเดิมเป๊ะ ๆ จะทั้งสับสนและหงุดหงิด คิดว่าผู้ใช้ vim หลายคนน่าจะรู้สึกคล้ายกัน และการเปลี่ยนนิสัยนั้นยากมาก โดยเฉพาะเมื่อ vim มีอยู่แทบทุกที่เป็นค่าเริ่มต้นจนหนีไม่พ้น โชคดีที่มีซอฟต์ฟอร์กของ Helix ชื่อ evil-helix ที่เพิ่ม Vim key bindings ให้ เลยอยากแนะนำสำหรับคนที่เจอปัญหาแบบเดียวกับฉัน และทั้ง Helix กับ evil-helix ก็ทำงานบน Windows(cmd) ได้ดีทันที แค่ดาวน์โหลดไฟล์ .exe โดยไม่ต้องติดตั้ง rust

    • สำหรับฉันมันไม่ใช่ว่าไม่อยากเรียนรู้อะไรใหม่ ๆ แต่ปัญหาคือคีย์ไบน์ดิ้งแบบนี้เอาไปใช้ที่อื่นไม่ได้ เอ็ดิเตอร์ออนไลน์และเวิร์กสเตชันแทบทั้งหมดมี vim key bindings ให้ใช้ และเวลา ssh เข้า Linux ก็สำคัญที่รู้ว่าจะมี vim อยู่เสมอ มันเหมือนคีย์บอร์ด QWERTY ที่ถึงจะมีเลย์เอาต์ที่ดีกว่า แต่ก็ยังยอมทิ้งความยืดหยุ่นในการปรับตัวเข้ากับเกือบทุกสภาพแวดล้อมได้ทันทีไม่ได้

    • ฉันไม่มีปัญหาอะไรเลยกับการเรียนรู้เครื่องมือใหม่ ลองใช้ Helix มาพอสมควรแล้ว แต่โมเดล noun-verb กลับดูแย่กว่าเดิม และ visual feedback ก็รบกวนมากกว่าเวลาจะอ่านโค้ด ใน vim สิ่งง่าย ๆ อย่างการทำซ้ำคำสั่งล่าสุด (. เป็นต้น) ทำได้สะดวก แต่ใน Helix ต้องยอมเสียความสามารถนั้นไป การจัดการสถานะก็ต้องใส่ใจมากกว่า vim ด้วย เพราะ vim แค่ต้องรู้ตำแหน่งปัจจุบันในไฟล์ แต่ Helix ต้องคิดด้วยว่าฉันเคยอยู่ตรงไหน ฉันต้องการเอ็ดิเตอร์ที่มีค่าเริ่มต้นดี เป็น modal editing และไม่บังคับการซิงก์เชิงภาพมากเกินจำเป็น ถ้ามีการซิงก์เยอะเกินไปก็จะเสียข้อดีของการเป็นภาษาสำหรับการแก้ไข ฉันอยากโฟกัสกับการเขียนโปรแกรมซึ่งน่าสนใจกว่าการแก้ไขตัวข้อความเอง เอ็ดิเตอร์ที่ต้องใช้สมาธิมากกว่า กลับเป็นเอ็ดิเตอร์ที่แย่กว่า

    • ตอนที่ย้ายจาก vim(neovim) ที่ใช้มาเกือบ 20 ปีไป Helix มันไม่ได้ยากเลย และตอนนี้ก็ชอบมากกว่ามาก ฉันปรับพฤติกรรมแบบ modal บางอย่างอยู่บ้าง แต่ก็ใช้งานตามตรรกะของ helix ฟีเจอร์อย่าง multi-selection หรือ LSP มีมาให้เลย และตัวช่วยอันทรงพลังที่บอกใบ้การกระทำที่เป็นไปได้ระหว่างการกดหลายขั้นก็เป็นข้อดีมาก แม้บางครั้งจะต้องกลับไปใช้ vim แท้ ๆ ถึงแม้แมปในหัวจะเปลี่ยนไปบ้าง แต่ก็ยังจำคำสั่งพื้นฐานได้และปรับกลับได้เร็ว

    • ตอนนี้ Helix กำลังเพิ่ม Scheme สำหรับการตั้งค่าแบบ programmable เมื่อความสามารถนี้เข้ามา ก็น่าจะปรับจูนละเอียดได้หลากหลายแบบ เช่น repeat / transient map ของ emacs หรือการติดตามตามสถานะต่าง ๆ ในโลกที่ด้วยนวัตกรรมจาก LLMs ทำให้แตะภาษาที่ 8 หรือ 9 ได้ง่ายขึ้น ฉันมองว่าเครื่องมือที่ตั้งค่าละเอียดได้จะยิ่งโดดเด่นในตลาด

    • Vim key bindings คือเหตุผลเดียวที่ทำให้ฉันไม่ใช้ Helix ถ้ารองรับ vim ได้ผ่านฟอร์กภายนอก ก็อดคิดไม่ได้ว่า Helix ทางการก็น่าจะรองรับได้ถ้าต้องการ หรือว่าตั้งใจไม่ทำกันแน่

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

    • ฉันชอบ Helix มาก และพูดตรง ๆ ว่าถ้าเพิ่มความสะดวกจาก GUI อีกนิด เช่น file explorer แบบใช้เมาส์ได้ ฉันคิดว่ามันมีศักยภาพพอจะสู้ vscode ได้จริงจัง
  • น่าชื่นชมที่เอ็ดิเตอร์ซึ่งมีความสามารถยอดเยี่ยมขนาดนี้ยังคงมินิมอล และไม่ไปหมกมุ่นกับฟีเจอร์ AI ไร้สาระ

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

    • โค้ดเบสทันสมัย เขียนขึ้นใหม่ทั้งหมด
    • Vim key bindings เพราะ muscle memory นี้แน่นมาก เลยยึด Vim style และไม่สนใจว่าคนอื่นจะบอกว่าแบบอื่นดีกว่า แค่อยากให้มันทำงานเหมือน Vim จริง ๆ
    • ค่าเริ่มต้นดี Neovim มีอะไรให้ตั้งเยอะเกินไป และค่าเริ่มต้นก็ไม่ได้ถูกใจเสมอไป
    • ใช้ Treesitter เป็นฐาน และจะยิ่งดีถ้ารันบน WASM ได้ด้วย (เหมือน Zed, Neovim รุ่นใหม่)
    • ระบบส่วนขยายเป็น Lua, ไม่ค่อยชอบ JS หรือ Scheme, อุดมคติคือเป็น WASM module ที่เปิดเผยเฉพาะฟังก์ชันจำเป็น, และอยากได้ภาษา config สำหรับปลั๊กอินที่ไม่เป็น Turing-complete
    • มี TUI และ GUI แบบเลือกใช้ได้
    • มี LSP, DAP, snippets, autocomplete, UI สำหรับทดสอบ/ดีบักในตัว
    • มีมุมมองไฟล์ซิสเต็มแบบ Oil.nvim ในตัว
    • มีระบบค้นหาแบบ Telescope/FZF-lua ในตัว
    • มีการรวม Git และถ้ามี git UI แบบ magit/neogit ในตัวก็ยินดี
    • มีการจัดการ AST ด้วย Treesitter และ label jump แบบ Flash.nvim ในตัว
    • มี macros และ multi-cursor
    • มี AI integration แบบอิงเคอร์เซอร์ (Chat UI) เป็นตัวเลือก
    • ฉันก็เข้าใจเรื่อง muscle memory ของ Vim แต่คิดว่าหลายคนหมกมุ่นกับมันเกินไป ฉันเปลี่ยนทั้ง OS เอ็ดิเตอร์ และ IDE มาหลายรอบแล้ว ช่วงสองสามวันแรกหลังเปลี่ยนแต่ละครั้งจะอึดอัด หงุดหงิด และเหมือนอยากไปเป็นชาวนา แต่พอผ่านช่วงนั้นไปก็มี muscle memory ใหม่ทุกที เลยเสียดายถ้าจะยอมทิ้งข้อดีอีกมากมายของซอฟต์แวร์เพียงเพราะความไม่สะดวกไม่กี่วัน

    • ยังไม่ชัดว่า Helix ขาดข้อไหนจากเงื่อนไขที่พูดมา เพราะในสายตาฉัน Helix ดูจะตรงเกือบทั้งหมด

    • ดูจากรายการความต้องการแล้ว เหมือนสุดท้ายก็แค่อยากได้ Neovim ที่เปลี่ยน Lua เป็นภาษาอื่นเท่านั้นเอง

  • ฉันรัก Helix ขอแสดงความยินดี ธีมเริ่มต้นสวยมาก ค่าเริ่มต้นก็ดีเยี่ยม ติดตั้งแล้วใช้ได้ทันทีแทบไม่ต้องตั้งอะไร มันยังไม่ได้แทน IDE ของฉันทั้งหมด แต่ฉันตั้ง alias ของ vi และตั้ง $EDITOR เป็น Helix ไปแล้ว เวลาแก้ไขด่วนหรือดีบักจาก CLI สุดท้ายก็มักจะหยิบ Helix มาใช้เสมอ

  • ฉันชอบ Helix มากและเคยมีความรู้สึกเชิงบวกกับมัน แต่พฤติกรรม undo ดูไม่ค่อยสมเหตุสมผล มันยกเลิกหลายอย่างพร้อมกันมากเกินไปจนไม่เป็นธรรมชาติ และฉันเคยเสียงานจริง ๆ เพราะเรื่องนี้

    • มีสองอย่างที่ทำให้ฉันไม่ชอบเรื่อง Undo:

      • เวลาจะ undo ถ้าการแก้ไขนั้นไม่อยู่บนหน้าจอ มันจะกระโดดไปยังบริเวณนั้นได้ถูกต้อง แต่การกดคีย์ครั้งเดียวกันกลับ undo ต่อทันทีด้วย ทำให้งง เอ็ดิเตอร์อื่นมักจะกระโดดอย่างเดียวถ้ายังมองไม่เห็นเนื้อหา และยังไม่ยกเลิกการแก้ไข แต่ใน Helix พอกดครั้งเดียวก็ต้องคอยเช็กว่ามีอะไรเปลี่ยนไปแล้วหรือยัง
      • undo ถูกจัดเป็นก้อนใหญ่เกินไป พิมพ์ใน insert mode ไป 30 นาที ก็จะ undo ทีเดียวจนถึงตอนเปลี่ยนโหมดเลย save point ต้องลงทะเบียนเอง ฉันเคยผูกไว้กับ spacebar เพื่อให้ undo ละเอียดขึ้น แต่ก็มีผลข้างเคียงอย่างทำให้ selection หายไป เป็นต้น และยังหาวิธีแก้ที่สะอาดไม่ได้ โดยรวมฉันพอใจกับ Helix แต่เสียใจมากที่ระดับความละเอียดของ undo ต้องอาศัยการควบคุมเอง
    • Undo กับ "ทำซ้ำคำสั่งล่าสุด" มันแปลก ๆ อยู่นิดหน่อย แต่ฟีเจอร์อื่นดีมากจนฉันยังใช้ Helix เป็นเอ็ดิเตอร์หลักอยู่ แต่กรณีที่เสียงานไป ตรงนั้นลอง redo กลับไม่ได้หรือ

  • ฉันอยากให้ Helix มี "Kakoune mode" เพราะที่ทำงานต้องใช้ Windows เลยทำให้ Kakoune ไม่ใช่ตัวเลือกที่เหมาะนัก และ Helix ดูเหมือนจะสมบูรณ์แบบ แต่ก็ข้ามคีย์ไบน์ดิ้งไปไม่ได้ ปรัชญาคีย์ไบน์ดิ้งของ Helix ออกแนวอธิบายยืดยาวมากกว่าความกระชับของ Kakoune ซึ่งเป็นจุดที่กวนใจฉัน อีกทั้งระบบตั้งค่าคีย์ไบน์ดิ้งของ Helix ก็ยังไม่ทรงพอจะเลียนแบบ Kakoune ได้อย่างแท้จริง ฉันย้ายจาก vim มา Kakoune เพราะผิดหวังกับความไม่สม่ำเสมอและพฤติกรรมที่ไม่สมเหตุสมผลของ vim และ Helix ให้ความรู้สึกเหมือนถอยหลังหนึ่งก้าวในแง่นี้

  • คำว่าเอ็ดิเตอร์แบบ "post modern" นี่ตลกดี เหมือนเป็นมุกที่ดีที่สุดอันดับสองรองจากคำว่า "shell สำหรับยุค 90s" ของ Fish พอดูวิดีโอแล้วก็ประทับใจที่มันเป็น TUI และยังมีกลิ่นแบบ Emacs TUI อยู่นิด ๆ

  • ตอนนี้ต้องการเอ็ดิเตอร์แนว vim-like ที่ให้ความสมบูรณ์แบบ all-in-one ระดับ Helix จริง ๆ เพราะพวกดิสโทรของ Neovim รวมแต่ละองค์ประกอบกันแบบหลวมเกินไปจนมีอะไรจุกจิกน่ารำคาญอยู่เรื่อย ๆ ฉันคิดด้วยว่าอินเทอร์เฟซของ Vim โดยรวมควรถูกออกแบบใหม่ แต่ก็อยากให้คง modal แบบ action-object ไว้

    • Evil-Helix ดูเหมือนจะตอบโจทย์นี้ แม้ยังดูหยาบ ๆ อยู่ไม่น้อย แต่ก็น่าลองดู https://github.com/usagi-flow/evil-helix

    • สงสัยว่า action-object modal หมายถึงอะไร

  • ประทับใจกับคำอธิบายละเอียดเรื่อง syntax highlighting และความสามารถในการเข้าใจโค้ดของ Helix กับเอ็ดิเตอร์คล้ายกัน โครงสร้างและความสามารถที่อิง tree-sitter ดูเข้ากับ query language มาก และเหมือนจะไปไกลกว่าแค่ค้นหา symbol หรือหา references จนเป็น query DSL อเนกประสงค์ได้ เลยสงสัยว่าฟีเจอร์แนวนี้มีอยู่แล้วหรือยัง