Vi vs vim, หรือ, มีเหตุผลใดที่ฉันต้องการใช้ vi?


84

ฉันรู้เรื่องตัวแก้ไขข้อความ * NIX เล็กน้อย (ปัจจุบันย้ายจากnanoไปยังvim) และหลังจากดูรอบ ๆ บน Unix & Linux SE ได้สังเกตว่าviใช้แทน 'vim' ในจำนวนคำถามที่พอใช้ ฉันรู้ว่า 'vim' ย่อมาจาก 'Vi IMproved' และด้วยเหตุนี้ฉันจึงสงสัยว่าทำไมทุกคนถึงอยากใช้ vi แทน vim vi มีข้อได้เปรียบที่สำคัญมากกว่าเสียงเรียกเข้าหรือไม่?

แก้ไข: ฉันคิดว่าคำถามของฉันถูกตีความผิด ฉันรู้ว่าเสียงเรียกเข้านั้นโดยส่วนใหญ่แล้วจะมีประสิทธิภาพมากกว่าและสมบูรณ์ด้วยคุณสมบัติแล้ว vi คือ สิ่งที่ฉันอยากรู้คือถ้ามีกรณีที่เป็นไปได้ที่ vi มีข้อได้เปรียบเหนือกลุ่มเช่นการใช้หน่วยความจำน้อยกว่าความแพร่หลายในระบบ * nix เป็นต้น


25
สิ่งที่ดีเกี่ยวกับviคือคุณสามารถคาดหวังให้มันเป็นระบบ POSIX ทุกระบบ
จอร์แดน

1
จริง ๆ แล้วการติดตั้งมาตรฐานของ Ubuntu นั้นรวมถึงviและไม่vim.. Ubuntu เป็นหนึ่งใน distro btw ;-) ที่เป็นมิตรกับผู้ใช้มากที่สุด
amyassin

10
@amyassin นี้ไม่ถูกต้อง, vimอูบุนตูเช่นลินุกซ์มากที่สุดรวมถึง viเป็นเพียงลิงก์สัญลักษณ์ที่ชี้ไปvimในที่สุดในการติดตั้งเริ่มต้น
jlliagre

2
คำแนะนำของฉัน: ใช้เป็นกลุ่ม แต่เรียนรู้viโดยใช้ข้อกำหนด POSIX viสำหรับ ในแบบที่คุณมีความรู้แบบพกพาเช่นเดียวกับรู้นามสกุลเป็นกลุ่ม
สัญลักษณ์แทน

1
@DDK คุณพลาด "ในที่สุด" ในคำสั่งของฉัน "ls -l / etc / alternatives / vi" -> "lrwxrwxrwx 1 รูทราก 17 janv. 1 2016 / etc / ทางเลือก / vi -> /usr/bin/vim.tiny"
jlliagre

คำตอบ:


61

viคือ (ยัง) เป็นบรรณาธิการมาตรฐาน POSIX มีการใช้งานมากมายและvimเป็นที่นิยมอย่างน้อยที่สุดบน Linux

ในขณะที่ระบบปฏิบัติการ Unix ที่viใช้งานได้หลายรุ่นให้การใช้งานใกล้เคียงกับมาตรฐานvimมากขึ้น แต่ได้เพิ่มคุณสมบัติพิเศษมากมายที่ทำให้เป็นดาบสองคม

แน่นอนส่วนขยายเหล่านี้มักได้รับการออกแบบมาเพื่อให้กระบวนการแก้ไขง่ายขึ้นและมีคุณสมบัติและฟังก์ชันที่มีประโยชน์ อย่างไรก็ตามเมื่อคุณคุ้นเคยกับบางคน (ไม่ใช่เครื่องสำอางเช่นสีซินแทกซ์ แต่เป็นสิ่งที่เปลี่ยนพฤติกรรมของบรรณาธิการ) คุณสามารถลืมพวกเขาได้อย่างง่ายดาย และการใช้การนำไปใช้ที่แตกต่างกันรวมถึงสิ่งที่อิงตามรหัส BSD ดั้งเดิมอาจทำให้คุณหงุดหงิดมาก ตรงกันข้ามยังเป็นจริง

นี้ค่อนข้างคล้ายกับปัญหาที่เกิดขึ้นกับสคริปต์ใช้ bashisms POSIX ที่ไม่ต้องเผชิญกับการใช้งานเปลือกดั้งเดิมมากขึ้นเช่นหรือdashksh


29

ไม่มี vi ไม่มีความได้เปรียบอย่างมีนัยสำคัญมากกว่าเสียงเรียกเข้าค่อนข้างเป็นวิธีอื่น ๆ กลุ่มมีข้อดีมากกว่า Vi คุณอาจจะสนใจใน: ทำไมโอ้ทำไมพวกนั้นทำ #? @! nutheads ใช้ vi?

แก้ไขอ่าน: การเรียนรู้ VIM คุ้มค่ากับความพยายามหรือไม่?


4
อ๋อ ฉันไม่ใช้ IDE ใด ๆ เพราะบรรณาธิการที่บังคับให้คุณใช้ไม่ใช่แค่กลุ่ม
Keith

1
@Keith ฉันใช้ทั้ง Xcode และ Eclipse และฉันยังคงสามารถแก้ไขด้วย vi เท่านั้น
ott--

@Keith SlickEdit มีการเลียนแบบเสียงเรียกเข้าที่ยอดเยี่ยมและ IDEA กำลังใกล้เข้ามา นอกจากนี้ Visual Studio ยังมี ViEmu
demonkoryu

1
IntellIJ ยังมีปลั๊กอินเสียงเรียกเข้าที่ดีซึ่งแทนที่พฤติกรรมของบรรณาธิการมาตรฐาน
JulienD

24

หลังจากใช้เวลาส่วนใหญ่ในชีวิตของฉัน (ไม่รวมวัยเด็ก) การแก้ไขอย่างสะดวกสบายด้วย Vim ฉันใช้เวลาประมาณหนึ่งเดือนโดยใช้ vi ในการทำเช่นนั้นฉันรู้ว่าฉันต้องพึ่งพา Vim สำหรับความต้องการการแก้ไขข้อความทั้งหมดของฉัน ก่อนการเดินทางของฉันกับ vi ทุกครั้งที่ฉันต้องแทนที่ข้อความหรือดำเนินการที่คล้ายกันในกลุ่มไฟล์ขนาดใหญ่ฉันจะเปิดไฟล์ใน Vim และเรียกใช้:bufdoคำสั่งและเมื่อใดก็ตามที่ฉันต้องเยื้องหรือจัดรูปแบบไฟล์บางไฟล์ ฉันจะเปิดพวกเขาเป็นกลุ่มและใช้เป็นกลุ่ม=และgwคำสั่ง ฉันเป็นกลุ่มขึ้นอยู่กับ หลังจากทราบว่า vi ไม่มีคำสั่งเหล่านี้ฉันถูกบังคับให้ทำการแปลงข้อความจำนวนมากด้วยsedและเรียนรู้มากมายเกี่ยวกับโปรแกรมอื่นเช่นawkและindent. แม้ว่าฉันจะเปลี่ยนกลับไปใช้ Vim ในตอนท้ายความรู้ที่ฉันได้รับจากการใช้เครื่องมือแก้ไขที่โดดเด่นน้อยกว่านั้นมีสาระสำคัญและพิสูจน์แล้วว่ามีประโยชน์อย่างยิ่ง นอกเหนือจากการเรียนรู้เกี่ยวกับเครื่องมือนอกเหนือจากโปรแกรมแก้ไขข้อความฉันยังคุ้นเคยกับ vi มากขึ้น เมื่อใดก็ตามที่ฉันทำงานกับระบบใหม่หรือเซิร์ฟเวอร์ที่ไม่มี Vim ฉันรู้สึกสะดวกสบายมากขึ้นเมื่อใช้ vi มากกว่าที่ฉันเคยทำมาก่อนหน้านี้

