ย้ายจาก Neovim ไปใช้ Zed
(stevedylan.dev)- นักพัฒนาทุกคนล้วนมีเส้นทางการเลือกใช้ text editor เป็นของตัวเอง และต่างผ่านกระบวนการจนมาถึงเครื่องมือที่ใช้อยู่ในปัจจุบัน เรื่องราวเหล่านี้น่าสนใจและทำให้ยิ่งซาบซึ้งต่อเครื่องมือสำหรับนักพัฒนาและความพยายามที่ใส่ลงไปอย่างมาก
- บทความนี้เขียนขึ้นเพื่อแบ่งปันเส้นทางของตัวเองให้กับคนที่สนใจเครื่องมือสำหรับนักพัฒนา และเพื่อชวนให้ลองทดลองใช้เครื่องมือใหม่ ๆ
จุดเริ่มต้นของเส้นทาง text editor
- เริ่มใช้ Atom เป็นครั้งแรก พร้อมกับเริ่มเรียนรู้พื้นฐานของ HTML, CSS, Javascript
- จากนั้นเปลี่ยนไปใช้ VSCode แต่ตอนนั้นภรรยาต้องใช้โน้ตบุ๊กเพื่อตกแต่งภาพ เลยต้องหันไปใช้ MacBook แทน ซึ่งมีปัญหาด้านประสิทธิภาพจาก Electron build ของ VSCode
- ช่วงนั้นเองได้ค้นพบ Vim โดยบังเอิญ และหลงใหลใน workflow ที่เน้นคีย์บอร์ดและความรวดเร็ว จึงเริ่มเรียนรู้ Vim อย่างจริงจัง
- ตอนแรกใช้งานโดยปรับแต่ง Vim RC และต่อมารู้จัก Neovim ผ่านวิดีโอของ chris@machine
- ใช้ Neovim มาหลายปีและได้ประโยชน์ด้าน productivity อย่างมาก ใช้เวลาไม่น้อยในการปรับแต่ง config แต่สุดท้ายก็ไปถึงจุดที่แทบไม่ต้องเปลี่ยนอะไรอีก
การเปลี่ยนแปลง
- แต่เมื่อเวลาผ่านไป ก็ยังต้องคอยทำให้ไฟล์ config เรียบง่ายลงเรื่อย ๆ และถึงแม้จะเป็นเพียงการรักษาฟังก์ชันพื้นฐานไว้ ก็ยังต้องใช้ความพยายามมาก
- บางครั้งแค่อัปเดตปลั๊กอิน Neovim ก็เกิดปัญหา ทำให้ต้องหยุดงานเพื่อเสียเวลาแก้ไขปัญหา จึงพยายามลดความซับซ้อนของ config แต่ถึงอย่างนั้นก็ยังต้องออกแรงเพื่อรักษาความสามารถพื้นฐานไว้
- โดยเฉพาะเวลาทำงานกับ codebase ขนาดใหญ่ Neovim มีอาการช้าและหน้าจอค้างอยู่บ่อยครั้ง จนกระทบต่อ productivity
- เคยลองเปลี่ยนไปใช้ terminal emulator อื่น ๆ เช่น Alacritty, Wezterm เป็นต้น แต่ก็แทบไม่ช่วยอะไร
- เคยได้ยินเรื่อง Zed มาก่อน แต่เลิกใช้ไปเพราะไม่ได้เป็นแบบ terminal-based อย่างไรก็ตาม เมื่อได้ยินคำชมเรื่องความเร็วของ Zed มากขึ้น จึงตัดสินใจลองอีกครั้ง
- หลังจากใช้งานทุกวันตลอด 2 เดือน Zed มอบประสบการณ์ที่น่าพอใจมาก และตั้งใจจะใช้ต่อไปโดยไม่คิดกลับไปหา Neovim
ประสบการณ์การใช้งาน Zed
- เพื่ออธิบายว่าทำไมถึงเลือก Zed จึงอยากเล่าถึงประสบการณ์ใช้งานโดยรวมจนถึงตอนนี้ และวิธีที่ปรับให้มันเข้ากับตัวเอง
ทุกอย่าง "ใช้งานได้เลย"
- หนึ่งในข้อดีที่ใหญ่ที่สุดของ Zed คือ "ทุกอย่างใช้งานได้เลย"
- โดยเฉพาะฟีเจอร์อย่าง Language Server Protocol (LSP) ซึ่งใน Neovim ต้องใช้เวลาตั้งค่านานมาก แต่ใน Zed กลับทำงานได้ดีตั้งแต่ต้น
- ใน Zed มีคีย์ลัดอย่าง "ดู definition", "ไปที่ definition", "code actions" มาให้เป็นค่าเริ่มต้น และรองรับภาษาส่วนใหญ่ จึงแทบไม่เจอปัญหา
ความเร็ว
- หนึ่งในเหตุผลหลักที่เลือก Zed คือเรื่องความเร็ว และผลลัพธ์ก็ทำให้พอใจมาก
- แม้ใน codebase ขนาดใหญ่ก็ยังทำงานได้รวดเร็วโดยแทบไม่มีอาการหน่วง และจนถึงตอนนี้ยังไม่เคยเจอปัญหาด้านประสิทธิภาพ
- แม้อาจทำให้ Neovim เร็วขึ้นได้อีก แต่แทนที่จะเสียเวลาไล่ปรับเพื่อเพิ่ม productivity การใช้ Zed กลับเป็นทางเลือกที่ดีกว่า
Vim mode
- ในฐานะผู้ใช้ Neovim เคยผิดหวังกับ Vim plugin ของ VSCode เพราะไม่เสถียรและมีบั๊กมาก
- Vim mode ของ Zed เป็นฟีเจอร์ที่ทีมพัฒนาเขียนขึ้นเอง จึงเสถียรมากและรองรับฟังก์ชันสำคัญได้ดี
- โครงสร้างคีย์ลัดยืดหยุ่นมาก และมีฟีเจอร์หลายอย่างที่ผู้ใช้ Vim น่าจะชอบ
ฟีเจอร์ AI
- Zed ยังมีฟีเจอร์ AI ให้ใช้งาน โดยมี Copilot ติดตั้งมาให้ในตัว
- สามารถใช้โมเดล AI จาก OpenAI, Ollama, Anthropic และอื่น ๆ ผ่าน API ได้
- ฟีเจอร์ inline assistant ก็มีประโยชน์มาก สามารถเลือกบางส่วนของโค้ดแล้วกด
ctrl-enterเพื่อเรียก AI assistant มาช่วยเขียนโค้ดได้
Zed ≠ Neovim
- Zed ไม่สามารถแทนที่ Neovim ได้ทั้งหมด จุดแข็งสำคัญของ Neovim คือการมีอยู่แบบ native ใน terminal
- ถ้าเป็นงานแก้ไขไฟล์เล็ก ๆ น้อย ๆ Neovim ยังสะดวกกว่า แต่สำหรับเซสชันยาว ๆ หรือการทำงานระดับโปรเจกต์ Zed นั้นยอดเยี่ยมมาก
ปรับแต่ง Zed ให้เข้ากับผู้ใช้ Neovim
แม้ Zed จะไม่ใช่ตัวแทนแบบสมบูรณ์ของ Neovim แต่ก็สามารถปรับประสบการณ์ให้คุ้นเคยกับผู้ใช้ Neovim/Vim ได้ดีขึ้นมากผ่านการตั้งค่าเล็ก ๆ น้อย ๆ หลายอย่าง
Vim mode และคีย์ลัด
- อย่างแรกที่ควรทำคือเปิดใช้งาน Vim mode โดย Zed มี หน้าเอกสารเกี่ยวกับ Vim mode ที่อธิบายทั้ง Vim bindings พื้นฐานและวิธีตั้งค่าเพิ่มเติม
- ข้อดีมากอย่างหนึ่งของ Zed คือสามารถตั้งค่าคีย์ลัดตาม Vim mode ได้ เช่น ใช้คีย์ลัดคนละแบบระหว่างโหมด "Normal" และโหมด "Visual"
[
{
"context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"space b": "editor::ToggleGitBlame",
"shift-k": "editor::Hover",
"space l f": "editor::Format",
"space d": "diagnostics::Deploy",
"space f f": "file_finder::Toggle",
"space o": "tab_switcher::Toggle",
"space e": "workspace::ToggleLeftDock",
"space /": "workspace::NewSearch",
"n": "search::SelectNextMatch",
"shift-n": "search::SelectPrevMatch",
"space t": "workspace::NewCenterTerminal",
"g b": "editor::ToggleComments",
"+ +": "workspace::Save",
"space c": "pane::CloseActiveItem"
}
},
{
"context": "Editor && vim_mode == visual && !VimWaiting && !VimObject",
"bindings": {
"shift-j": "editor::MoveLineDown",
"shift-k": "editor::MoveLineUp"
}
},
]
- นอกจากนี้ ยังสามารถตั้งค่าคีย์ลัดสำหรับสลับ panel ใน Zed เพื่อสร้าง workflow ที่คล้ายกับ Neovim ได้
[
{
"context": "Dock || Terminal || Editor",
"bindings": {
"ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],
"ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],
"ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],
"ctrl-j": ["workspace::ActivatePaneInDirection", "Down"]
}
},
]
- แนะนำให้ดู keymap พื้นฐานของ Vim เพื่อปรับแต่งส่วนที่จำเป็นด้วย โดย keymap พื้นฐานของ Vim เป็นแหล่งอ้างอิงที่มีประโยชน์ว่าตอนนี้ Zed รองรับอะไรบ้างและควรปรับอะไรเพิ่ม
UI ที่เรียบง่าย
- Zed มี UI ที่มินิมอลอยู่แล้ว แต่ถ้าชอบหน้าตาที่ใกล้กับการตั้งค่า Neovim มากกว่า ก็สามารถปิด tab bar, scroll bar, toolbar และองค์ประกอบอื่น ๆ ได้
{
"cursor_blink": false,
"relative_line_numbers": true,
"scrollbar": {
"show": "never"
},
"vertical_scroll_margin": 0,
"tab_bar": {
"show": false
},
"toolbar": {
"breadcrumbs": true,
"quick_actions": false
},
}
ทางเลือกแทนปลั๊กอิน
- ใน Zed สามารถใช้ tab switcher (Toggle) เพื่อสลับไปมาระหว่างไฟล์หรือบัฟเฟอร์ ซึ่งให้ประสบการณ์คล้าย Telescope
{
"context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"space o": "tab_switcher::Toggle",
}
}
- การค้นหาทั้งโปรเจกต์สามารถใช้แทน Telescope ได้ โดยดูผลลัพธ์ผ่านมุมมองหลายบัฟเฟอร์และนำทางได้อย่างสะดวก
- การสลับ terminal มีลักษณะคล้าย VSCode แต่ใน Zed ยังมีตัวเลือกให้เปิด terminal เป็นบัฟเฟอร์ในมุมมองแก้ไขหลักได้ด้วย
{
"context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"space t": "workspace::NewCenterTerminal",
}
}
- แม้จะยังแทนที่ Tmux และฟีเจอร์สลับโปรเจกต์ได้ไม่ทั้งหมด แต่ฟังก์ชันสลับโปรเจกต์ของ Zed ก็ทำหน้าที่นี้ได้ดีพอสมควร
{
"context": "Workspace",
"bindings": {
"cmd-k": [
"projects::OpenRecent",
{
"create_new_window": false
}
]
}
}
ควรลองใช้ Zed ไหม?
- ถ้ากำลังลังเลว่าจะลอง Zed ดีหรือไม่ แนะนำให้ลองใช้สักสองสามวัน
- Zed เป็น text editor ที่มีเอกลักษณ์และมีความสามารถสูง และท้ายที่สุดแล้ว เครื่องมือที่สำคัญที่สุดคือเครื่องมือที่ช่วยเพิ่ม productivity ให้คุณได้จริง
- เครื่องมือนั้นอาจเป็น VS Code, JetBrains หรือ EMacs ก็ได้
- เลือกเครื่องมือที่เหมาะกับตัวเองที่สุด แต่อย่าแข็งขืนเกินไปจนไม่ยอมลองอะไรใหม่ ๆ
3 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ตอนแรกชอบ Zed แต่เมื่อมันโฟกัสไปที่การทำงานร่วมกันและฟีเจอร์ AI มากขึ้น ก็ทำให้มันมีประโยชน์น้อยลงเพราะยังขาดความสามารถในฐานะตัวแก้ไขพื้นฐาน
เหตุผลที่ใช้ Helix คือเคยพยายามย้ายจาก VSCodium ไป Vim หรือ Neovim แต่การตั้งค่าปลั๊กอินทำได้ยาก
เพิ่งย้ายจาก Vim ไป Zed ไม่นานนี้ และคิดว่า Zed ยอดเยี่ยมในหลายด้าน
เวลาที่ใช้ Zed ชอบความเร็วมากและ UI ที่สะอาดตา
ย้ายจาก VSCode ไป Zed เมื่อ 6 เดือนก่อน แต่ไม่นานมานี้กลับไปใช้ Neovim อีกครั้ง
หวังว่า Zed จะถูกขัดเกลาและมีเสถียรภาพมากขึ้น
สงสัยว่าเคยลองใช้ดิสโทรของ Neovim หรือยัง
ถ้าต้องการ Neovim แบบแท้จริงใน VSCode แนะนำให้ลองดู
vscode-neovimเริ่มสนใจ Kakoune และ Helix เลยเขียนส่วนขยายสำหรับการแก้ไขแบบโมดัลให้ VSCode
ตอนที่ลองสำรวจ Zed บน macOS รู้สึกว่ามันเป็นตัวแก้ไขที่เร็วและฟีเจอร์ครบ
ผมเองก็เพิ่งย้ายไปใช้ Helix เหมือนกันครับ
เหมือนความเห็นใน Hacker News เลย คือก่อนหน้านี้ก็ไม่ได้ใช้ปลั๊กอินทั้งหมดใน NeoVim อยู่แล้ว เลยลองทดสอบ helix แล้วก็ย้ายมาใช้ทันทีครับ แต่ธีมสีนี่ช็อกจริง ๆ
หมายความว่าคุณคิดว่าธีมเริ่มต้นมันม่วงเกินไปเลยไม่ค่อยชอบใช่ไหม? :eyes: