การใช้ Vim เมื่อเข้ารหัสแอปพลิเคชันขนาดใหญ่


17

ฉันเริ่มเรียนรู้เป็นกลุ่มและทำตามคำแนะนำที่ให้ไว้ใน stackexchange ฉันเริ่มใช้มันในบางโครงการของเล่นและฉันก็เจ๋งกับมัน
แต่ฉันเริ่มสงสัยว่าคุณจะมีประสิทธิผลได้อย่างไรโดยไม่ต้องเปิดไฟล์อื่น ๆ ตลอดเวลาเพียงแค่รู้ว่าชื่อคลาสนั้นเป็นเช่นไรแมโครที่รวมอยู่ในไฟล์อื่น ฯลฯ เป็นต้น

อะไรคือคำแนะนำทั่วไปที่คุณสามารถให้ได้


1
คุณจะต้องเพิ่มสคริปต์ Vim เพื่อช่วย ฉันใช้ Vim เพื่อเขียนโปรแกรมจำนวนมากและฉันมักจะใช้ ctags เพื่อช่วยนำทางไปรอบ ๆ ซอร์สโค้ด ใช้ภาษาอะไร
tehnyit

คำตอบ:


10

แง่มุมหนึ่งของโปรแกรมเมอร์ที่มีประสบการณ์ซึ่งย้ายจาก IDE ไปเป็นสภาพแวดล้อมคอนโซล / xterm คือการค้นหาการแทนที่การสร้างดัชนีของวัตถุซอร์สโค้ด (ชื่อฟังก์ชันตัวแปร) ฉันเชื่อว่าคำทั่วไปที่ใช้สำหรับ Visual Studio ของ Microsoft คือIntellisenseหรืออะไรทำนองนั้น

ในโลก Unix / Linux เช่นเป็นกลุ่มหนึ่งเครื่องมือที่ใช้ในกรณีที่ctagsหรือที่เป็นที่นิยมหลายภาษาการดำเนินงานมาเปิดctags เจริญงอกงาม ไม่vimเฉพาะเจาะจงและได้รับการสนับสนุนโดยโปรแกรมแก้ไขข้อความ Unix, Linux, MS Windows, Mac OS รวมถึง Emacs, CRiSP, เลวทรามและจำนวน clone vi อื่น ๆ , nedit, gedit, JED, UltraEdit, BBEdit และ DreamWeaver (บางส่วนเหล่านี้ผ่านทางปลั๊กอินของบุคคลที่สาม)

นอกเหนือจากนั้นการออกแบบที่ดีและการแยกย่อยอย่างรอบคอบการจัดการโครงการขนาดใหญ่ทำให้โครงการสามารถจัดการได้โดยมีเพียง 1-2 สถานที่ที่มีศักยภาพที่ชัดเจนในการมองหาบิตของข้อมูล ( typedefหรือclassคำจำกัดความเป็นต้น)

นอกจากนี้ฉันใช้หลายอินสแตนซ์ของ vim (มักจะผ่านviewสำหรับการดูแบบอ่านอย่างเดียวของไฟล์ต้นฉบับ) รวมถึงการ จำกัด การใช้บัฟเฟอร์การแก้ไขหลายรายการต่ออินสแตนซ์ vim (ส่วนใหญ่สำหรับการย้ายหรือการเปลี่ยนรหัสระหว่างไฟล์) ฉันพบว่าการใช้ไฟล์ต้นฉบับเพียงไม่กี่ไฟล์ที่เปิดในแต่ละครั้งสามารถช่วยในแบบของตัวเองเพื่อให้ฉันจดจ่อกับงานที่ทำอยู่


1
+1 สำหรับการแนะนำctags ที่อุดมสมบูรณ์ !
อัตติลาทุม