นอกจากนี้เมื่อเดือนที่แล้วฉันติดตั้ง Linux บนแท็บเล็ต WM8650 ราคาถูกและพบว่ามีความแตกต่างด้านประสิทธิภาพที่เห็นได้ชัดเจนระหว่าง Vim และ vi ดังนั้นฉันจึงมักจะใช้ vi บนแท็บเล็ต


3
ฉันพบว่านี่เป็นปัญหาที่พบบ่อยในไอที - เครื่องมือที่ช่วยให้เราสามารถปิดบังสิ่งต่าง ๆ ที่เราควรจะได้รับจากการเรียนรู้
danno

อันที่จริงการจัดการในสถานที่การแก้ไขไฟล์บนไฟล์จำนวนมากไม่สามารถ portably ทำได้ด้วย Awk หรือ Sed อย่างใดอย่างหนึ่ง ( -iสวิตช์บนทั้งคู่เป็นส่วนขยายของ GNU) แต่คุณสามารถใช้พวกมันได้อย่างสะดวกกับสิ่งที่ต้องการfor f in *; do printf '%s\n' '%!sed -e '\''some sed command'\' x | ex "$f"; done
Wildcard

12

ฉันจะมีเวลาที่ยากที่อาศัยอยู่ได้โดยไม่ต้องเป็นกลุ่ม แต่ฉันไม่สามารถยืน vi อย่างไรก็ตามการเรียนรู้อดีตจะทำให้คุณมีความคิดในการจัดการกับในภายหลังเมื่อนั่นคือทั้งหมดที่มีอยู่

อินเทอร์เฟซที่เป็นกลุ่มตามค่าเริ่มต้นนั้นค่อนข้างใกล้เคียงกับ vi หากฉันกำลังทำงานกับระบบที่เป็นกลุ่มสิ่งแรกที่ฉันทำคือเพิ่มสิ่งนี้ลงใน~/.vimrc:

syntax enable
set nocp
set wildmenu

มีอีกหลายสิ่งที่ฉันชอบ - ตอนนี้เสียและหมายเลขเป็นต้น - แต่ไม่เป็นไร "เปิดใช้งานไวยากรณ์" เพียงแค่เปิดใช้งานการเน้นไวยากรณ์พื้นฐาน (ค่อนข้างอ้วน: filetype plugin onเป็นพื้นฐานด้วย); "nocp" จะปิดการใช้งานร่วมกันได้ของ viและนี่คือสิ่งที่เริ่มแยกแยะเสียงเรียกเข้าจากพวกเจ้า olde vi (เช่นช่วยให้showmodeซึ่งทำให้ประสบการณ์โดยรวมของมนุษย์ค่อนข้างมากเนื่องจากตอนนี้คุณมีเงื่อนงำเกี่ยวกับว่าคุณอยู่ในคำสั่งหรือ ~ INSERT ~ โหมด). "wildmenu" เพียงแค่ให้เมนูเสร็จในแนวนอนเมื่อคุณทำบางสิ่งบางอย่างซึ่งทำให้ชีวิตง่ายขึ้น

แก้ไขข้อความสิ่งอำนวยความสะดวกที่เป็นกลุ่มเป็นสองรองใคร - อื่น ๆ นอกเหนือ emacs ฉันไม่เคยเห็นหรือได้ยินจากชิ้นส่วนของซอฟต์แวร์ที่มาใกล้ชิด พวกมันไม่ใช่เรื่องง่ายที่จะเรียนรู้ แต่เมื่อคุณรู้แล้วพวกมันจะเร็วกว่าเมนูของเม้าส์ที่จะใช้และมีความไดนามิกมากกว่าทางเลือกของปุ่มแมโครอย่างง่ายในอินเตอร์เฟสเมาส์เมนู สำหรับการเขียนโปรแกรมในบางครั้งฉันใช้ vim ควบคู่กับ IDE เช่น Eclipse แต่ฉันทำงานส่วนใหญ่เป็นกลุ่ม

หากคุณใช้เส้นทางนั้น lol ให้ดูที่ปลั๊กอินการเติมข้อมูลอัตโนมัติและรายการแท็ก และระวังด้านมืด


