บทนำ: Vim และ Neovim ทางลัดสู่ความเร็วเหนือแสงในโลกการเขียนโปรแกรม
Vim และ Neovim... แค่ได้ยินชื่อก็รู้สึกถึงพลังอะไรบางอย่างแล้วใช่ไหมครับ? สำหรับโปรแกรมเมอร์หรือคนที่ต้องทำงานกับ text editor เป็นประจำเนี่ย สองชื่อนี้คือตัวเลือกอันดับต้นๆ ที่ถูกพูดถึงเสมอ ไม่ใช่แค่เพราะมันเก่าแก่หรือเป็นที่นิยม แต่เป็นเพราะ "ความเร็ว" และ "ประสิทธิภาพ" ที่หาตัวจับยากจริงๆ ลองนึกภาพตามนะ คุณกำลังแก้ไขไฟล์โค้ดขนาดใหญ่หลายพันบรรทัด ด้วย editor ทั่วไป อาจจะต้องรอโหลดสักพัก หรือเวลาเลื่อนขึ้นลงก็หน่วงๆ แต่ถ้าเป็น Vim หรือ Neovim ทุกอย่างจะลื่นไหลเหมือนสายน้ำ ไม่มีการสะดุดให้เสียอารมณ์ แถมยังไม่ต้องใช้เมาส์ให้เมื่อยมือ ทุกอย่างควบคุมได้ด้วยคีย์บอร์ดล้วนๆ! ผมเองก็เป็นคนหนึ่งที่หลงใหลใน Vim มานานหลายปี ตั้งแต่สมัยเรียนมหาวิทยาลัย จนถึงปัจจุบันที่ทำงานเป็นโปรแกรมเมอร์เต็มตัว Vim ก็ยังคงเป็นเพื่อนคู่ใจเสมอมา ผมจำได้ว่าช่วงแรกๆ ที่หัดใช้ Vim ก็รู้สึกยากเหมือนกันนะ คีย์ต่างๆ นี่จำแทบไม่ได้ แต่พอเริ่มคล่องแล้ว บอกเลยว่าชีวิตง่ายขึ้นเยอะมากๆ ตัวเลขและสถิติก็ยืนยันถึงความนิยมของ Vim ได้เป็นอย่างดี จากผลสำรวจ Stack Overflow Developer Survey ในปี 2023 พบว่า Vim เป็น editor ที่ได้รับความนิยมเป็นอันดับ 5 โดยมีผู้ใช้งานถึง 25% ทั่วโลก และถ้าพูดถึง Neovim ซึ่งเป็น fork ของ Vim ที่มีการพัฒนาอย่างต่อเนื่อง ก็ได้รับความนิยมเพิ่มขึ้นเรื่อยๆ เช่นกัน แล้วอะไรคือสิ่งที่ทำให้ Vim และ Neovim แตกต่างจาก editor อื่นๆ? คำตอบก็คือ "keybinding" หรือการใช้คีย์บอร์ดเป็นหลักในการควบคุมทุกอย่างนั่นเอง แทนที่จะต้องใช้เมาส์คลิกไปมา คุณสามารถสั่งงานต่างๆ ได้อย่างรวดเร็วด้วยการกดคีย์ผสมต่างๆ เช่น `dd` เพื่อลบทั้งบรรทัด, `yy` เพื่อคัดลอก, `p` เพื่อวาง หรือ `:%s/old/new/g` เพื่อแทนที่คำในทั้งไฟล์ นอกจากนี้ Vim และ Neovim ยังมีระบบ plugin ที่แข็งแกร่ง ทำให้คุณสามารถปรับแต่ง editor ให้เข้ากับความต้องการของคุณได้อย่างไม่สิ้นสุด ไม่ว่าจะเป็นการเพิ่ม syntax highlighting สำหรับภาษาโปรแกรมมิ่งต่างๆ, การติดตั้ง linter เพื่อตรวจสอบโค้ด หรือการเพิ่มฟังก์ชัน autocomplete เพื่อช่วยให้เขียนโค้ดได้เร็วขึ้น เอาจริงๆ นะ การเรียนรู้ Vim หรือ Neovim อาจจะดูเหมือนเป็นการลงทุนที่เสียเวลาในช่วงแรก แต่ผมเชื่อว่ามันคุ้มค่ามากๆ ในระยะยาว เพราะมันจะช่วยเพิ่ม productivity ในการทำงานของคุณได้อย่างมหาศาล ลองคิดดูว่าถ้าคุณสามารถเขียนโค้ดได้เร็วขึ้น 20-30% เวลาที่เหลือคุณก็สามารถเอาไปทำอย่างอื่นได้อีกเยอะเลยพื้นฐานความรู้ที่ควรรู้ก่อนเริ่มต้นใช้งาน Vim และ Neovim
ก่อนที่เราจะไปลงมือติดตั้งและใช้งาน Vim หรือ Neovim กันจริงๆ ผมอยากจะปูพื้นฐานความรู้ที่จำเป็นสักเล็กน้อย เพื่อให้คุณเข้าใจหลักการทำงานและแนวคิดเบื้องหลัง editor เหล่านี้ได้ดียิ่งขึ้น ซึ่งจะช่วยให้คุณเรียนรู้และใช้งานได้อย่างมีประสิทธิภาพมากขึ้นครับVim คืออะไร? ต้นกำเนิดและปรัชญาของ Editor ระดับตำนาน
Vim หรือ Vi IMproved เป็น text editor ที่พัฒนาต่อมาจาก Vi ซึ่งเป็น editor ที่มีมาตั้งแต่ยุค Unix (ประมาณปี 1970) Vim ถูกสร้างขึ้นโดย Bram Moolenaar และเปิดตัวครั้งแรกในปี 1991 ตั้งแต่นั้นมา Vim ก็ได้รับการพัฒนาและปรับปรุงอย่างต่อเนื่อง จนกลายเป็น editor ที่ทรงพลังและได้รับความนิยมอย่างแพร่หลาย ปรัชญาหลักของ Vim คือ "modal editing" ซึ่งหมายความว่า editor จะมีโหมดการทำงานที่แตกต่างกัน เช่น โหมด normal (สำหรับสั่งงานต่างๆ), โหมด insert (สำหรับพิมพ์ข้อความ), โหมด visual (สำหรับเลือกข้อความ) และโหมด command (สำหรับรันคำสั่งต่างๆ) การเปลี่ยนโหมดเหล่านี้จะทำได้โดยการกดคีย์ต่างๆ ซึ่งจะช่วยให้คุณสามารถทำงานต่างๆ ได้อย่างรวดเร็วและมีประสิทธิภาพ Vim ถูกออกแบบมาให้ทำงานได้บน terminal หรือ command line interface (CLI) ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ GUI (Graphical User Interface) ในการใช้งาน Vim ทำให้ Vim มีขนาดเล็กและทำงานได้รวดเร็วบนทุกระบบปฏิบัติการ ไม่ว่าจะเป็น Linux, macOS หรือ Windows นอกจากนี้ Vim ยังมีระบบ plugin ที่แข็งแกร่ง ทำให้คุณสามารถปรับแต่ง editor ให้เข้ากับความต้องการของคุณได้อย่างไม่สิ้นสุด คุณสามารถติดตั้ง plugin เพื่อเพิ่ม syntax highlighting สำหรับภาษาโปรแกรมมิ่งต่างๆ, เพิ่ม linter เพื่อตรวจสอบโค้ด หรือเพิ่มฟังก์ชัน autocomplete เพื่อช่วยให้เขียนโค้ดได้เร็วขึ้นNeovim: วิวัฒนาการของ Vim สู่ Editor ที่ทันสมัยและยืดหยุ่นยิ่งขึ้น
Neovim เป็น fork ของ Vim ที่เกิดขึ้นในปี 2014 โดยมีเป้าหมายที่จะปรับปรุง Vim ให้ทันสมัยและยืดหยุ่นยิ่งขึ้น โดยการปรับโครงสร้างโค้ดภายในใหม่, เพิ่ม API ที่ใช้งานง่าย และรองรับการทำงานแบบ asynchronous หนึ่งในความแตกต่างที่สำคัญระหว่าง Vim และ Neovim คือ Neovim ใช้ libuv ซึ่งเป็นไลบรารีสำหรับจัดการ I/O แบบ asynchronous ทำให้ Neovim สามารถทำงานต่างๆ ได้อย่างรวดเร็วและมีประสิทธิภาพมากขึ้น โดยเฉพาะอย่างยิ่งเมื่อทำงานกับ plugin ที่ต้องมีการติดต่อกับภายนอก Neovim ยังมี API ที่ใช้งานง่ายกว่า Vim ทำให้ผู้พัฒนา plugin สามารถสร้าง plugin ที่ซับซ้อนและมีประสิทธิภาพได้ง่ายขึ้น นอกจากนี้ Neovim ยังรองรับการทำงานแบบ headless ซึ่งหมายความว่าคุณสามารถใช้ Neovim เป็น backend สำหรับ editor อื่นๆ ได้ ถึงแม้ว่า Neovim จะเป็น fork ของ Vim แต่ Neovim ยังคงรักษาความเข้ากันได้กับ Vim ไว้ ทำให้ plugin ส่วนใหญ่ที่ทำงานบน Vim ก็สามารถทำงานบน Neovim ได้เช่นกัน นอกจากนี้ Neovim ยังมี community ที่แข็งแกร่งและมีการพัฒนาอย่างต่อเนื่อง ทำให้ Neovim เป็นตัวเลือกที่น่าสนใจสำหรับผู้ที่ต้องการ editor ที่ทันสมัยและยืดหยุ่นKeybinding: หัวใจสำคัญของ Vim และ Neovim ที่คุณต้องทำความเข้าใจ
Keybinding คือการกำหนดคีย์ต่างๆ บนคีย์บอร์ดให้ทำหน้าที่ต่างๆ ใน editor ซึ่งเป็นหัวใจสำคัญของ Vim และ Neovim เลยก็ว่าได้ เพราะการใช้ keybinding จะช่วยให้คุณสามารถทำงานต่างๆ ได้อย่างรวดเร็วและมีประสิทธิภาพ โดยไม่ต้องใช้เมาส์ ใน Vim และ Neovim คีย์ต่างๆ จะถูกกำหนดให้ทำหน้าที่ที่แตกต่างกันไปตามโหมดการทำงาน เช่น ในโหมด normal คีย์ `h`, `j`, `k`, `l` จะใช้สำหรับเลื่อน cursor ไปทางซ้าย, ลง, ขึ้น และขวา ตามลำดับ ส่วนคีย์ `dd` จะใช้สำหรับลบทั้งบรรทัด และคีย์ `yy` จะใช้สำหรับคัดลอก การเรียนรู้ keybinding อาจจะดูเหมือนเป็นเรื่องยากในช่วงแรก แต่เมื่อคุณเริ่มคุ้นเคยกับมันแล้ว คุณจะพบว่ามันช่วยให้คุณทำงานได้เร็วขึ้นมากจริงๆ ลองนึกภาพว่าคุณสามารถลบทั้งบรรทัด, คัดลอก, วาง หรือแทนที่คำในทั้งไฟล์ได้ด้วยการกดคีย์เพียงไม่กี่ครั้ง มันจะช่วยประหยัดเวลาและลดความเมื่อยล้าจากการใช้เมาส์ไปได้เยอะเลย นอกจาก keybinding พื้นฐานแล้ว Vim และ Neovim ยังอนุญาตให้คุณกำหนด keybinding ของตัวเองได้ ซึ่งจะช่วยให้คุณปรับแต่ง editor ให้เข้ากับสไตล์การทำงานของคุณได้อย่างเต็มที่ คุณสามารถกำหนด keybinding เพื่อรันคำสั่งต่างๆ, เรียกใช้ plugin หรือทำอะไรก็ได้ที่คุณต้องการวิธีติดตั้งและใช้งาน Vim และ Neovim
มาถึงส่วนที่ทุกคนรอคอย นั่นก็คือการติดตั้งและใช้งาน Vim และ Neovim กันครับ ผมจะอธิบายขั้นตอนการติดตั้งสำหรับระบบปฏิบัติการต่างๆ พร้อมทั้งยกตัวอย่างคำสั่งที่ใช้บ่อยๆ และเคล็ดลับเล็กๆ น้อยๆ ที่จะช่วยให้คุณเริ่มต้นใช้งานได้อย่างราบรื่นตารางสรุปคำสั่งพื้นฐานที่ควรรู้
| คำสั่ง | หน้าที่ | | ----------- | --------------------------------------- | | `h`, `j`, `k`, `l` | เลื่อน cursor ไปทางซ้าย, ลง, ขึ้น, ขวา | | `i` | เข้าสู่โหมด insert (พิมพ์ข้อความ) | | `ขั้นตอนการติดตั้ง Vim และ Neovim บนระบบปฏิบัติการต่างๆ
* **Linux (Debian/Ubuntu):**sudo apt update
sudo apt install vim neovim
* **Linux (Fedora/CentOS/RHEL):**
sudo dnf install vim neovim
* **macOS (Homebrew):**
brew update
brew install vim neovim
* **Windows (Chocolatey):**
choco install vim neovim
หลังจากติดตั้งเสร็จแล้ว คุณสามารถเปิด Vim หรือ Neovim ได้โดยพิมพ์ `vim` หรือ `nvim` ใน terminal แล้วกด Enter
การใช้งาน Vim และ Neovim เบื้องต้น
เมื่อเปิด Vim หรือ Neovim ขึ้นมา คุณจะอยู่ในโหมด normal ซึ่งเป็นโหมดสำหรับสั่งงานต่างๆ คุณสามารถเปลี่ยนไปยังโหมด insert ได้โดยการกด `i` แล้วเริ่มพิมพ์ข้อความได้เลย เมื่อต้องการกลับไปยังโหมด normal ให้กดปุ่ม `"Vim is not an editor, it's a way of life." - Bram Moolenaarคำกล่าวนี้ไม่ได้เกินจริงเลยครับ เมื่อคุณเริ่มใช้ Vim หรือ Neovim ไปสักพัก คุณจะเริ่มซึมซับวิถีการทำงานแบบ Vim และมันจะกลายเป็นส่วนหนึ่งของชีวิตคุณไปโดยปริยาย
เทคนิคขั้นสูง / Configuration
เอาล่ะครับ หลังจากที่เราได้รู้จัก Vim และ Neovim ในระดับพื้นฐานกันไปแล้ว คราวนี้เราจะมาเจาะลึกในส่วนของเทคนิคขั้นสูงและการปรับแต่ง configuration กันบ้าง บอกเลยว่าส่วนนี้แหละที่จะทำให้ Editor ของเราทรงพลังและตอบโจทย์การใช้งานของเราได้อย่างเต็มที่ ใครที่อยากจะใช้ Vim/Neovim ให้คล่องแคล่วเหมือนโปร ต้องห้ามพลาดส่วนนี้เลยนะครับ
Plugins Management
Plugin คือหัวใจสำคัญของการใช้งาน Vim/Neovim เลยก็ว่าได้ เพราะมันจะช่วยเพิ่มฟังก์ชันการทำงานต่างๆ ให้กับ Editor ของเรา ไม่ว่าจะเป็นการ Syntax highlighting, Auto-completion, Linting หรือแม้แต่การจัดการ Git ก็สามารถทำได้ง่ายๆ ด้วย Plugin ทั้งนั้น และการจัดการ Plugin ที่ดี ก็จะช่วยให้เราสามารถใช้งาน Editor ได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
สำหรับการจัดการ Plugin ใน Vim/Neovim นั้น มีหลายวิธีให้เลือกใช้ แต่ที่นิยมกันมากที่สุดก็คือการใช้ Plugin Manager ซึ่งจะช่วยให้เราสามารถติดตั้ง, อัปเดต, และลบ Plugin ได้อย่างง่ายดาย Plugin Manager ที่ได้รับความนิยมก็มีหลายตัว เช่น:
- Vundle: เป็น Plugin Manager ที่ใช้งานง่าย และมี Community ที่ใหญ่
- Pathogen: เป็น Plugin Manager ที่เรียบง่าย และเน้นความเร็ว
- vim-plug: เป็น Plugin Manager ที่มีฟีเจอร์ครบครัน และรองรับการติดตั้ง Plugin แบบ Asynchronous
- Packer: Plugin Manager ยอดนิยมสำหรับ Neovim ที่เน้นความเร็วและประสิทธิภาพ
ในตัวอย่างนี้ ผมจะขอแนะนำการใช้งาน vim-plug นะครับ เพราะผมคิดว่ามันใช้งานง่าย และมีฟีเจอร์ที่ครบครัน
วิธีการติดตั้ง vim-plug ก็ง่ายมากๆ ครับ เพียงแค่ดาวน์โหลดไฟล์ plug.vim จาก Github แล้วนำไปไว้ในโฟลเดอร์ ~/.vim/autoload (สำหรับ Vim) หรือ ~/.local/share/nvim/site/autoload (สำหรับ Neovim) จากนั้นก็แก้ไขไฟล์ .vimrc (สำหรับ Vim) หรือ init.vim (สำหรับ Neovim) เพื่อกำหนด Plugin ที่เราต้องการใช้งาน
ตัวอย่างการใช้งาน vim-plug ในไฟล์ init.vim (Neovim):
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
Plug 'vim-airline/vim-airline'
Plug 'preservim/nerdcommenter'
Plug 'morhetz/gruvbox'
call plug#end()
colorscheme gruvbox
จาก Code ด้านบน เราได้กำหนด Plugin ที่ต้องการใช้งานไว้ในระหว่าง call plug#begin() และ call plug#end() ซึ่ง Plugin ที่เราเลือกใช้ก็คือ:
- nerdtree: Plugin สำหรับแสดง File explorer
- vim-airline: Plugin สำหรับแสดง Status line ที่สวยงาม
- nerdcommenter: Plugin สำหรับ Comment Code อย่างรวดเร็ว
- gruvbox: Plugin สำหรับ Theme สี
หลังจากแก้ไขไฟล์ init.vim แล้ว ให้เปิด Neovim แล้วพิมพ์ :PlugInstall เพื่อติดตั้ง Plugin ทั้งหมดที่กำหนดไว้
Custom Keybindings
Keybindings คือการกำหนดปุ่มลัดสำหรับการใช้งานคำสั่งต่างๆ ใน Vim/Neovim ซึ่งถือเป็นอีกหนึ่งหัวใจสำคัญที่จะช่วยให้เราทำงานได้อย่างรวดเร็วและมีประสิทธิภาพมากยิ่งขึ้น การ Custom Keybindings จะช่วยให้เราสามารถปรับแต่ง Editor ให้เข้ากับการใช้งานของเราได้อย่างลงตัว
Vim/Neovim มี Keybindings มาให้ใช้งานมากมาย แต่เราก็สามารถกำหนด Keybindings เพิ่มเติมได้ตามต้องการ โดยการใช้คำสั่ง map ในไฟล์ .vimrc (สำหรับ Vim) หรือ init.vim (สำหรับ Neovim)
รูปแบบการใช้งานคำสั่ง map:
map {key} {command}
โดยที่ {key} คือปุ่มที่เราต้องการกำหนด และ {command} คือคำสั่งที่เราต้องการให้ทำงานเมื่อกดปุ่มนั้นๆ
ตัวอย่างการกำหนด Keybindings ในไฟล์ init.vim (Neovim):
" Save the current file
nnoremap <leader>w :w<CR>
" Quit Vim
nnoremap <leader>q :q<CR>
" Open NERDTree
nnoremap <leader>n :NERDTreeToggle<CR>
จาก Code ด้านบน เราได้กำหนด Keybindings ดังนี้:
<leader>w: Save ไฟล์ปัจจุบัน<leader>q: ปิด Vim<leader>n: เปิด/ปิด NERDTree
โดยที่ <leader> คือปุ่ม Leader ซึ่งโดยปกติแล้วจะถูกกำหนดให้เป็นปุ่ม \ แต่เราสามารถเปลี่ยนได้ตามต้องการ
ข้อควรรู้: การ Custom Keybindings ที่ดี ควรจะหลีกเลี่ยงการทับซ้อนกับ Keybindings เดิมที่มีอยู่ และควรเลือกใช้ Keybindings ที่เราสามารถจดจำได้ง่าย เพื่อให้เราสามารถใช้งานได้อย่างคล่องแคล่ว
Autocommands
Autocommands คือคำสั่งที่จะถูกเรียกใช้งานโดยอัตโนมัติเมื่อเกิดเหตุการณ์ต่างๆ ใน Vim/Neovim เช่น เมื่อเปิดไฟล์, เมื่อ Save ไฟล์, หรือเมื่อออกจาก Vim/Neovim การใช้งาน Autocommands จะช่วยให้เราสามารถปรับแต่ง Editor ให้ทำงานได้ตามที่เราต้องการได้อย่างอัตโนมัติ
รูปแบบการใช้งานคำสั่ง autocmd:
autocmd {event} {pattern} {command}
โดยที่ {event} คือเหตุการณ์ที่เราต้องการให้ Autocommand ทำงาน, {pattern} คือรูปแบบของไฟล์ที่เราต้องการให้ Autocommand ทำงานด้วย (สามารถใช้ * แทนไฟล์ทั้งหมดได้), และ {command} คือคำสั่งที่เราต้องการให้ทำงาน
ตัวอย่างการใช้งาน Autocommands ในไฟล์ init.vim (Neovim):
" Auto-save every 5 minutes
autocmd CursorHold * silent! write
" Remove trailing whitespace on save
autocmd BufWritePre * :%s/\s\+$//e
จาก Code ด้านบน เราได้กำหนด Autocommands ดังนี้:
- Auto-save ไฟล์ทุกๆ 5 นาที
- ลบ Whitespace ท้ายบรรทัดเมื่อ Save ไฟล์
การใช้งาน Autocommands นั้น มีประโยชน์มากๆ ในการปรับแต่ง Editor ให้ทำงานได้ตามที่เราต้องการ ตัวอย่างเช่น เราสามารถกำหนดให้ Vim/Neovim ทำการ Format Code โดยอัตโนมัติเมื่อ Save ไฟล์ หรือกำหนดให้ Vim/Neovim ทำการ Lint Code โดยอัตโนมัติเมื่อเปิดไฟล์ ก็ได้เช่นกัน
เปรียบเทียบ Vim และ Neovim
มาถึงตรงนี้ หลายคนอาจจะสงสัยว่า Vim และ Neovim นั้นแตกต่างกันอย่างไร และควรจะเลือกใช้ตัวไหนดี ในส่วนนี้เราจะมาทำการเปรียบเทียบ Vim และ Neovim ในด้านต่างๆ เพื่อให้ทุกคนสามารถตัดสินใจเลือกใช้ Editor ที่เหมาะสมกับตัวเองได้ง่ายยิ่งขึ้น
Vim และ Neovim ต่างก็เป็น Text Editor ที่มีพื้นฐานมาจาก Vi แต่ Neovim นั้นถูกพัฒนาขึ้นมาโดยมีเป้าหมายที่จะปรับปรุง Vim ให้ทันสมัยมากยิ่งขึ้น โดยมีการปรับปรุงในด้านต่างๆ เช่น Architecture, Plugin API, และ User Interface
ตารางเปรียบเทียบคุณสมบัติหลัก:
| คุณสมบัติ | Vim | Neovim |
|---|---|---|
| Architecture | Monolithic | Modular |
| Plugin API | Vimscript | Lua (preferred) |
| User Interface | Terminal-based | Terminal-based + GUI |
| Asynchronous Jobs | Limited support | Full support |
| Community | Large and established | Growing rapidly |
จากตารางเปรียบเทียบ เราจะเห็นได้ว่า Neovim นั้นมีข้อได้เปรียบในด้าน Architecture ที่เป็นแบบ Modular ซึ่งทำให้สามารถพัฒนาและปรับปรุง Editor ได้ง่ายยิ่งขึ้น นอกจากนี้ Neovim ยังรองรับ Plugin API ที่ทันสมัยกว่าอย่าง Lua ซึ่งทำให้ Plugin สามารถทำงานได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
ตารางเปรียบเทียบ Benchmark (ผลลัพธ์อาจแตกต่างกันไปขึ้นอยู่กับ Hardware และ Configuration):
| การทดสอบ | Vim | Neovim |
|---|---|---|
| Startup Time | ~50ms | ~30ms |
| File Loading Time (Large File) | ~200ms | ~150ms |
| Plugin Loading Time | ~500ms | ~300ms |
จากตาราง Benchmark เราจะเห็นได้ว่า Neovim นั้นมี Startup Time และ File Loading Time ที่เร็วกว่า Vim เล็กน้อย ซึ่งเป็นผลมาจากการปรับปรุง Architecture และการรองรับ Asynchronous Jobs ที่ดีกว่า
สรุปแล้ว Vim และ Neovim ต่างก็มีข้อดีข้อเสียที่แตกต่างกันไป การเลือกใช้ Editor ตัวไหนนั้น ขึ้นอยู่กับความชอบและความต้องการของแต่ละบุคคล หากคุณต้องการ Editor ที่มีความเสถียรและมี Community ที่ใหญ่ Vim อาจจะเป็นตัวเลือกที่ดีกว่า แต่หากคุณต้องการ Editor ที่ทันสมัยและมีประสิทธิภาพสูง Neovim ก็เป็นตัวเลือกที่ไม่ควรพลาด
ข้อควรระวัง และ Troubleshooting
การใช้งาน Vim/Neovim นั้น อาจจะไม่ได้ราบรื่นเสมอไป บางครั้งเราก็อาจจะเจอปัญหาหรือข้อผิดพลาดต่างๆ ที่ทำให้การใช้งาน Editor ไม่เป็นไปตามที่ต้องการ ในส่วนนี้เราจะมาพูดถึงข้อควรระวังและวิธีการ Troubleshooting ปัญหาที่อาจจะเกิดขึ้น เพื่อให้ทุกคนสามารถแก้ไขปัญหาได้อย่างรวดเร็วและใช้งาน Vim/Neovim ได้อย่างราบรื่น
คำเตือน: การแก้ไขไฟล์ Configuration โดยไม่เข้าใจ อาจจะทำให้ Vim/Neovim ทำงานผิดปกติได้ ดังนั้น ควรศึกษาข้อมูลให้ดีก่อนทำการแก้ไข และควร Backup ไฟล์ Configuration ไว้เสมอ
รายการปัญหาที่พบบ่อย และวิธีการแก้ไข:
- ปัญหา: Plugin ไม่ทำงาน
- วิธีแก้ไข: ตรวจสอบว่า Plugin ได้ถูกติดตั้งอย่างถูกต้องหรือไม่ ตรวจสอบว่า Plugin ได้ถูกเปิดใช้งานในไฟล์ Configuration หรือไม่ ตรวจสอบว่า Plugin มี Dependencies ที่จำเป็นหรือไม่
- ปัญหา: Keybindings ไม่ทำงาน
- วิธีแก้ไข: ตรวจสอบว่า Keybindings ไม่ได้ถูกทับซ้อนกับ Keybindings อื่น ตรวจสอบว่า Mode ที่ Keybindings ถูกกำหนดไว้นั้นถูกต้องหรือไม่ ตรวจสอบว่า Keybindings ได้ถูกกำหนดไว้ในไฟล์ Configuration อย่างถูกต้องหรือไม่
- ปัญหา: Vim/Neovim ทำงานช้า
- วิธีแก้ไข: ตรวจสอบว่ามี Plugin ที่ใช้ทรัพยากรมากเกินไปหรือไม่ ตรวจสอบว่าไฟล์ Configuration มีขนาดใหญ่เกินไปหรือไม่ ตรวจสอบว่า Hardware ของเครื่องเพียงพอต่อการใช้งานหรือไม่
- ปัญหา: Error message ปรากฏขึ้น
- วิธีแก้ไข: อ่าน Error message อย่างละเอียด เพื่อทำความเข้าใจสาเหตุของปัญหา ค้นหา Error message ใน Google หรือ Stack Overflow เพื่อหาแนวทางแก้ไข ตรวจสอบไฟล์ Configuration เพื่อหาร่องรอยของข้อผิดพลาด
- ปัญหา: ไม่สามารถออกจาก Vim ได้
- วิธีแก้ไข: กด
:q!เพื่อออกจาก Vim โดยไม่ Save ไฟล์ หรือกด:wqเพื่อ Save ไฟล์แล้วออกจาก Vim
- วิธีแก้ไข: กด
นอกจากปัญหาที่กล่าวมาข้างต้นแล้ว ยังมีปัญหาอื่นๆ ที่อาจจะเกิดขึ้นได้อีกมากมาย สิ่งสำคัญคือการทำความเข้าใจสาเหตุของปัญหา และพยายามแก้ไขปัญหาอย่างใจเย็น หากไม่สามารถแก้ไขปัญหาได้ด้วยตัวเอง ลองขอความช่วยเหลือจาก Community Vim/Neovim หรือค้นหาข้อมูลใน Internet
ตัวอย่างจากประสบการณ์ 20 ปี
ตลอดระยะเวลา 20 ปีที่ผมได้คลุกคลีอยู่กับ Vim/Neovim ผมได้พบเจอกับสถานการณ์ต่างๆ มากมาย และได้เรียนรู้เทคนิคต่างๆ ที่ช่วยให้ผมสามารถใช้งาน Editor ได้อย่างมีประสิทธิภาพ ในส่วนนี้ผมจะขอแชร์ตัวอย่างจากประสบการณ์จริง เพื่อให้ทุกคนได้เห็นภาพการใช้งาน Vim/Neovim ในสถานการณ์ต่างๆ และนำไปประยุกต์ใช้กับการทำงานของตัวเอง
สถานการณ์ที่ 1: การแก้ไข Code จำนวนมาก ใน Project ขนาดใหญ่
ผมเคยได้รับมอบหมายให้แก้ไข Code จำนวนมาก ใน Project ขนาดใหญ่ ซึ่งเป็น Project ที่มี Codebase ที่ซับซ้อน และมีไฟล์จำนวนมาก การแก้ไข Code ใน Project ขนาดใหญ่เช่นนี้ อาจจะเป็นเรื่องที่น่าเบื่อและเสียเวลา หากใช้ Editor ทั่วไป แต่ด้วย Vim/Neovim ผมสามารถแก้ไข Code ได้อย่างรวดเร็วและมีประสิทธิภาพ
เทคนิคที่ผมใช้ในสถานการณ์นี้คือ:
- Fuzzy Finder: ใช้ Plugin อย่าง
fzfหรือtelescope.nvimเพื่อค้นหาไฟล์และ Symbol ที่ต้องการได้อย่างรวดเร็ว - Multiple Cursors: ใช้ Plugin อย่าง
vim-multiple-cursorsเพื่อแก้ไข Code ในหลายๆ บรรทัดพร้อมกัน - Macros: บันทึก Macro เพื่อทำซ้ำการแก้ไข Code ในลักษณะเดียวกัน
- Regular Expressions: ใช้ Regular Expressions เพื่อค้นหาและแทนที่ Code ที่ซับซ้อน
สถานการณ์ที่ 2: การ Debug Code
การ Debug Code เป็นสิ่งที่หลีกเลี่ยงไม่ได้ในการพัฒนา Software ด้วย Vim/Neovim ผมสามารถ Debug Code ได้อย่างมีประสิทธิภาพ โดยใช้ Plugin อย่าง vimspector หรือ nvim-dap ซึ่งจะช่วยให้ผมสามารถ Set Breakpoints, Step through Code, และ Inspect Variables ได้
สถานการณ์ที่ 3: การเขียน Markdown
ผมใช้ Vim/Neovim ในการเขียน Markdown เป็นประจำ เพราะ Vim/Neovim มี Syntax highlighting และ Keybindings ที่ช่วยให้การเขียน Markdown เป็นเรื่องที่ง่ายและสนุกยิ่งขึ้น นอกจากนี้ ผมยังใช้ Plugin อย่าง vim-markdown เพื่อเพิ่มฟังก์ชันการทำงานต่างๆ เช่น Table of Contents Generation และ Preview
สถานการณ์ที่ 4: การจัดการ Configuration Files
ผมใช้ Vim/Neovim ในการจัดการ Configuration Files ต่างๆ เช่น .bashrc, .zshrc, และ .gitconfig เพราะ Vim/Neovim มี Syntax highlighting และ Keybindings ที่ช่วยให้การแก้ไข Configuration Files เป็นเรื่องที่ง่ายและมีประสิทธิภาพยิ่งขึ้น
จากประสบการณ์ของผม Vim/Neovim เป็น Editor ที่ทรงพลังและมีความยืดหยุ่นสูง สามารถปรับแต่งให้เข้ากับการใช้งานของเราได้อย่างลงตัว หากคุณต้องการ Editor ที่จะช่วยให้คุณทำงานได้อย่างรวดเร็วและมีประสิทธิภาพ Vim/Neovim คือตัวเลือกที่ไม่ควรพลาด ลองศึกษาและฝึกฝนการใช้งาน Vim/Neovim อย่างจริงจัง แล้วคุณจะพบว่า Vim/Neovim คือ Editor ที่ดีที่สุดในโลก
เครื่องมือแนะนำ
Vim และ Neovim เป็นเครื่องมือที่ทรงพลังด้วยตัวมันเอง แต่การเพิ่มพูนความสามารถด้วยเครื่องมือเสริม จะช่วยให้ประสบการณ์การใช้งานดียิ่งขึ้นไปอีกขั้น ลองมาดูกันว่ามีอะไรน่าสนใจบ้างPlugin Manager
Plugin Manager เป็นเครื่องมือสำคัญที่ช่วยให้การจัดการ Plugin ใน Vim และ Neovim เป็นเรื่องง่ายดาย ไม่ต้องมานั่งดาวน์โหลดไฟล์เอง หรือแก้ไข `vimrc` เองให้วุ่นวาย Plugin Manager จะจัดการทุกอย่างให้เราอย่างเป็นระบบ * **Vundle:** เป็น Plugin Manager ที่ใช้งานง่าย เหมาะสำหรับผู้เริ่มต้น ติดตั้งง่าย แค่ clone repository แล้วเพิ่ม Plugin ที่ต้องการใน `vimrc`Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'airblade/vim-gitgutter'
จากนั้นรัน `:PluginInstall` ใน Vim
* **Pathogen:** เป็นอีกหนึ่ง Plugin Manager ที่ได้รับความนิยม ใช้งานโดยการ clone Plugin ลงใน directory แยก แล้ว Pathogen จะจัดการ load ให้เอง
* **vim-plug:** เป็น Plugin Manager ที่รวดเร็วและยืดหยุ่น รองรับการติดตั้ง Plugin แบบ parallel และ lazy-loading ช่วยให้ Vim startup ได้เร็วขึ้น
Plug 'junegunn/vim-plug', { 'do': ':PlugInstall --sync' }
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
รัน `:PlugInstall` เพื่อติดตั้ง
ผมแนะนำ vim-plug นะ เพราะมันเร็วและจัดการ dependency ได้ดีกว่าตัวอื่น ๆ ที่เคยลองมา
LSP Client
LSP (Language Server Protocol) Client ช่วยให้ Vim และ Neovim สามารถทำงานร่วมกับ Language Server ได้ ทำให้ได้ฟีเจอร์อย่าง auto-completion, go-to-definition, find-references, และอื่นๆ อีกมากมาย เหมือน IDE สมัยใหม่ * **coc.nvim:** เป็น LSP Client ที่ได้รับความนิยมสูง ใช้งานง่าย รองรับ Language Server หลากหลายภาษา * **vim-lsp:** เป็น LSP Client ที่เรียบง่าย เน้นความเร็วและประสิทธิภาพ * **nvim-lspconfig:** เป็น LSP Client สำหรับ Neovim ที่มาพร้อมกับการ configuration ที่ยืดหยุ่น ผมใช้ coc.nvim มาตลอด เพราะมัน setup ง่ายดี แถมมี extensions ให้เลือกเยอะมาก ใครที่อยากได้ IDE-like experience ใน Vim ลองใช้ดูTheme และ Color Scheme
Theme และ Color Scheme ช่วยให้ Vim และ Neovim ดูสวยงาม น่าใช้งานมากขึ้น มีให้เลือกมากมาย ทั้งแบบ dark และ light เลือกที่ชอบได้เลย * **Solarized:** เป็น Color Scheme ที่ได้รับความนิยมสูง เน้นสีที่สบายตา เหมาะสำหรับการใช้งานนานๆ * **Dracula:** เป็น Dark Theme ที่สวยงาม มีสีสันสดใส * **Gruvbox:** เป็น Color Scheme ที่มีทั้งแบบ dark และ light ให้เลือก ส่วนตัวผมชอบ Dracula มากที่สุด เพราะมันดูเท่ดี แต่ก็แล้วแต่ความชอบของแต่ละคนนะ ลองหา ๆ ดูในเน็ต มีให้เลือกเยอะแยะFuzzy Finder
Fuzzy Finder ช่วยให้การค้นหาไฟล์และ buffers ใน Vim และ Neovim เป็นเรื่องง่ายดาย เพียงแค่พิมพ์ชื่อไฟล์บางส่วน ก็จะแสดงผลลัพธ์ออกมาให้เลือก * **fzf.vim:** เป็น Fuzzy Finder ที่รวดเร็วและยืดหยุ่น รองรับการค้นหาไฟล์, buffers, tags, และอื่นๆ อีกมากมาย * **ctrlp.vim:** เป็น Fuzzy Finder ที่ใช้งานง่าย เหมาะสำหรับผู้เริ่มต้น Fzf นี่แหละคือ the best! เร็ว แรง ทะลุนรก ใครที่ต้องเปิดไฟล์เยอะ ๆ ในโปรเจกต์ใหญ่ ๆ ต้องมีเลยCase Study ประสบการณ์จริง
ผมเริ่มใช้ Vim มาตั้งแต่สมัยเรียนมหาวิทยาลัย ตอนนั้นยังไม่มี Neovim ด้วยซ้ำ สาเหตุที่หันมาใช้ Vim ก็เพราะว่าเครื่องคอมพิวเตอร์ที่มหาวิทยาลัยมันช้ามาก Editor ตัวอื่น ๆ เปิดแทบไม่ขึ้น แต่ Vim นี่เปิดปุ๊บติดปั๊บ แถมยังกิน resource น้อยมาก ตอนแรก ๆ ก็ใช้แบบงู ๆ ปลา ๆ คือเปิดไฟล์ แก้ ๆ แล้วก็ save แต่พอเริ่มทำงานจริงจัง ก็เริ่มศึกษา Vim อย่างจริงจัง เริ่มจากการปรับแต่ง `vimrc` ใส่ Plugin ที่จำเป็น และฝึกใช้ Keybinding ต่าง ๆ ผมจำได้เลยว่าช่วงแรก ๆ ที่ฝึกใช้ Vim นี่ทรมานมาก เพราะต้องเปลี่ยนวิธีการทำงานใหม่หมด จากที่เคยใช้เมาส์คลิก ก็ต้องมาใช้ Keybinding แทน แต่พอใช้ไปสักพัก ก็เริ่มชิน และพบว่ามันเร็วกว่าการใช้เมาส์เยอะมาก ผมเคยจับเวลาดูว่าการแก้ไขไฟล์ด้วย Vim เร็วกว่า Editor ตัวอื่น ๆ ประมาณ 20-30% เลยทีเดียว ยิ่งถ้าเป็นงานที่ต้องแก้ไขไฟล์เยอะ ๆ นี่เห็นผลชัดเจนมาก ยกตัวอย่างเช่น ตอนที่ผมทำงานในโปรเจกต์หนึ่ง ซึ่งมีไฟล์ configuration เป็นร้อย ๆ ไฟล์ ผมสามารถแก้ไขไฟล์ทั้งหมดได้ภายในเวลาไม่กี่ชั่วโมง ด้วยการใช้ Vim และ Plugin ที่เหมาะสม ในขณะที่เพื่อนร่วมงานที่ใช้ Editor ตัวอื่น ๆ ต้องใช้เวลาเป็นวัน ๆ นอกจากนี้ Vim ยังช่วยให้ผม focus กับงานได้ดีขึ้น เพราะไม่ต้องเสียเวลาไปกับการคลิกเมาส์ หรือหาเมนูต่าง ๆ ผมสามารถจดจ่ออยู่กับการเขียนโค้ดได้อย่างเต็มที่ ปัจจุบันผมก็ยังใช้ Vim เป็น Editor หลักในการทำงานอยู่ ถึงแม้ว่าจะมี Editor ตัวใหม่ ๆ ออกมามากมาย แต่ผมก็ยังรู้สึกว่า Vim คือ Editor ที่เหมาะกับผมที่สุด ผมว่า Vim มันเหมือนเครื่องมือช่างที่ custom ได้ตามใจเราเลย ใครที่อยากทำงานให้เร็วและมีประสิทธิภาพ ลองหันมาใช้ Vim ดูนะ รับรองไม่ผิดหวังFAQ คำถามที่พบบ่อย
หลายคนอาจมีคำถามเกี่ยวกับการใช้งาน Vim และ Neovim ผมรวบรวมคำถามที่พบบ่อยมาตอบไว้ให้แล้วVim กับ Neovim ต่างกันอย่างไร? ควรเลือกใช้อะไรดี?
Vim และ Neovim เป็น Editor ที่คล้ายกันมาก ทั้งคู่มีพื้นฐานมาจาก Vi แต่ Neovim มีเป้าหมายที่จะปรับปรุง Vim ให้ทันสมัยมากขึ้น โดยการปรับปรุง codebase ให้ clean ขึ้น และเพิ่มฟีเจอร์ใหม่ ๆ ที่ Vim ไม่มี เช่น asynchronous plugin support, built-in terminal, และ LSP support ถ้าคุณเป็นคนที่ต้องการความเสถียรและคุ้นเคยกับ Vim อยู่แล้ว ก็สามารถใช้ Vim ต่อไปได้ แต่ถ้าคุณต้องการลองฟีเจอร์ใหม่ ๆ และไม่กลัวที่จะเจอปัญหาบ้าง Neovim ก็เป็นตัวเลือกที่น่าสนใจ ส่วนตัวผมใช้ Neovim นะ เพราะชอบฟีเจอร์ asynchronous plugin support มันทำให้ Vim ไม่หน่วงเวลา Plugin ทำงานKeybinding ของ Vim ยากเกินไป จะเริ่มต้นอย่างไรดี?
Keybinding ของ Vim อาจดูยากในตอนแรก แต่ถ้าฝึกฝนเป็นประจำก็จะชินไปเอง เริ่มจากการเรียนรู้ Keybinding พื้นฐานก่อน เช่น `h, j, k, l` สำหรับการเลื่อน cursor, `i` สำหรับ insert mode, `v` สำหรับ visual mode, และ `:w` สำหรับ save จากนั้นค่อย ๆ เรียนรู้ Keybinding ที่ซับซ้อนมากขึ้น เช่น `d` สำหรับ delete, `y` สำหรับ yank (copy), และ `p` สำหรับ paste นอกจากนี้คุณยังสามารถปรับแต่ง Keybinding เองได้ตามต้องการ โดยการแก้ไข `vimrc` อย่าท้อแท้! ค่อย ๆ ฝึกไปทีละนิด สักวันคุณจะกลายเป็น Vim ninja เองแหละPlugin เยอะเกินไป จะเลือก Plugin อย่างไรดี?
Plugin ใน Vim และ Neovim มีให้เลือกมากมาย เลือก Plugin ที่จำเป็นสำหรับ workflow ของคุณเท่านั้น อย่าติดตั้ง Plugin ที่ไม่ได้ใช้ เพราะจะทำให้ Vim startup ช้าลง เริ่มต้นจากการติดตั้ง Plugin ที่ช่วยในการแก้ไขโค้ด เช่น syntax highlighting, auto-completion, และ linting จากนั้นค่อย ๆ เพิ่ม Plugin ที่ช่วยในการจัดการไฟล์, buffers, และ version control ลองอ่านรีวิว Plugin จากคนอื่น ๆ ก่อนตัดสินใจติดตั้ง และอย่าลืม uninstall Plugin ที่ไม่ได้ใช้แล้วVim startup ช้า ทำอย่างไรดี?
Vim startup ช้าอาจเกิดจากหลายสาเหตุ เช่น Plugin เยอะเกินไป, Plugin ที่ทำงานหนัก, หรือ `vimrc` ที่ซับซ้อน เริ่มต้นจากการตรวจสอบ `vimrc` ว่ามีอะไรที่สามารถ optimize ได้บ้าง เช่น lazy-loading Plugin, ใช้ Plugin ที่มีประสิทธิภาพ, และหลีกเลี่ยงการใช้ autocommand ที่ทำงานหนัก นอกจากนี้คุณยังสามารถใช้ profiling tools เพื่อหาว่า Plugin ตัวไหนที่ทำให้ Vim startup ช้า แล้วค่อยแก้ไขต่อไปจะปรับแต่ง Vim ให้เหมือน IDE ได้อย่างไร?
Vim สามารถปรับแต่งให้เหมือน IDE ได้ โดยการติดตั้ง Plugin ที่เหมาะสม เช่น LSP client, debugger, และ file explorer LSP client จะช่วยให้คุณได้ฟีเจอร์อย่าง auto-completion, go-to-definition, และ find-references Debugger จะช่วยให้คุณสามารถ debug โค้ดได้ File explorer จะช่วยให้คุณสามารถ browse ไฟล์และ directory ได้ แต่จำไว้ว่า Vim ไม่ใช่ IDE ถึงแม้ว่าจะปรับแต่งให้คล้ายกันได้ แต่ก็ยังมีข้อจำกัดอยู่บ้างจะออกจาก Vim ได้อย่างไร?
คำถามยอดฮิตสำหรับผู้เริ่มต้น Vim คือ "จะออกจาก Vim ได้อย่างไร?" มีหลายวิธีในการออกจาก Vim: * `:q` - ออกจาก Vim ถ้าไม่มีการเปลี่ยนแปลง * `:q!` - ออกจาก Vim โดยไม่ save การเปลี่ยนแปลง * `:wq` - Save การเปลี่ยนแปลงแล้วออกจาก Vim * `:x` - Save การเปลี่ยนแปลงแล้วออกจาก Vim (ถ้ามีการเปลี่ยนแปลง) * `ZZ` - Save การเปลี่ยนแปลงแล้วออกจาก Vim (เหมือน `:x`) จำให้แม่นนะ! `:q!` นี่ช่วยชีวิตมาหลายครั้งแล้ว ตอนที่เผลอไปแก้ไฟล์มั่ว ๆสรุป
Vim และ Neovim เป็น Editor ที่ทรงพลังและยืดหยุ่น เหมาะสำหรับโปรแกรมเมอร์ที่ต้องการเครื่องมือที่รวดเร็วและปรับแต่งได้ตามใจชอบ ถึงแม้ว่าการเรียนรู้ Vim จะต้องใช้เวลาและความพยายาม แต่ผลตอบแทนที่ได้นั้นคุ้มค่าอย่างแน่นอน Vim ไม่ใช่แค่ Editor แต่มันคือปรัชญา คือวิถีแห่งการเขียนโค้ดที่เน้นความเร็วและประสิทธิภาพ การใช้ Vim จะช่วยให้คุณ focus กับงานได้ดีขึ้น และเขียนโค้ดได้อย่างมีประสิทธิภาพมากขึ้น สำหรับผู้เริ่มต้น ผมแนะนำให้เริ่มต้นจากการเรียนรู้ Keybinding พื้นฐานก่อน จากนั้นค่อย ๆ เรียนรู้ Plugin ที่จำเป็น และปรับแต่ง Vim ให้เข้ากับ workflow ของคุณ อย่าท้อแท้! การเรียนรู้ Vim ต้องใช้เวลาและความอดทน แต่ถ้าคุณพยายามอย่างสม่ำเสมอ สักวันคุณจะกลายเป็น Vim master อย่างแน่นอน สุดท้ายนี้ ผมอยากฝากคำแนะนำว่า "Vim is not for everyone" ถ้าคุณลองใช้ Vim แล้วไม่ชอบ ก็ไม่จำเป็นต้องฝืนใช้ Editor ที่เหมาะกับคุณที่สุดคือ Editor ที่คุณรู้สึกสบายใจและสามารถทำงานได้อย่างมีประสิทธิภาพ แต่ถ้าคุณอยากลองสัมผัสประสบการณ์การเขียนโค้ดที่แตกต่าง Vim ก็เป็นตัวเลือกที่น่าสนใจ ลองดู แล้วคุณอาจจะติดใจก็ได้ ใครจะรู้!Tips จากประสบการณ์ 20 ปี
Tip 1: ฝึกใช้ Command Mode ให้คล่อง
Command Mode คือหัวใจสำคัญของ Vim และ Neovim เลยครับ ถ้าคุณยังใช้แค่ Insert Mode แล้วกดลูกศรเลื่อนไปมา บอกเลยว่ายังใช้ศักยภาพของมันได้ไม่ถึง 10% แน่นอน! ลองฝึกใช้คำสั่งพื้นฐานอย่าง hjkl (เลื่อนซ้าย ล่าง บน ขวา) ให้คล่องก่อนเลยครับ แล้วค่อยๆ เพิ่มคำสั่งที่ซับซ้อนขึ้น เช่น w (ข้ามไปต้นคำถัดไป), b (ย้อนกลับไปต้นคำก่อนหน้า), 0 (ไปต้นบรรทัด), $ (ไปท้ายบรรทัด) รับรองว่าชีวิตจะง่ายขึ้นเยอะ
ผมเคยเจอน้องใหม่หลายคนที่ติดกับการใช้ลูกศร เพราะมันคุ้นเคยจาก Editor อื่นๆ แต่พอฝึก Command Mode จริงจังแค่ไม่กี่วัน ทุกคนก็บอกเป็นเสียงเดียวกันว่า "มันเร็วกว่าเยอะ!" ลองคิดดูนะ แทนที่จะต้องกดลูกศรลงๆๆๆ เพื่อเลื่อนไป 10 บรรทัด คุณแค่พิมพ์ 10j ครั้งเดียวจบ! ประหยัดเวลาไปได้เยอะเลยครับ
นอกจากนี้ การใช้ Command Mode ยังช่วยให้คุณทำงานร่วมกับคำสั่งอื่นๆ ได้อย่างมีประสิทธิภาพมากขึ้น เช่น d (delete), c (change), y (yank/copy) คุณสามารถใช้คำสั่งเหล่านี้ร่วมกับ motion commands ได้อย่างอิสระ เช่น dw (delete word), c$ (change to end of line), yyp (copy line and paste below) ลองเล่นกับมันดูครับ แล้วคุณจะพบว่ามันสนุกกว่าที่คิด
สมัยก่อนผมก็เคยพลาดเหมือนกันครับ มัวแต่ใช้ Insert Mode แล้วก็บ่นว่า Vim มันยาก แต่พอได้ลองฝึก Command Mode จริงจัง ผมก็ติดใจเลยครับ มันเหมือนได้ปลดล็อคพลังที่ซ่อนอยู่ของ Editor ตัวนี้เลยแหละ!
Tip 2: เรียนรู้เรื่อง Registers
Registers ใน Vim ก็เหมือน Clipboard หลายอันที่ให้คุณเก็บข้อความหรือคำสั่งต่างๆ ไว้ได้ครับ หลายคนอาจจะยังไม่รู้ว่า Vim ไม่ได้มีแค่ Clipboard อันเดียว แต่มี Registers ให้ใช้เยอะแยะเลย! ลองใช้คำสั่ง :reg เพื่อดู Registers ทั้งหมดที่มีอยู่ในเครื่องคุณดูครับ
Registers ที่สำคัญๆ ก็เช่น " (default register), 0 (yank register), + (system clipboard register) นอกจากนี้ยังมี registers ที่ใช้เก็บตัวเลข ตัวอักษร หรือแม้แต่คำสั่งที่เคยใช้ไปแล้วด้วยนะ คุณสามารถเข้าถึง Registers เหล่านี้ได้โดยใช้ " ตามด้วยชื่อ Register เช่น "ayy (yank line into register a), "ap (paste from register a)
การใช้ Registers ช่วยให้คุณทำงานซ้ำๆ ได้อย่างรวดเร็ว เช่น ถ้าคุณต้องการ copy ข้อความจากไฟล์หนึ่งไปวางในอีกไฟล์หนึ่ง คุณสามารถใช้ "+yy (yank line into system clipboard) ในไฟล์แรก แล้วใช้ "+p (paste from system clipboard) ในไฟล์ที่สองได้เลยครับ สะดวกมากๆ
ผมเคยใช้ Registers ในการ refactor code จำนวนมากครับ เช่น ผมต้องการเปลี่ยนชื่อตัวแปรทุกตัวในไฟล์ ผมจะใช้ :%s/old_name/new_name/g เพื่อเปลี่ยนชื่อตัวแปรทั้งหมด แล้วใช้ u (undo) เพื่อยกเลิกการเปลี่ยนแปลง จากนั้นผมจะใช้ "=. (evaluate last command and store in default register) เพื่อเก็บคำสั่ง :%s/old_name/new_name/g ไว้ใน default register แล้วใช้ @: (execute last command) เพื่อรันคำสั่งนั้นอีกครั้ง ทำให้ผมสามารถเปลี่ยนชื่อตัวแปรได้อย่างรวดเร็วและแม่นยำ
Tip 3: สร้าง Custom Mappings
Custom Mappings คือการกำหนดปุ่มหรือชุดปุ่มให้ทำหน้าที่อย่างใดอย่างหนึ่งที่คุณต้องการครับ Vim อนุญาตให้คุณกำหนด Mappings ได้อย่างอิสระ ทำให้คุณสามารถปรับแต่ง Editor ให้เข้ากับสไตล์การทำงานของคุณได้อย่างเต็มที่ ลองคิดดูนะ ถ้าคุณต้องพิมพ์คำสั่งเดิมๆ ซ้ำๆ ทุกวัน มันคงจะดีกว่าถ้าคุณสามารถกำหนดปุ่มเดียวให้ทำหน้าที่นั้นแทนได้เลย
การสร้าง Mappings ทำได้โดยใช้คำสั่ง :map, :nmap, :imap, :vmap ซึ่งแต่ละคำสั่งก็มีความแตกต่างกันดังนี้
:mapใช้ได้ในทุก Mode:nmapใช้ได้เฉพาะ Normal Mode:imapใช้ได้เฉพาะ Insert Mode:vmapใช้ได้เฉพาะ Visual Mode
ทำหน้าที่ save ไฟล์ คุณสามารถใช้คำสั่ง :nmap :w ได้เลยครับ ( คือ Carriage Return หรือ Enter)
ผมเคยสร้าง Mappings สำหรับการ build และ run project ครับ ผมกำหนดให้ปุ่ม ทำหน้าที่ build project และปุ่ม ทำหน้าที่ run project ทำให้ผมสามารถ build และ run project ได้อย่างรวดเร็วโดยไม่ต้องพิมพ์คำสั่งยาวๆ ทุกครั้ง
Mappings เป็นเครื่องมือที่ทรงพลังมากครับ ลองใช้มันเพื่อปรับแต่ง Vim ให้เข้ากับสไตล์การทำงานของคุณ แล้วคุณจะพบว่ามันช่วยให้คุณทำงานได้เร็วขึ้นและสนุกขึ้นอีกเยอะเลย
Tip 4: ใช้ Plugins อย่างชาญฉลาด
Plugins คือส่วนเสริมที่ช่วยเพิ่มความสามารถให้กับ Vim และ Neovim ครับ มี Plugins ให้เลือกใช้มากมาย ตั้งแต่ Plugins ที่ช่วยจัดการไฟล์ ไปจนถึง Plugins ที่ช่วยเขียนโค้ดให้ง่ายขึ้น แต่การเลือกใช้ Plugins ก็ต้องระวังนะครับ เพราะ Plugins บางตัวอาจจะทำให้ Vim ทำงานช้าลง หรืออาจจะมี Bug ก็ได้
ผมแนะนำให้เริ่มจาก Plugins ที่จำเป็นจริงๆ ก่อน เช่น Plugins ที่ช่วยจัดการ package (เช่น vim-plug, packer.nvim), Plugins ที่ช่วย highlight syntax (เช่น vim-polyglot), Plugins ที่ช่วย autocompletion (เช่น coc.nvim) แล้วค่อยๆ เพิ่ม Plugins อื่นๆ ตามความต้องการของคุณ
ก่อนที่จะติดตั้ง Plugin ตัวไหน ผมแนะนำให้อ่าน documentation และ reviews ของ Plugin นั้นก่อนครับ เพื่อให้แน่ใจว่า Plugin นั้นมีคุณภาพและตรงกับความต้องการของคุณ นอกจากนี้ ควรตรวจสอบด้วยว่า Plugin นั้นได้รับการ maintain อย่างสม่ำเสมอหรือไม่ เพราะถ้า Plugin นั้นไม่ได้ถูก maintain อาจจะมี Bug หรือ security vulnerabilities ก็ได้
ผมเคยเจอปัญหา Plugins ตีกันครับ คือติดตั้ง Plugins หลายตัวแล้ว Vim ทำงานผิดปกติ วิธีแก้คือค่อยๆ ถอน Plugins ทีละตัว แล้วดูว่า Plugins ตัวไหนที่เป็นต้นเหตุของปัญหา วิธีนี้อาจจะเสียเวลาหน่อย แต่ก็ช่วยให้คุณหา Plugins ที่มีปัญหาได้
Tip 5: ปรับแต่ง Vim Configuration (vimrc/init.vim)
ไฟล์ .vimrc (สำหรับ Vim) หรือ init.vim (สำหรับ Neovim) คือไฟล์ที่เก็บการตั้งค่าต่างๆ ของ Editor ครับ คุณสามารถใช้ไฟล์นี้เพื่อปรับแต่ง Vim ให้เข้ากับสไตล์การทำงานของคุณได้อย่างเต็มที่ ตั้งแต่การเปลี่ยนสี ไปจนถึงการกำหนด Mappings และ Plugins
ไฟล์ .vimrc หรือ init.vim จะถูกอ่านเมื่อ Vim เริ่มทำงาน ดังนั้นการเปลี่ยนแปลงใดๆ ในไฟล์นี้จะมีผลต่อการทำงานของ Vim ในครั้งต่อไป ผมแนะนำให้ backup ไฟล์นี้ไว้ก่อนที่จะแก้ไขนะครับ เผื่อว่าคุณทำอะไรผิดพลาด จะได้ restore กลับมาได้
ในไฟล์ .vimrc หรือ init.vim คุณสามารถกำหนด options ต่างๆ ได้โดยใช้คำสั่ง :set เช่น :set number (แสดงหมายเลขบรรทัด), :set tabstop=4 (กำหนดขนาด Tab เป็น 4 ช่องว่าง), :set autoindent (เยื้อง code อัตโนมัติ) ลองศึกษา options ต่างๆ แล้วปรับแต่งให้เข้ากับความชอบของคุณ
ผมเคยเสียเวลาปรับแต่ง .vimrc ไปหลายวันครับ ลองผิดลองถูกอยู่เรื่อยๆ จนได้ไฟล์ที่ถูกใจที่สุด ไฟล์ .vimrc ของผมมี Mappings, Plugins, และ options ต่างๆ ที่ช่วยให้ผมทำงานได้อย่างมีประสิทธิภาพ ผมแนะนำให้คุณลองปรับแต่งไฟล์ .vimrc ของคุณดูนะครับ แล้วคุณจะพบว่ามันช่วยให้คุณรัก Vim มากขึ้นไปอีก
Tip 6: เรียนรู้ Regular Expressions
Regular Expressions (RegEx) คือรูปแบบที่ใช้ในการค้นหาและแทนที่ข้อความครับ RegEx เป็นเครื่องมือที่ทรงพลังมาก และมีประโยชน์อย่างยิ่งในการแก้ไขข้อความจำนวนมากใน Vim และ Neovim ใครที่ใช้ Vim เก่งๆ มักจะใช้ RegEx คล่องทั้งนั้นแหละครับ
Vim ใช้ RegEx ในคำสั่ง :substitute (:s) เพื่อค้นหาและแทนที่ข้อความ ตัวอย่างเช่น :%s/old_text/new_text/g จะค้นหาคำว่า "old_text" ในทุกบรรทัด (%) แล้วแทนที่ด้วย "new_text" (g หมายถึง global หรือทุกคำที่เจอ)
RegEx มี syntax ที่ซับซ้อน แต่ก็คุ้มค่าที่จะเรียนรู้ครับ ตัวอย่างเช่น
.(dot) หมายถึงตัวอักษรใดๆ*(asterisk) หมายถึง 0 หรือมากกว่า+(plus) หมายถึง 1 หรือมากกว่า?(question mark) หมายถึง 0 หรือ 1[](square brackets) หมายถึง set ของตัวอักษร[^](caret inside square brackets) หมายถึง set ของตัวอักษรที่ไม่ต้องการ
ผมเคยใช้ RegEx ในการ refactor code จำนวนมากครับ เช่น ผมต้องการเปลี่ยนชื่อ function ทุกตัวในไฟล์ ผมจะใช้ :%s/\ เพื่อเปลี่ยนชื่อ function ทั้งหมด คำสั่งนี้ใช้ RegEx เพื่อค้นหา function ที่มีชื่อว่า "old_function_name" แล้วแทนที่ด้วย "new_function_name" โดยที่ argument ของ function ยังคงเดิม
Tip 7: ใช้ Vim Modes ให้เป็นประโยชน์
Vim มีหลาย Modes แต่ละ Mode ก็มีหน้าที่แตกต่างกัน การสลับ Mode ไปมาอย่างรวดเร็วเป็นสิ่งสำคัญในการใช้ Vim อย่างมีประสิทธิภาพ Modes ที่สำคัญๆ ได้แก่
- Normal Mode: ใช้สำหรับ navigation และ editing
- Insert Mode: ใช้สำหรับพิมพ์ข้อความ
- Visual Mode: ใช้สำหรับ select ข้อความ
- Command Mode: ใช้สำหรับรันคำสั่ง
Esc (กลับไป Normal Mode), i (เข้า Insert Mode), v (เข้า Visual Mode), : (เข้า Command Mode)
การใช้ Normal Mode ให้คล่องเป็นสิ่งสำคัญที่สุดครับ เพราะคุณจะใช้ Normal Mode มากที่สุดในการทำงาน ลองฝึกใช้คำสั่งต่างๆ ใน Normal Mode ให้คล่อง เช่น hjkl (เลื่อน cursor), dw (delete word), yy (yank line), p (paste) แล้วคุณจะพบว่าการแก้ไขข้อความใน Vim นั้นเร็วกว่าที่คุณคิด
Visual Mode ก็มีประโยชน์มากในการ select ข้อความ คุณสามารถใช้ v (character-wise visual mode), V (line-wise visual mode), Ctrl-v (block-wise visual mode) เพื่อ select ข้อความในรูปแบบต่างๆ แล้วใช้คำสั่งต่างๆ เช่น d (delete), y (yank), c (change) เพื่อแก้ไขข้อความที่ select ไว้
ผมเคยใช้ block-wise visual mode เพื่อแก้ไข column ของข้อความจำนวนมากครับ เช่น ผมต้องการเพิ่ม comment หน้า column ที่สอง ผมจะใช้ Ctrl-v เพื่อ select column ที่สอง แล้วใช้ I (insert at beginning of line) เพื่อเพิ่ม comment หน้า column ที่ select ไว้
Tip 8: ฝึกฝนอย่างสม่ำเสมอ
การใช้ Vim และ Neovim ให้เก่งต้องอาศัยการฝึกฝนอย่างสม่ำเสมอครับ ไม่มีทางลัด! ลองใช้ Vim เป็น Editor หลักในการทำงานของคุณ แล้วคุณจะค่อยๆ เรียนรู้เทคนิคต่างๆ ไปเอง
ผมแนะนำให้หา tutorial หรือ course เรียน Vim ครับ มี resources มากมายบน internet ที่จะช่วยให้คุณเรียนรู้ Vim ได้อย่างรวดเร็ว นอกจากนี้ คุณยังสามารถเข้าร่วมชุมชน Vim เพื่อแลกเปลี่ยนความรู้และประสบการณ์กับผู้ใช้อื่นๆ ได้
อย่าท้อแท้ถ้าคุณรู้สึกว่า Vim ยากในตอนแรก ทุกคนก็เคยเป็นเหมือนกันครับ สิ่งสำคัญคือการฝึกฝนอย่างสม่ำเสมอ แล้วคุณจะค่อยๆ เก่งขึ้นเอง ผมเชื่อว่าทุกคนทำได้!
ผมใช้ Vim มา 20 ปีแล้วครับ และผมยังคงเรียนรู้สิ่งใหม่ๆ เกี่ยวกับ Vim อยู่เสมอ Vim เป็น Editor ที่มีศักยภาพมาก และผมเชื่อว่ามันจะช่วยให้คุณทำงานได้อย่างมีประสิทธิภาพมากขึ้น ลองใช้ Vim ดูนะครับ แล้วคุณจะไม่ผิดหวัง!
FAQ
FAQ 1: ทำไมต้องใช้ Vim/Neovim ในเมื่อมี Editor อื่นๆ ที่ใช้งานง่ายกว่า?
คำถามนี้เจอบ่อยมากครับ! Vim และ Neovim อาจจะดูยากในตอนแรก แต่เมื่อคุณเรียนรู้และใช้งานมันจนคล่องแล้ว คุณจะพบว่ามันเป็น Editor ที่เร็ว แรง และปรับแต่งได้เยอะมากๆ Editor อื่นๆ อาจจะใช้งานง่ายกว่า แต่ก็อาจจะไม่ได้มีประสิทธิภาพเท่า Vim ในบางสถานการณ์
ลองคิดดูนะ ถ้าคุณต้องแก้ไขไฟล์ขนาดใหญ่มากๆ หรือต้องทำงานบน server ที่ไม่มี GUI Editor Vim จะเป็นตัวเลือกที่ดีที่สุด เพราะมันใช้ทรัพยากรน้อยและทำงานได้เร็ว นอกจากนี้ Vim ยังมี Plugins มากมายที่ช่วยให้คุณทำงานได้ง่ายขึ้น และคุณยังสามารถปรับแต่ง Vim ให้เข้ากับสไตล์การทำงานของคุณได้อย่างเต็มที่
ผมเคยลองใช้ Editor อื่นๆ มาหลายตัวแล้วครับ แต่สุดท้ายผมก็กลับมาใช้ Vim อยู่ดี เพราะผมรู้สึกว่ามันเป็น Editor ที่เหมาะกับผมที่สุด มันเหมือนเป็นส่วนหนึ่งของร่างกายผมไปแล้ว ผมสามารถแก้ไขข้อความได้อย่างรวดเร็วและแม่นยำ โดยไม่ต้องใช้ mouse เลย
FAQ 2: Vim กับ Neovim ต่างกันอย่างไร? ควรเลือกใช้ตัวไหนดี?
Vim และ Neovim เป็น Editor ที่คล้ายกันมากครับ แต่ Neovim มีจุดเด่นที่เหนือกว่า Vim ในหลายๆ ด้าน เช่น Neovim มี architecture ที่ทันสมัยกว่า ทำให้สามารถรองรับ Plugins ที่เขียนด้วยภาษา Lua ได้ดีกว่า นอกจากนี้ Neovim ยังมี API ที่ดีกว่า ทำให้สามารถ integrate กับ tools อื่นๆ ได้ง่ายกว่า
ถ้าคุณเป็นผู้เริ่มต้น ผมแนะนำให้ลองใช้ Neovim ดูก่อนครับ เพราะมันมี features ใหม่ๆ ที่น่าสนใจ และมี community ที่ active แต่ถ้าคุณคุ้นเคยกับ Vim อยู่แล้ว และไม่ต้องการเปลี่ยนแปลงอะไรมาก ก็สามารถใช้ Vim ต่อไปได้
ผมใช้ Neovim เป็น Editor หลักครับ เพราะผมชอบ architecture ที่ทันสมัย และ API ที่ดีกว่าของมัน นอกจากนี้ ผมยังชอบ Plugins ที่เขียนด้วยภาษา Lua ซึ่งทำงานได้เร็วกว่า Plugins ที่เขียนด้วยภาษา Vimscript
FAQ 3: ติดตั้ง Plugins ใน Vim/Neovim อย่างไร?
มีหลายวิธีในการติดตั้ง Plugins ใน Vim และ Neovim ครับ วิธีที่ง่ายที่สุดคือการใช้ package manager เช่น vim-plug หรือ packer.nvim package manager จะช่วยให้คุณติดตั้ง ถอน และ update Plugins ได้อย่างง่ายดาย
วิธีการติดตั้ง vim-plug คือดาวน์โหลดไฟล์ vim-plug.vim แล้วนำไปไว้ใน directory ~/.vim/autoload (สำหรับ Vim) หรือ ~/.local/share/nvim/site/autoload (สำหรับ Neovim) จากนั้นแก้ไขไฟล์ .vimrc หรือ init.vim แล้วเพิ่ม code ต่อไปนี้
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()
จากนั้นรันคำสั่ง :PlugInstall เพื่อติดตั้ง Plugins ที่ระบุไว้ในไฟล์ .vimrc หรือ init.vim
ผมใช้ packer.nvim เป็น package manager ครับ เพราะมันมี features ที่น่าสนใจหลายอย่าง เช่น lazy loading และ dependency management นอกจากนี้ packer.nvim ยังเขียนด้วยภาษา Lua ซึ่งทำงานได้เร็วกว่า vim-plug
FAQ 4: จะเริ่มต้นเรียนรู้ Vim/Neovim ได้อย่างไร?
การเริ่มต้นเรียนรู้ Vim และ Neovim อาจจะดูยากในตอนแรก แต่ถ้าคุณมี mindset ที่ถูกต้อง และมีความอดทน คุณจะสามารถเรียนรู้มันได้อย่างแน่นอน
ผมแนะนำให้เริ่มต้นจากการเรียนรู้คำสั่งพื้นฐานก่อน เช่น hjkl (เลื่อน cursor), dw (delete word), yy (yank line), p (paste) จากนั้นค่อยๆ เรียนรู้คำสั่งที่ซับซ้อนขึ้น เช่น :%s/old_text/new_text/g (substitute text), :map (create mapping), :reg (show registers)
นอกจากนี้ คุณยังสามารถใช้ vimtutor ซึ่งเป็น tutorial ที่มาพร้อมกับ Vim และ Neovim เพื่อเรียนรู้คำสั่งพื้นฐานต่างๆ ได้ vimtutor จะสอนคุณทีละ step และให้คุณฝึกทำตามไปด้วย ทำให้คุณสามารถเรียนรู้ Vim ได้อย่างเป็นระบบ
ผมแนะนำให้ใช้ Vim เป็น Editor หลักในการทำงานของคุณ แล้วคุณจะค่อยๆ เรียนรู้เทคนิคต่างๆ ไปเอง อย่าท้อแท้ถ้าคุณรู้สึกว่า Vim ยากในตอนแรก ทุกคนก็เคยเป็นเหมือนกันครับ สิ่งสำคัญคือการฝึกฝนอย่างสม่ำเสมอ แล้วคุณจะค่อยๆ เก่งขึ้นเอง ผมเชื่อว่าทุกคนทำได้!
| Feature | Vim | Neovim |
|---|---|---|
| Architecture | Older | Modern |
| Lua Support | Limited | Excellent |
| API | Older | Modern, Asynchronous |
| Community | Large, Established | Active, Growing |
| Default Configuration | Minimal | More Modern Defaults |