1
ฉันพบว่าการจัดระเบียบเพิ่งช่วยได้มาก หากคุณสามารถดูสิ่งประดิษฐ์ในแหล่งที่มาและพูดว่า "โอ้ที่ต้องกำหนดไว้ในสถานที่นี้" แล้วสิ่งต่าง ๆ ก็จะง่ายขึ้นมาก ในด้านบวกเริ่มต้นขึ้นเป็นกลุ่มช่วงเวลาที่รวดเร็วดังนั้นที่มีโหลครึ่งเปิดในครั้งเดียวกลายเป็นเรื่องปกติสวย
Zachary K

@ ZacharyK ครึ่งโหล? ฉันมักจะมีโหลเต็มในตอนท้ายของวัน
Izkata

ขึ้นอยู่กับวัน
Zachary K

7

ฉันไม่ได้ตั้งใจจะเป็นส่วนหนึ่งของการอภิปราย VIM กับ IDE ฉันเดาว่าเป็นส่วนบุคคลล่วงหน้า แต่ฉันใช้ VIM เป็นจำนวนมากและนี่คือเหตุผลที่ฉันพบว่ามันมีประสิทธิภาพมากในการใช้ vim

คำตอบสองส่วน:

A. สิ่งต่าง ๆ VIM อนุญาตให้คุณทำอะไรกับ IDEs ได้มากที่สุด (ฉันไม่ได้พยายามที่จะใส่ทุกฟีเจอร์ แต่ไม่กี่อย่างที่ไม่ชัดเจนที่ทำให้ vi ดู จำกัด )

  1. คุณสามารถสำรวจต้นแบบถ้าคุณctagsเปิดใช้งานและทำctrl+{

  2. คุณสามารถเปิดหลายหน้าต่างพร้อมกันร้องเพลง: คำสั่ง sp 'ชื่อไฟล์' แน่นอนว่าบางครั้งฉันเพิ่งเปิดเทอร์มินัลหลายตัวเพื่อทำให้ชีวิตง่ายขึ้น

  3. การเน้นไวยากรณ์ที่มีประสิทธิภาพ ค่าเริ่มต้นเช่นเดียวกับสิ่งอื่น ๆ นอกจากนี้ยังแตกต่างจาก IDEs บางส่วนหากมีการจัดฟันแบบเปิดไม่ตรงกันสตริงหรือไม่ตรงกับรายการปิดจะช่วยให้คุณมีข้อบ่งชี้ที่ชัดเจนมาก มันเป็นภาษาส่วนใหญ่มากกว่าเฉพาะ

  4. คุณสามารถดำเนินการบรรทัดคำสั่งโดยใช้คำสั่ง":!make"โดยไม่ต้องออกนอกหน้าต่าง

  5. สำรวจได้เร็วขึ้นโดยอ้างอิงจากคำค้นหา (vi รองรับ regexp หากคุณว่าง) และคุณสามารถใช้{ไป}โดยใช้ESC %

  6. เป็นไปได้ที่จะทำงานใน GDB ในขณะที่ทำการดีบักขั้นตอนและรักษา vi (ในหน้าต่างอื่นเพื่อทำงานกับโค้ด) เมื่อคุณตัดสินใจที่จะเปลี่ยนไฟล์คุณสามารถทำอีกครั้งและโหลดใหม่ใน GDB

B. หลายสิ่งที่คุณพบว่าดีกว่าใน VIM

  1. การค้นหาและการแทนที่มีประสิทธิภาพมากขึ้นอย่างแน่นอน

  2. คุณสามารถสร้างรูปลักษณ์และความรู้สึกที่กำหนดเองของคุณและ (ดำ + เขียวตรงข้ามกับสีขาว + สีน้ำเงิน) และที่สำคัญกว่านั้นคือคำสั่งที่ทรงพลังของคุณเอง

  3. บล็อกแนวตั้งเลือก ลองctrl+vเลื่อนเคอร์เซอร์ในแนวตั้ง นี่เป็นคุณลักษณะที่คาดไม่ถึงอย่างแท้จริง!

  4. ฟังดูแปลก ๆ - แต่พยายามตัด / คัดลอกบล็อกและต้องผ่านมันไป 30 ครั้ง! ไม่ต้องใช้ความพยายามมากไปกว่าการทำ 1 ครั้ง นอกจากนี้ให้ลองทำซ้ำ (ไม่ใช่เลิกทำ) กิจกรรมหนึ่งหรือหลายครั้ง

  5. การเยื้องอัตโนมัติการควบคุมแท็บและวิธีอัตโนมัติในการแปลงความคิดเห็นของคุณในบล็อกความคิดเห็นหรือความคิดเห็นของการกำหนดลักษณะเฉพาะ

  6. ข้อขัดแย้งการผสานที่มีประสิทธิภาพกับ vimdiff

  7. สิ่งที่สำคัญที่สุดกับสภาพแวดล้อมการทำงานบนคอนโซลคือคุณไม่เคยแตะเมาส์! ดังนั้นหากคุณรวดเร็วในบอร์ดหลัก - IDE ไม่ดี

  8. ทำงานกับหลายเครื่องเซิร์ฟเวอร์พร้อมกัน! ดูไม่ชัดเจน แต่บางครั้งเมื่อคุณทำงานบนเซิร์ฟเวอร์คุณเข้าสู่ระบบโดยตรงในหลายเครื่องและทำสิ่งต่าง ๆ

จะตอบเกี่ยวกับวิธีการทำใน vi หากคุณสมบัติเหล่านั้นอยู่ในความต้องการอย่างจริงจัง ดูเว็บไซต์นี้Vimcast แน่นอนมีมากมาย

แต่ใช่สิ่งที่ใช้คอนโซลเป็นส่วนใหญ่ล้าสมัยและไม่เคยพูดอะไรกับ IDEs


บันทึกย่อขนาดเล็ก: vim มี:makeคำสั่งในตัวคุณไม่จำเป็นต้องมี!(ซึ่งสำหรับผู้ที่ไม่ใช้ vim ให้เรียกใช้คำสั่งบนเทอร์มินัล) และฉันเพิ่งพบctrl-vเมื่อสองสามสัปดาห์ก่อนและตอนนี้ฉันใช้มันอย่างต่อเนื่องมันมีประโยชน์อย่างเหลือเชื่อ
เควิน

@Kevin - โอเคฉันไม่รู้เกี่ยวกับ <code>: สร้าง </code>! นี่เป็นเรื่องน่าตื่นเต้นที่ได้รู้ นี่คือความรักที่คุณได้รับจาก VIM - เราไม่สามารถสร้างรายชื่อของคุณสมบัติที่ VIM สามารถให้คุณได้ !! มันทำให้คุณประหลาดใจอยู่เสมอ ขอบคุณ
Dipan Mehta

ใช่มันยอดเยี่ยมเช่นนั้น ประโยชน์ของการ:makeก็คือว่ามันจะย้ายคุณไปที่ข้อผิดพลาดครั้งแรกและคุณสามารถนำทางพวกเขาด้วยcnและดูcp :help makeจริง ๆ แล้วฉันก็ไม่รู้ว่าจนกระทั่งฉันเงยหน้าขึ้นมอง; ฉันมักจะทำในหน้าต่างที่แตกต่างและ pwd ดูเหมือนว่าคุณจะต้องอยู่ในเดียวกันกับ Makefile แม้ว่าคุณสามารถใส่ในไดเรกทอรี src เพียงเพื่อย้ายไปที่รากและทำให้มี
เควิน

4

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

เป็นตัวอย่างที่ผมใช้zencodingสำหรับการแก้ไข HTML / CSS เป็นครั้งคราวsnipmateสำหรับ Textmate เหมือนตัวอย่างและคู่ของงูหลามที่เกี่ยวข้องกับ add-on (ที่pyflakes, pep8, vimpdbฯลฯ ) สำหรับการเข้ารหัสหลามซึ่งเป็นสิ่งที่ผมทำส่วนใหญ่มักจะ

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

สำหรับฉันแล้วคุณสมบัติที่มีประโยชน์ที่สุดของ Vim นั้นเป็นแบบในตัว (การยกเลิกตามเวลาการนำทางอย่างรวดเร็วตัวกรองช่วง ฯลฯ ) - สิ่งที่ฉันไม่สามารถหาได้ (หรืออย่างน้อยก็ไม่ใช่เรื่องง่ายที่จะเข้าถึง ) ใน IDEs ดังนั้นเมื่อคุณตั้งค่า Vim ของคุณให้มีบิตและชิ้นส่วนของ IDE ที่คุณต้องการจริงๆ ( snipmate, ctags... ) คุณจะได้รับประโยชน์จากทั้งสภาพแวดล้อม IDE และคอนโซล

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

แม้จะมีคุณงามความดีทั้งหมด แต่ฉันก็ยังพบว่าตัวเองกำลังวิ่ง!grep ...หรือ^Z + find ...ทุกขณะแล้ว


3

ฉันเขียนโปรแกรมทั้งหมดเป็นกลุ่ม ฉันคิดว่ามันง่ายกว่า IDE ที่ฉันเคยใช้ คุณสามารถเปิดไฟล์หลายไฟล์พร้อมกันได้แม้ในหน้าจอเดียวกัน (ค้นหาแท็บและหน้าต่าง) ฉันมักจะทำงานใน X ดังนั้นฉันจึงมีหลายหน้าจอ xterm ที่เปิดอยู่: หนึ่งสำหรับ c ไฟล์ใน vim (หลายในแท็บ) อีกส่วนหนึ่งสำหรับส่วนหัวใน vim (เช่นแท็บ) และ windows ที่ไม่ใช่ vim: build, debug การกำหนดค่า ฯลฯ แม้ในขณะที่ฉันอยู่บนคอนโซลบริสุทธิ์ฉันสามารถใช้แท็บหน้าต่างและการพับโค้ดเพื่อดูสิ่งที่ฉันต้องการและฉันสามารถสร้างและแม้แต่ดู manpages โดยไม่ต้องออก vim คุณเพียงแค่ต้องรู้ คำสั่งที่เหมาะสม และมีหลายอย่างฉันแน่ใจว่าฉันยังไม่เชี่ยวชาญแม้แต่ครึ่งเดียว และมันก็ยากที่จะเอาชนะการค้นหาและแทนที่ของกลุ่ม


1

แอปพลิเคชันขนาดใหญ่จำนวนมากได้รับ (ของฉันอย่างน้อยสอง) และฉันเดาว่าจะมีอีกมากมายที่เขียนใน Vim IDEs เช่นนี้ยังคงเป็นนวัตกรรมที่ค่อนข้างทันสมัยดังนั้นพูด

อย่างไรก็ตามวานิลลาธรรมดา (ouch) หรือ Vim นั้นขาดไปเล็กน้อย การรับรู้และการคิดในบางวิธีช่วยได้บ้างและปลั๊กอินช่วยได้มากซึ่งwww.vim.orgเป็นแหล่งที่ไม่รู้จบ ภาษาที่คุณใช้และภาษาทั่วไปบางอย่าง(สำหรับการแสดงความคิดเห็นสำหรับการเรียกดูไฟล์สำหรับ ... ) เปลี่ยนให้เป็นสภาพแวดล้อมการพัฒนาที่รวดเร็วอย่างรวดเร็ว หลังจากทั้งหมด (และบางคนจะเถียง) IDE เป็นเพียงตัวแก้ไขปลั๊กอินที่บรรจุในอินเทอร์เฟซที่ดีกว่า ไม่มีสิ่งกราฟิกใน IDE มากเช่นกัน

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