ฉันก็เพิ่มset mouse=aเช่นกัน
ott--

เกี่ยวกับความคิดเห็นเขียนโปรแกรมของคุณคุณอาจพบeclimที่น่าสนใจ ...
ire_and_curses

@ire_and_curses: ยังไม่ได้ลอง Eclipse และ vim ตรวจสอบไฟล์ต้นฉบับและอนุญาตให้อัปเดตภายนอกและการพลิกจากเดสก์ท็อปหนึ่งไปอีกเดสก์ท็อปหนึ่งกำลังพลิกจากเดสก์ท็อปหนึ่งไปยังอีกเดสก์ท็อปหนึ่ง ดูเหมือนความคิดค่อนข้างมาก
goldilocks

แม้ว่าฉันไม่คิดว่าคำตอบนี้ควรเป็นคำตอบที่เลือก (เนื่องจากมันมีอคติ) แต่เป็นประเภทของมุมมองที่เป็นประโยชน์สำหรับการทำความเข้าใจความแตกต่าง ขอบคุณที่รับตำแหน่ง
geneorama

8

ข้อดีคือ vi มักจะติดตั้งไว้ในองค์กร UNIX เช่น AIX หรือ Solaris นอกจากเสียงเรียกเข้าไม่สามารถใช้งานได้บนสื่อการติดตั้ง


1

ฉันได้สังเกตเห็นว่าผมเพียงเลือกViมากกว่าVIMเมื่อฉันคัดลอกและวางเอกสารข้อความหรือไฟล์ config ที่ฉันได้ใช้catคำสั่ง นี่เป็นเพราะเมื่อฉันพยายามctrl-cและจากนั้นctrl-vเข้าไปในVIMเอกสารที่เปิดอยู่มันจะบังคับให้ทุกบรรทัดแสดงความคิดเห็นต่อหน้าพวกเขา ดังนั้นเมื่อฉันใช้Viไปctrl-vหรือpasteไปยังViเอกสารที่เปิดอยู่มันจะวางสิ่งที่ฉันคัดลอกมาอย่างแน่นอน นอกจากนั้นฉันใช้VIMตลอดทั้งวัน

สนุก!


5
ลอง:set paste
แพทริค

3
set pastetoggle = <F2> ใน. vimrc ( vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste )
เดฟ

1

ดังที่คำตอบก่อนหน้าได้กล่าวไว้แล้ว vi มาพร้อมกับระบบยูนิกซ์ทุกระบบ

ฉันแค่อยากจะเพิ่มตัวอย่าง Arch Linux เป็นระบบดิจิตัลที่ได้รับความนิยมและมีน้ำหนักเบาเป็นพิเศษโดยที่ตัวติดตั้งหรือดิสทริบิวต์พื้นฐานจะมาพร้อมกับ vim ตามค่าเริ่มต้นอย่างไรก็ตามทั้งคู่มาพร้อมกับ vi

นี่ไม่ใช่ข้อดีสำหรับ vi ต่อ seเนื่องจากคุณสามารถติดตั้ง vim ด้วยตนเองได้และมีความจำเป็นเล็กน้อยในการติดตั้งที่ต้องใช้โปรแกรมแก้ไขข้อความและไม่มีอะไรที่ vim ดีกว่า vi สำหรับจุดประสงค์ แต่การเข้าใจความแตกต่างและ vi นั้นแพร่หลายและมีน้ำหนักเบากว่าเสียงเรียกเข้าจะทำให้ได้เปรียบเฉพาะ

นอกจากนี้เพื่อให้ครอบคลุมไม่มีใครยังไม่ได้ระบุอย่างชัดเจนว่า vi เป็นสารตั้งต้นโดยตรงในการเป็นกลุ่ม เสียงเรียกเข้าถูกออกแบบมาโดยเฉพาะให้เป็นทุกอย่างที่ vi เป็นและอื่น ๆ

ดังนั้นในทางตรงมากเป็นกลุ่มจะดีกว่า vi เพราะมันถูกออกแบบมาให้


1

เหตุผลเดียวที่จะใช้ vi over vim คือเมื่อคุณไม่มีทางเลือกอื่น

มีหลายเหตุผลหลายประการที่เสียงเรียกแทน "vi ที่ปรับปรุงแล้ว"!

ยืมจากโพสต์ที่เกี่ยวข้องฉันตอบ: -

  1. หน้าต่างหลายบาน - แนวนอนแนวตั้ง & แท็บ
  2. การเน้นภาพ
  3. ความช่วยเหลือออนไลน์ผ่านทาง: คำสั่งช่วยเหลือ
  4. บันทึกแมโครลงในทะเบียนที่คุณสามารถเรียกใช้งานได้
  5. เลิกทำ (และทำซ้ำ) หลายครั้งมากกว่ายกเลิกการสลับเป็นบ้าของ vi เก่า
  6. ประวัติบรรทัดคำสั่งประวัติการค้นหา
  7. ทั้งภาษาที่ฝังตัวพร้อมกับโฮสต์ของฟังก์ชั่นที่มีอยู่เช่น getcwd ()
  8. การจับคู่รูปแบบที่ขยายอย่างกว้างใหญ่
  9. การเติมคำให้สมบูรณ์ผ่าน ctrl-P & ctrl-N
  10. ตัวนำทางไฟล์ในตัว (clunky เล็กน้อย แต่มีประโยชน์)
  11. คีย์ ESC ออกจากคำสั่งที่คุณพยายามหลบหนีจากแทนที่จะเรียกใช้ (อย่างบ้าคลั่ง) ตามที่ vi ทำ
  12. ความสามารถในการเรียกใช้คำสั่งในบัฟเฟอร์, args หรือ windows ทั้งหมดผ่าน bufdo, argdo & windo

คุณอาจนำเหตุผลหลาย ๆ อย่างมาพูดถึงunix.stackexchange.com/a/425597/85039 ได้ที่นี่ นั่นจะทำให้คำตอบนี้ดีขึ้นเล็กน้อย มิฉะนั้นมันจะอ่านมากขึ้นเช่นความคิดเห็นกว่าคำตอบที่เกิดขึ้นจริง
Sergiy Kolodyazhnyy

จุดที่ถ่าย คำตอบอัพเดทแล้วยืมมาจากคำตอบที่เกี่ยวข้องเมื่อวานนี้
พอล T

1

นี่คือ exerpt จากVim Koans :

Master Wq และ Unix master

อาจารย์เก่า Unix มาถึง Master Wq “ ฉันมีปัญหา คุณสอนวิธีการเป็นกลุ่ม vi เป็นสิ่งศักดิ์สิทธิ์ แต่เป็นกลุ่มไม่ได้; แผ่กิ่งก้านสาขาของรหัสคุณลักษณะหน่วยความจำฝูงชน ไบนารีของมันกว้างใหญ่พฤติกรรมของมันไม่สอดคล้องกัน นี่ไม่ใช่วิถีของ Unix ฉันเกรงว่าคุณจะทำให้นักเรียนเข้าใจผิด สิ่งที่สามารถทำได้?”

ท่านอาจารย์พยักหน้า “ คุณพูดถูก” เขากล่าว “ เสียงเรียกเข้าถูกทำลาย ให้เราแก้ไข เราจะเริ่มไหม?”

เจ้านายเก่าของยูนิกซ์เห็นด้วยและเปิดเปลือก เขาพิมพ์:

$ vi vim.c

เขาเริ่มเขียนโค้ด Master Wq เฝ้าดูอยู่พักหนึ่งแล้วถามเขาว่า“ การใช้ vi แบบไหนที่คุณใช้อยู่? NVI? เป็นกลุ่ม? เอลวิส?”

“ ฉันไม่รู้” นายปริญญายูนิกซ์กล่าว “ มันไม่สำคัญ”

ท่านอาจารย์พยักหน้า ต้นแบบของ Unix ตะลึงงันครู่หนึ่งและปิดเอกสารของเขาที่ไม่ได้บันทึก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.