Helix Editor 25.07
(helix-editor.com)- 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-sittercrate) และตัวไฮไลต์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
- ใน
Syntaxtype สามารถค้นหาและเรียกดู 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 ความคิดเห็น
ความคิดเห็นบน 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 สายเดิมมาก และค่าที่ให้มาจากโรงงานก็ใช้งานได้จริงมาก
น่าชื่นชมที่เอ็ดิเตอร์ซึ่งมีความสามารถยอดเยี่ยมขนาดนี้ยังคงมินิมอล และไม่ไปหมกมุ่นกับฟีเจอร์ AI ไร้สาระ
ขอแสดงความยินดี หวังว่า Helix จะไปได้ดี แต่ดูจะไม่ใช่แนวของฉัน ตอนนี้ฉันใช้ Neovim และทำสิ่งที่อยากได้เกือบทั้งหมดได้ แม้ก็ยังไม่ถึงขั้นพอใจเต็มร้อย เอ็ดิเตอร์ที่ฉันอยากได้มีเงื่อนไขประมาณนี้:
ฉันก็เข้าใจเรื่อง muscle memory ของ Vim แต่คิดว่าหลายคนหมกมุ่นกับมันเกินไป ฉันเปลี่ยนทั้ง OS เอ็ดิเตอร์ และ IDE มาหลายรอบแล้ว ช่วงสองสามวันแรกหลังเปลี่ยนแต่ละครั้งจะอึดอัด หงุดหงิด และเหมือนอยากไปเป็นชาวนา แต่พอผ่านช่วงนั้นไปก็มี muscle memory ใหม่ทุกที เลยเสียดายถ้าจะยอมทิ้งข้อดีอีกมากมายของซอฟต์แวร์เพียงเพราะความไม่สะดวกไม่กี่วัน
ยังไม่ชัดว่า Helix ขาดข้อไหนจากเงื่อนไขที่พูดมา เพราะในสายตาฉัน Helix ดูจะตรงเกือบทั้งหมด
ดูจากรายการความต้องการแล้ว เหมือนสุดท้ายก็แค่อยากได้ Neovim ที่เปลี่ยน Lua เป็นภาษาอื่นเท่านั้นเอง
ฉันรัก Helix ขอแสดงความยินดี ธีมเริ่มต้นสวยมาก ค่าเริ่มต้นก็ดีเยี่ยม ติดตั้งแล้วใช้ได้ทันทีแทบไม่ต้องตั้งอะไร มันยังไม่ได้แทน IDE ของฉันทั้งหมด แต่ฉันตั้ง alias ของ
viและตั้ง$EDITORเป็น Helix ไปแล้ว เวลาแก้ไขด่วนหรือดีบักจาก CLI สุดท้ายก็มักจะหยิบ Helix มาใช้เสมอฉันชอบ Helix มากและเคยมีความรู้สึกเชิงบวกกับมัน แต่พฤติกรรม undo ดูไม่ค่อยสมเหตุสมผล มันยกเลิกหลายอย่างพร้อมกันมากเกินไปจนไม่เป็นธรรมชาติ และฉันเคยเสียงานจริง ๆ เพราะเรื่องนี้
มีสองอย่างที่ทำให้ฉันไม่ชอบเรื่อง 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 อเนกประสงค์ได้ เลยสงสัยว่าฟีเจอร์แนวนี้มีอยู่แล้วหรือยัง