- นักพัฒนาที่ใช้ Vim มานาน 20 ปีได้แชร์ประสบการณ์หลังเปลี่ยนมาใช้ Helix editor เป็นเวลา 3 เดือน
- จุดที่น่าสนใจของ Helix คือรองรับ Language Server (LSP) มาให้ในตัวโดยไม่ต้องตั้งค่าซับซ้อน
- โดยเฉพาะเมื่อเทียบกับ Vim/Neovim แล้ว ฟีเจอร์อย่าง การค้นหาที่ทรงพลังกว่าและ multi-cursor ได้รับการปรับปรุง ทำให้ดูบริบทในหลายไฟล์และแก้ไขทีเดียวหลายจุดได้สะดวก
- เวลากดคีย์จะมี quick reference popup ช่วยให้ใช้งานคีย์ลัดได้โดยไม่ลืม
- แม้จะมี ข้อไม่สะดวกบางอย่าง เช่น ไม่รองรับการสร้าง Markdown list อัตโนมัติ ไม่มี persistent undo และมีอาการแครชประมาณสัปดาห์ละครั้ง แต่โดยรวมก็เป็นประสบการณ์ใช้งานที่น่าพอใจ
- การฝึกกล้ามเนื้อความจำจาก Vim ที่สั่งสมมา 20 ปีใหม่อีกครั้งกลับง่ายกว่าที่คิด และการเรียนรู้ "วิธีแบบ Helix" โดยไม่พยายามบังคับให้เหมือน Vim มีประสิทธิภาพกว่ามาก
เหตุผลที่เปลี่ยนมาใช้ Helix
- จุดเริ่มต้นที่ทำให้หันมาใช้ Helix คืออยากใช้ ความสามารถด้านการทำงานร่วมกับ Language Server ได้อย่างง่ายดาย
- ใน Vim/Neovim การตั้งค่า language server ค่อนข้างซับซ้อน แต่ Helix สามารถใช้งาน go to definition หรือ rename symbol ได้ทันทีโดยไม่ต้องตั้งค่าเพิ่ม
- เดิมทีต้องคอยดูแลปลั๊กอินจำนวนมากและไฟล์ตั้งค่าหลายชุด แต่ Helix ลดภาระนี้ลงด้วยการรองรับมาให้ในตัว
ข้อดีหลักของ Helix
- ระบบค้นหาที่ยอดเยี่ยม
- เมื่อค้นหาสตริงทั้งทั้ง repository ผลลัพธ์จะแสดงใน หน้าต่างพรีวิว ทำให้ เลื่อนดูไฟล์ที่ตรงกันพร้อมเห็นโค้ดรอบข้างได้
- ต่างจากปลั๊กอิน ripgrep ของ Vim ที่ให้ผลลัพธ์พร้อม บริบทที่สมบูรณ์กว่า จึงตัดสินใจได้เร็ว
- ฟีเจอร์อ้างอิงคีย์ลัดอย่างรวดเร็ว
- เมื่อกดปุ่ม
g จะมีรายการคำสั่งที่ใช้งานได้แสดงใน ป๊อปอัปช่วยเหลือ ทำให้เข้าใจได้ง่าย
- แม้เป็นคีย์ลัดที่ไม่ได้ใช้บ่อยก็ตรวจสอบได้ง่าย จึงมี learning curve ที่ไม่ชันมาก
ความแตกต่างระหว่าง Vim กับ Helix
- ฟีเจอร์ mark ใช้การติดตามประวัติการย้ายเคอร์เซอร์ด้วย
Ctrl+O, Ctrl+I แทน ma, 'a
- ใช้การแก้ไขแบบ multi-cursor เป็นหลักแทน macro
- เวลาปรับแก้ทั้งเอกสาร ใช้
% เพื่อเลือกทั้งหมด → s เพื่อเลือกด้วย regex → จากนั้นแก้ไขหลายจุดพร้อมกันตามต้องการ
- multi-cursor สะดวกกว่าการต้องเขียน macro ทุกครั้งมาก
- แทนที่จะใช้ tab จะใช้ buffer switcher ผ่าน
space + b เพื่อสลับได้อย่างรวดเร็ว
จุดที่ไม่สะดวกของ Helix
- ฟีเจอร์ text reflow มีประสิทธิภาพด้อยกว่า
gq ของ Vim
- และเข้ากับลิสต์ได้ไม่ดีนัก
- ไม่รองรับ การสร้าง Markdown list อัตโนมัติ
- กด "Enter" ที่ท้ายรายการแล้วลิสต์จะไม่ต่อให้อัตโนมัติ
- มีทางแก้บางส่วนสำหรับ bullet list แต่ยังไม่มีสำหรับ numbered list
- ยังไม่มี persistent undo
- ใน Vim ใช้
undofile เพื่อย้อนการเปลี่ยนแปลงได้แม้ปิดโปรแกรมไปแล้ว แต่ Helix ยังไม่มีฟีเจอร์นี้
- ไม่รองรับ การรีโหลดไฟล์อัตโนมัติ
- หลังไฟล์บนดิสก์ถูกแก้ไข ต้องสั่ง
:reload-all (:ra<tab>) ด้วยตนเอง
- มีแครชเป็นครั้งคราว
- ประมาณสัปดาห์ละครั้ง และอาจเกี่ยวข้องกับการแก้ไข Markdown จำนวนมาก
- แต่เปิดใหม่ได้ทันทีจึงไม่ใช่ปัญหาใหญ่
- ถึงอย่างนั้นก็ยัง ใช้งาน Helix ต่อไป
กระบวนการเปลี่ยนผ่านและประสบการณ์การเรียนรู้
- เดิมทีผู้เขียนกังวลว่าการฝึกกล้ามเนื้อความจำจาก Vim ที่สะสมมา 20 ปีใหม่จะ ยากมาก
- ระหว่างวันหยุดจึงเริ่มใช้ Helix กับ side project และ ผ่านไป 1-2 สัปดาห์ก็ไม่รู้สึกสับสนอีกต่อไป
- ตอนแรกพยายามบังคับให้คีย์ลัดคล้าย Vim แต่ไม่สำเร็จ และพบว่าการเรียนรู้ "วิธีแบบ Helix" ง่ายกว่ามาก
- ยังมีบางจุดที่ทำให้สับสนอยู่
w ใน Vim กับ w ใน Helix ให้นิยามคำว่า "word" ไม่เหมือนกัน (Helix นับรวมช่องว่างหลังคำ ส่วน Vim ไม่นับ)
สภาพแวดล้อมการแก้ไขแบบ terminal
- เนื่องจากตลอดหลายปีที่ผ่านมาใช้ vim/neovim เวอร์ชัน GUI เป็นหลัก การกลับมา ใช้ editor ใน terminal จึงต้องปรับตัวเล็กน้อย
- workflow ที่ลงตัวในที่สุดคือ
- ใช้หน้าต่าง terminal แยกกันสำหรับแต่ละโปรเจกต์ และทุกแท็บในหน้าต่างนั้นใช้ working directory เดียวกัน
- วางแท็บ Helix เป็นแท็บแรกของหน้าต่าง terminal
- วิธีนี้ทำให้จัดการหลายโปรเจกต์แบบขนานได้สะดวก และอาจดีกว่า workflow เดิมด้วยซ้ำ
การตั้งค่า
- เมื่อเทียบกับการตั้งค่า Neovim ที่ยาวหลายร้อยบรรทัด ผู้เขียนคงไว้เพียง การตั้งค่าที่เรียบง่ายมาก
- โดยหลักแล้วตั้งค่าแค่คีย์ลัด 4 รายการ
- รายละเอียดการตั้งค่าหลัก
- ธีม:
solarized_light
- ตั้งค่า yank register เริ่มต้นเป็น
+ เพื่อซิงก์กับ system clipboard
- ตั้ง
# เป็นคีย์ลัดสำหรับสลับคอมเมนต์ (เพราะไม่ชอบค่าเริ่มต้น Ctrl+C)
- remap
^ และ $ ให้ย้ายไปต้น/ท้ายบรรทัด (เพราะไม่อยากเรียนรู้วิธีอื่น)
- ตั้ง
<space>l เป็น :reflow (เพราะเขียนข้อความเยอะจึงต้อง reflow บ่อย และคิดถึงคีย์ลัด gq ของ Vim)
- ใช้ไฟล์ตั้งค่า
languages.toml แยกสำหรับกำหนดค่าตามภาษา
- สำหรับ Python: ใช้ตัวจัดรูปแบบ black, language server เป็น pyright และปิด auto format
บทสรุป: ความประทับใจหลังใช้ 3 เดือน
- 3 เดือนยังไม่ใช่ช่วงเวลาที่ยาวนัก และก็ยัง มีโอกาสที่จะกลับไปใช้ Vim ในอนาคต
- ก่อนหน้านี้เคยย้ายไปใช้ nix แล้วกลับมา Homebrew หลัง 8 เดือน (แม้กระนั้นก็ยังใช้ NixOS ดูแลเซิร์ฟเวอร์เครื่องหนึ่งอยู่และพอใจมาก)
- Helix ยังไม่ใช่เครื่องมือที่สมบูรณ์ แต่มีทิศทางชัดเจนในฐานะ "editor ที่แทบไม่ต้องตั้งค่า"
- ด้วยความเรียบง่ายและฟีเจอร์ที่มีมาให้ในตัว จึงมีศักยภาพระยะยาวในการ ทดแทน Vim
- อย่างไรก็ตาม จะใช้งานต่อเนื่องได้มากน้อยเพียงใดยังขึ้นอยู่กับ การปรับปรุงเสถียรภาพและการเพิ่มฟีเจอร์ ในอนาคต
2 ความคิดเห็น
ความเห็นจาก Hacker News
ใช้ Vim/Neovim มานานมาก ทั้งเคยปรับแต่ง config เองและใช้ config ที่คนอื่นทำไว้ แต่ถึงจะชอบ Vim มาก ก็ยังรู้สึกว่าเสน่ห์ของ Helix คือใช้งานได้ทันทีโดยแทบไม่ต้องตั้งค่าอะไรเพิ่ม
แต่ก็รู้สึกว่า config ของ Helix เองค่อนข้างดิบมาก เลยคิดจริง ๆ ว่าถ้าใช้ Vim มาสักไม่กี่ปีก็น่าจะจำลองสภาพแวดล้อมที่ได้จาก Helix ได้อยู่แล้ว และอยากจะบอกว่าถ้าทำแบบนั้นก็ไม่ต้องตกนรกกับการตั้งค่าอีกต่อไป
ชอบมากที่มีป๊อปอัปช่วยเหลือบอกเส้นทางหรือคีย์ไบน์ที่ควรใช้ ปกติไม่ได้ใช้ฟีเจอร์อย่าง "ไปยังคำนิยาม" หรือ "ไปยังรีเฟอเรนซ์" บ่อย เลยลืมคีย์ลัดง่าย ถ้ามีป๊อปอัปตามบริบทแบบนี้ใช้กันแพร่หลายก็คงดีมาก และถ้ามันฉลาดพอที่จะโผล่มาเฉพาะตอนที่เราลังเลก่อนกดคีย์ ก็น่าจะมีประโยชน์มากจริง ๆ
ใช้ Vim/Neovim มา 20 ปี แต่เพิ่งติดตั้งปลั๊กอิน which-key เมื่อ 6 เดือนก่อน และใช้งานได้มีประโยชน์มาก
which-key.nvim GitHub
ผมพยายามอยู่เรื่อย ๆ ที่จะตั้งค่า language server หลักให้เข้าที่เข้าทางอย่างเหมาะสม (เช่น ให้ "ไปยังคำนิยาม" ใช้งานได้) แต่รู้สึกว่ามันยากเกินไปที่จะทำสภาพแวดล้อมใน Vim หรือ Neovim ให้ใช้งานได้สบาย
ไม่ต้องวุ่นวายกับการย้าย config ของ Vim และ dependency ที่เกี่ยวข้อง ทำให้สภาพแวดล้อมการพัฒนาพกพาได้มากขึ้นมาก (แม้จะยังไม่เทียบเท่าเซ็ตอัป Vim ที่ซับซ้อน)
โดยเฉพาะพอเห็นคำอธิบายกับภาพหน้าจอในบทความนี้ก็ยิ่งอยากได้ฟีเจอร์นี้มาก
ถ้าป๊อปอัปโผล่มาอย่างฉลาดด้วยเงื่อนไขอย่าง timeout ก็จะยอดเยี่ยม เพราะตอนที่ไม่ต้องการก็ไม่ถูกรบกวน และตอนที่ลังเลก็จะได้รับคำแนะนำอัตโนมัติ
ก่อนหน้านี้ใช้ neovim กับ VS Code เป็นหลัก แต่ Helix เข้ามาเติมช่องว่างเฉพาะทางได้พอดี
ขี้เกียจตั้งค่า neovim หรือใช้ vim ต่อไป เลยต้องการอะไรกลาง ๆ ระหว่าง VS Code กับ nvim แล้ว Helix ก็ตอบโจทย์พอดี
ถ้าเป็นคนที่เชี่ยวชาญ vimscript จริง ๆ อาจจะลังเลอีกแบบ แต่ผมไม่ใช่ เลยพอดีมาก
ไม่ได้อยากให้ Helix modular มากขึ้นหรือทำงานแบบ UNIX มากกว่านี้ ขอให้เป็นแบบตอนนี้ก็พอ
ตอนนี้มี ecosystem ของเครื่องมือหลากหลายอยู่แล้ว และยังใช้งานร่วมกับ Claude Code ได้ด้วย (รีเฟรชบัฟเฟอร์เพื่อให้เห็นการแก้ไขใหม่)
มันเป็นหนึ่งในเอดิเตอร์ที่ดีที่สุดจนผมเริ่มสนับสนุนโครงการรายเดือนแล้ว
ถ้าจะหวังการพัฒนาต่อไป สิ่งที่ยังขาดที่สุดคือความสามารถในการเรนเดอร์ภาพหรือสูตรคณิตศาสตร์ในเอดิเตอร์เอง หวังว่าส่วนนี้จะทำได้ผ่านปลั๊กอินอย่าง Kitty terminal protocol หรือ sixel
อยากใช้มันกับงานโน้ต/บล็อกในไฟล์ Markdown โดยเฉพาะ
ขอให้ Helix ไปได้สวย
VSCode หรือ (neo)vim ต้องดึงปลั๊กอินมาจากหลายแหล่ง เลยรู้สึกไม่สบายใจเสมอ
แม้จะไม่ใช่นักพัฒนา Lua แต่ LLM ก็ช่วยตั้งค่าหรือแก้ config ของ nvim ได้มาก
เหตุผลใหญ่ที่สุดที่ย้ายมาลอง helix คือการตั้งค่า LSP/ลินต์ที่ทำได้ดีมาก
ขอแชร์บางอย่างเกี่ยวกับฟีเจอร์ที่ merge แล้วใน HEAD —
เพราะมี file picker ในตัวที่อิงกับ fuzzy search อยู่แล้ว ตัวสำรวจไฟล์แบบทั่วไปเลยไม่ได้เพิ่มประโยชน์มากนัก
เคยลองปลั๊กอินคีย์ไบน์แบบ vim สำหรับ Helix ด้วย แต่ตรงกันแค่บางส่วน เลยยิ่งผิดหวัง
อยากรู้ว่าผู้ใช้ Helix ที่ชำนาญแก้กันอย่างไร
เพราะการตั้งค่า language server ให้ใช้งานสบาย ๆ ใน Vim/Neovim กลายเป็นงานที่เหนื่อยเกินไป เลยย้ายมา Helix
แต่ในช่วง 5 ปีที่ผ่านมา Neovim ก็มีดิสโทรแบบแบตเตอรี่มาครบที่ทำให้ตั้งค่าได้ง่ายมากแล้ว
เห็นด้วยว่านักพัฒนาหลายคนไม่อยากเสียเวลาไปกับการดีบักเอดิเตอร์ และคิดว่านั่นคือเหตุผลที่ JetBrains ยังได้รับความนิยม
เพียงแต่ส่วนที่บอกว่าผู้ใช้ Neovim มา 20 ปีแล้วยังไม่เคยตั้งสภาพแวดล้อม LSP ให้ลงตัว ฟังดูเข้าใจยากนิดหน่อย จนสงสัยว่านี่เป็นประสบการณ์จริงของผู้เขียนหรือไม่
สุดท้ายถึงอย่างนั้นก็ยังรู้สึกว่าง่ายกว่าถ้าใช้ IDE เต็มรูปแบบ เลยลังเลกับการติดตั้งและตั้งค่าอยู่เสมอ
เลยรู้สึกว่าเรื่องของผู้เขียนน่าเห็นใจมาก
ผมเองก็ตั้งค่าแบบน้อยที่สุด ใช้ค่อนข้าง barebones แต่ก็ไม่ได้ยาก และ Lua ก็รู้สึกตามหลักสรีรศาสตร์ดีกว่า vimscript มาก
นั่นเป็นเหตุผลที่ยังใช้เครื่องมืออย่าง ALE ต่อไป
ยังไงก็หวังว่าคนใช้ Helix จะมีความสุข
ถึงจะใช้เอดิเตอร์อื่นได้ แต่เกือบทุกอย่างทั้งการดีบักและการตั้งค่ามักอิง vscode เป็นหลัก จึงมักมีบรรยากาศว่าควรใช้ตามนั้น
การตั้งค่า Neovim+treesitter+LSP ก็ลื่นไหลมากแล้ว แม้ในอดีตอาจยาก แต่ทุกวันนี้ไม่ใช่ประเด็นใหญ่
ถ้าเหตุผลที่ไป Helix คือเรื่อง LSP ก็ยังสงสัยอยู่ ไม่แน่ใจว่าผู้เขียนมีปัญหากับ LSP จริงหรือเปล่า
ข้อเสียอย่างหนึ่งของแบบ noun-verb คือสั่งซ้ำ (
.) ไม่ได้ใน Vim ทำซ้ำการกระทำได้อย่าง
dd..,dap..แต่โมเดล noun-verb ทำแบบนี้ได้ยากที่พื้นฐานกว่านั้นคือเจอปัญหาปุ่มไม่พอ
การกระทำพื้นฐานเยอะเกินไปจนต้องใช้ปุ่ม Alt และก็ไม่มีโหมด normal/visual/insert แบบ vim มีแค่ visual/insert
แม้แต่การแยก motion/วัตถุก็ไม่ชัดเจน จึงทำให้การแมปปุ่มยากขึ้นและปัญหาปุ่มไม่พอก็ยิ่งชัด
รู้สึกว่ามันสอดคล้องกับกระบวนการคิดที่ต้องใช้ตอนเขียนโค้ดมากกว่า
เป็นชุดปลั๊กอินของ echasnovski ที่ตอบโจทย์ความต้องการหลากหลาย พร้อมความสม่ำเสมอและเอกสารที่ดี
ตั้งแต่ nvim 0.12 (nightly) เป็นต้นไป แค่ติดตั้ง mini.nvim กับ lspconfig ผ่านตัวจัดการปลั๊กอินในตัว (vim.pack) ก็พอแล้ว
เว็บไซต์ทางการ mini.nvim
ที่เก็บ GitHub ของ mini.nvim
ตอนนี้ใช้ neovim โดยไม่มีปลั๊กอิน ไม่มี autocomplete และไม่มีแม้แต่ syntax highlighting
รู้สึกว่าการมีวินัยกับตัวเองผ่านวิธีแบบนี้ทำให้เขียนโค้ดได้ดีขึ้น
อาจไม่เหมาะกับทุกคน แต่แนะนำว่าอย่างน้อยควรลองสักครั้ง
ไม่ใช้ code action หรือ goto definition ด้วย มีแค่ดู error แบบเรียลไทม์บ้าง แต่คอมไพเลอร์เร็วมากจนไม่ได้มีความหมายมาก
เลยอยากปิด LSP ไปเลย รู้สึกว่าเมื่อเทียบกับ 20 ปีก่อน LSP ไม่ได้ยกระดับความสามารถในการเขียนโปรแกรมของผมอย่างมหาศาล
ส่วนเรื่อง syntax highlighting ผมคิดว่าธีมสีฉูดฉาดกลับรบกวนสมาธิและไม่มีความหมาย
ชอบธีมที่มีสีเดียวหรือสองสีเป็นหลัก และรู้สึกว่าไม่จำเป็นต้องแยกสีชื่อตัวแปรกับชื่อฟังก์ชันด้วยซ้ำ
แต่ก็ยังสงสัยว่าการต้องจำทุกอย่างเองจะทำให้ความเหนื่อยล้าสะสมหรือไม่ หรือวิธีนี้ช่วยให้เขียนโค้ดได้ดีขึ้นจริงหรือเปล่า
สีเป็นข้อมูลอีกมิติหนึ่งที่ช่วยให้เห็นความผิดพลาดหรือ error ในโค้ดเด่นขึ้น และช่วยให้ไล่อ่านโค้ดได้เร็วขึ้น
แต่ไม่ได้สุดโต่งมาก ยังคงเปิด syntax highlighting และคง feedback เรื่อง syntax error ผ่าน LSP ไว้
ไม่ใช้ autocomplete หรือการลิงก์เอกสารอัตโนมัติ
helix-editor.vercel.app
ดูง่ายกว่าเอกสารทางการมาก และมีทิป/ทริกเยอะ เลยช่วยบรรเทาจุดอ่อนของ Helix ได้ เช่น เรื่องไม่มีเทอร์มินัลในตัว รวมถึงช่วยเรื่องวิธีแก้ไขที่มีประสิทธิภาพและคีย์ไบน์ต่าง ๆ
ถ้าเป็นผู้ใช้ vim มานาน ขอแนะนำ kickstart (โดยเฉพาะฟอร์กแบบ modular kickstart-modular.nvim)
kickstart.nvim
เป็นจุดเริ่มต้นแบบมินิมัลที่ยอดเยี่ยมมาก
แต่ไฟล์ค่อนข้างใหญ่ ผมเลยจัดการให้ง่ายขึ้นด้วยการใช้ fold marker เพื่อพับแต่ละส่วน
แม้จะสนใจ
helixอยู่เป็นพัก ๆ เพราะความสะดวกของการตั้งค่าอย่าง LSP และปลั๊กอิน แต่เพราะมือคุ้นกับ vi/vim มากเกินไป เลยเปลี่ยนได้ไม่ง่ายนัก