11 คะแนน โดย GN⁺ 2024-08-19 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • นักพัฒนาทุกคนล้วนมีเส้นทางการเลือกใช้ 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 ความคิดเห็น

 
GN⁺ 2024-08-19
ความคิดเห็นจาก Hacker News
  • ตอนแรกชอบ Zed แต่เมื่อมันโฟกัสไปที่การทำงานร่วมกันและฟีเจอร์ AI มากขึ้น ก็ทำให้มันมีประโยชน์น้อยลงเพราะยังขาดความสามารถในฐานะตัวแก้ไขพื้นฐาน

    • ตอนนี้กลับไปใช้ตัวแก้ไขและ IDE เดิมแล้ว และตั้งใจว่าจะกลับมาลองอีกครั้งในภายหลัง
  • เหตุผลที่ใช้ Helix คือเคยพยายามย้ายจาก VSCodium ไป Vim หรือ Neovim แต่การตั้งค่าปลั๊กอินทำได้ยาก

    • Helix ใช้งานได้ทันทีจึงใช้อยู่ และการกำหนดปุ่มก็ค่อนข้างเข้าใจง่าย แถมยังช่วยให้เรียนรู้การกำหนดปุ่มแบบ Vim ได้ด้วย
    • ธีมสีเริ่มต้นค่อนข้างชวนช็อก
  • เพิ่งย้ายจาก Vim ไป Zed ไม่นานนี้ และคิดว่า Zed ยอดเยี่ยมในหลายด้าน

    • แต่ฟังก์ชันพื้นฐานมีบั๊กอยู่มาก จึงอยากให้ให้ความสำคัญกับพื้นฐานก่อนการผสาน AI และเรื่องอื่น ๆ
  • เวลาที่ใช้ Zed ชอบความเร็วมากและ UI ที่สะอาดตา

    • ถ้าการรวม Git และการรองรับการทำงานระยะไกลดีกว่านี้ ก็น่าจะย้ายไปใช้แบบเต็มตัวได้
  • ย้ายจาก VSCode ไป Zed เมื่อ 6 เดือนก่อน แต่ไม่นานมานี้กลับไปใช้ Neovim อีกครั้ง

    • ชอบแนวทางของ Zed ในการผสาน Vim แต่ย้ายกลับไป Neovim เพราะขาดฟีเจอร์พื้นฐานและมีบั๊ก
    • ถ้า Zed โตเต็มที่กว่านี้ก็ยินดีจะกลับไปใช้อีก
  • หวังว่า Zed จะถูกขัดเกลาและมีเสถียรภาพมากขึ้น

    • ระหว่างนี้กำลังใช้ Sublime Text 4 ซึ่งมีประสิทธิภาพยอดเยี่ยม และส่วนขยาย LSP กับ Sublime Merge ก็ช่วยอุดช่องว่างที่ VSCode ยังมีอยู่
  • สงสัยว่าเคยลองใช้ดิสโทรของ Neovim หรือยัง

    • ดิสโทรอย่าง LazyVim, AstroVim และ NvChad ได้ตั้งค่าปลั๊กอินและการผสานที่จำเป็นไว้ให้แล้ว
  • ถ้าต้องการ Neovim แบบแท้จริงใน VSCode แนะนำให้ลองดู vscode-neovim

    • สามารถใช้ VIM จริงควบคู่กับฟีเจอร์ทั้งหมดของ VSCode ได้
  • เริ่มสนใจ Kakoune และ Helix เลยเขียนส่วนขยายสำหรับการแก้ไขแบบโมดัลให้ VSCode

    • รองรับความสามารถส่วนใหญ่ของ VIM และเพิ่มการทำงานกับโหมดใหม่ ๆ ที่อิง AST เข้าไป
    • มีแผนจะเขียนบล็อกโพสต์เกี่ยวกับเรื่องนี้
  • ตอนที่ลองสำรวจ Zed บน macOS รู้สึกว่ามันเป็นตัวแก้ไขที่เร็วและฟีเจอร์ครบ

    • แต่บนระบบ *nix มันยังไม่ได้แพร่หลายเท่า vi/vim
    • เมื่อคำนึงถึงข้อจำกัดด้านอินฟราสตรักเจอร์และการดีพลอยที่หลากหลาย การโฟกัสกับตัวแก้ไขที่ใช้กันทั่วไปจึงง่ายกว่า
    • Zed อาจเป็นทางเลือกแทน vi/vim ได้ แต่มีโอกาสน้อยที่ผู้ใช้ vi/vim ส่วนใหญ่จะย้ายไปใช้อย่างเต็มตัว
 
taking 2024-08-19

ผมเองก็เพิ่งย้ายไปใช้ Helix เหมือนกันครับ
เหมือนความเห็นใน Hacker News เลย คือก่อนหน้านี้ก็ไม่ได้ใช้ปลั๊กอินทั้งหมดใน NeoVim อยู่แล้ว เลยลองทดสอบ helix แล้วก็ย้ายมาใช้ทันทีครับ แต่ธีมสีนี่ช็อกจริง ๆ

 
roxie 2024-08-26

หมายความว่าคุณคิดว่าธีมเริ่มต้นมันม่วงเกินไปเลยไม่ค่อยชอบใช่ไหม? :eyes: