# วิม
Vim หรือ วิม ย่อมาจาก Vi IMproved เป็นซอฟต์แวร์เสรี สำหรับเอดิเตอร์สำหรับแก้ไขไฟล์ มีรากฐานการพัฒนามาจากโปรแกรม vi ที่มีอยู่เดิม สามารถทำงานบนระบบปฏิบัติการหลาย ๆ ตัว Vim ถูกพัฒนาโดย แบรม มูลีนาร์ (Bram Moolenaar) ออกเผยแพร่เป็นครั้งแรกในปี พ.ศ. 2534 นับตั้งแต่นั้นมามีการเพิ่มเติมขีดความสามารถให้กับ Vim ความสามารถหลายอย่างออกแบบมาให้เป็นประโยชน์ในการแก้ไขซอร์สโค้ดโปรแกรม Vim ถูกออกแบบสำหรับทั้ง command line interface และ graphical user interface

โดยดังเดิม Vim ทำงานบนระบบปฏิบัติการ อะมีกา เท่านั้น จนกระทั่งมีการพัฒนา สนับสนุนการทำงานบนระบบปฏิบัติการหลาย ๆ ตัว ในปี พ.ศ. 2549 Vim เคยถูกโหวตให้เป็นหมวดหมู่เอดิเตอร์ยอดนิยมในนิตรยสาร Linux Journal

 เรียนรู้การใช้ Vim 
Vim ถือเป็นโปรแกรมที่เรียนรู้ยากตัวหนึ่ง แต่ถ้าผู้ใช้จับหลักการพื้นฐานได้ ก็สามารถใช้งานได้คล่องตัวขึ้นมาก เพื่อช่วยให้เรียนรู้เร็วขึ้น จึงมีโปรแกรมสอนวิธีใช้ Vim โดยการพิมพ์คำสั่ง vimtutor บนบรรทัดคำสั่งในยูนิกซ์ หรือคลิกบนไอคอน Vim tutor บนวินโดวส์ นอกจากนี้ภายใน Vim เองก็มีคู่มือการใช้งานโดยละเอียดซึ่งปรากฏบนจอโดยการพิมพ์คำสั่ง :help user-manual ภายใน Vim

ผู้ใช้ยังสามารถอ่าน ระบบขอความช่วยเหลือ โดยการพิมพ์คำสั่ง :help

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

Vim มีโหมดพื้นฐานอยู่ 6 โหมด และแยกย่อยจากโหมดพื้นฐานได้อีก 5 โหมด

 โหมด normal 
โหมด normal เป็นโหมดที่สามารถพิมพ์คำสั่งต่าง ๆ เช่นเพื่อเคลื่อนย้ายเคอร์เซอร์ ลบข้อความ เป็นต้น เวลาเริ่มต้นโปรแกรม Vim จะเข้ามาอยู่ในโหมดนี้

Vim เป็นโปรแกรมที่ใช้งานได้มีประสิทธิผลก็มาจากคำสั่งที่หลากหลายในโหมดนี้ ตัวอย่างเช่น ถ้าต้องการลบทั้งบรรทัดที่ตำแหน่งเคอร์เซอร์ ก็ใช้คำสั่ง dd ถ้าต้องการลบทั้งบรรทัดปัจจุบันและบรรทัดถัดไป ก็ใช้คำสั่ง dj โดยที่ d หมายถึงลบ ส่วน j เป็นปุ่มที่ใช้ในการเลื่อนเคอร์เซอร์ลง แทนที่จะใช้คำสั่ง dj ยังสามารถใช้คำสั่ง 2dd (หมายถึงทำคำสั่ง dd สองครั้ง) ก็ได้ เมื่อผู้ใช้เรียนรู้คำสั่งการเคลื่อนที่เคอร์เซอร์ต่าง ๆ และวิธีการนำคำสั่งมารวมกัน ก็สามารถใช้งานได้รวดเร็วกว่าเอดิเตอร์แบบที่ไม่มีโหมด

เมื่ออยู่ในโหมดนี้ สามารถเข้าไปในโหมด insert สำหรับแทรกข้อความได้หลายทาง เช่น ใช้ปุ่ม a (หมายถึง append หรือพิมพ์ต่อท้าย) หรือ i (หมายถึง insert หรือพิมพ์แทรก)

 โหมดย่อย operator-pending 
โหมดนี้เป็นโหมดย่อยของโหมด normal เมื่อผู้ใช้ป้อนคำสั่งและโปรแกรม Vim รอผู้ใช้เคลื่อนย้ายเคอร์เซอร์เพื่อให้คำสั่งสมบูรณ์ Vim ยังสามารถรับคำสั่งแทนการขยับเคอร์เซอร์ (เรียกว่า text object) เช่น aw หมายถึง คำ (word) as หมายถึง ประโยค (sentense) ap หมายถึงย่อหน้า (paragraph) ตัวอย่างการใช้เช่น คำสั่ง d2as จะลบประโยคปัจจุบันและประโยคถัดไป

 โหมดย่อย insert normal 
เป็นอีกโหมดย่อยของโหมด normal Vim จะเข้าโหมดนี้เมื่อผู้ใช้กดปุ่ม control-o ขณะอยู่ในโหมด insert Vim จะเข้ามาอยู่ในโหมด normal แต่จะรับเพียงคำสั่งเดียวแล้วกลับไปยังโหมด insert โดยอัตโนมัติ

 โหมด visual 
ในโหมดนี้เวลาเลื่อนเคอร์เซอร์จะทำให้ข้อความถูกไฮไลต์ตาม จนกว่าจะใส่คำสั่งเพื่อจัดการกับข้อความที่ถูกเลือกนั้น สามารถใช้คำสั่ง text object ในโหมดนี้ได้ด้วย

 โหมดย่อย insert visual 
เข้าโหมดนี้จากโหมด insert โดยกดปุ่ม control-o จะเข้าโหมดนี้เพื่อเลือกข้อความ เมื่อเลือกเสร็จจะกลับไปโหมด insert ตามเดิม

 โหมด select 
คล้ายกับการเลือกข้อความในไมโครซอฟท์วินโดวส์ สามารถใช้ปุ่มลูกศรหรือเมาส์เลือกข้อความ แต่เมื่อพิมพ์ตัวอักษรลงไป ข้อความเดิมที่ถูกเลือกจะถูกลบทิ้งไป และ Vim จะเข้าสู่โหมด insert พร้อมทั้งแทรกตัวอักษรที่เพิ่งพิมพ์เข้าไป

 โหมดย่อย insert select 
เข้าสู่โหมดนี้โดยการใช้เมาส์ลากบนข้อความ หรือใช้ปุ่มลูกศรร่วมกับปุ่ม shift เมื่อเลือกเสร็จ Vim จะกลับไปโหมด insert

 โหมด insert 
โหมดนี้ ข้อความต่าง ๆ ที่พิมพ์เข้าไป จะไปปรากฏอยู่ในข้อมูลไฟล์ เป็นโหมดที่ผู้ใช้คุ้นเคยเมื่อใช้โปรแกรมเอดิเตอร์อื่น ๆ

เวลาจะออกจากโหมด insert ไปยังโหมด normal ให้กดปุ่ม ESC
 โหมดย่อย replace 
โหมดนี้เป็นโหมด insert แบบพิเศษ แทนที่จะไปแทรกในเอกสาร ตัวอักษรที่พิมพ์เข้าไปจะไปทับของเก่า

 โหมด command-line 
ในโหมด command-line สามารถพิมพ์คำสั่งหนึ่งบรรทัด ซึ่งอาจเป็นคำสั่ง (ขึ้นต้นบรรทัดด้วยตัวอักษร :) ค้นหา (ขึ้นต้นด้วย / หรือ ?) หรือ คำสั่ง filter (ขึ้นต้นด้วย !)

 โหมด ex 
เหมือนโหมด command-line แต่สามารถพิมพ์คำสั่งได้เรื่อย ๆ จนกว่าจะใส่คำสั่ง visual

 โหมด evim 
เป็นโหมดพิเศษสำหรับ GUI โดย Vim จะจำลองตัวเองเหมือนกับเอดิเตอร์อื่นที่ไม่มีโหมด เอดิเตอร์จะเริ่มทำงานในโหมด insert ผู้ใช้สามารถใช้เมนู เมาส์ ปุ่มควมคุมบนแป้นพิมพ์ เช่น ปุ่มลูกศร สามารถเข้าโดยการพิมพ์ evim บนบรรทัดคำสั่งในยูนิกซ์ หรือ คลิกบนไอคอน evim ในวินโดวส์

 ความสามารถที่เพิ่มจาก vi 
Vim สามารถทำงานจำลองได้ใกล้เคียงกับ vi และยังมีขีดความสามารถุเพิ่มเติมเช่น
 มีรุ่นที่ทำงานบนระบบปฏิบัติการต่าง ๆ เช่น อะมีกา, ดอส, ไมโครซอฟท์วินโดวส์ รุ่นต่าง ๆ, โอเอสทู, ยูนิกซ์, ลินุกซ์ และ แมคโอเอสเท็น เป็นต้น
 มีระบบความช่วยเหลือ
 สามารถแก้ไขไฟล์ที่ถูกบีบอัดด้วย gzip, bzip2, ZIP และ tar
 สนับสนุน regular expression
 โหมด GUI
 ขีดความสามารถเหมือน IDE
 ใช้เมาส์ได้
 แก้ไขไฟล์ทางรีโมตผ่านทาง ssh, ftp และ http
 ตรวจสอบการสะกดคำ
 สนับสนุน ยูนิโคด
 สนับสนุน tabbed window
 สามารถย้อนกลับได้ไม่จำกัด