ฟีเจอร์ที่มีประโยชน์ที่สุดของ VIM ที่ไม่ได้มาตรฐานใน IDE [ปิด]


30

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


3
คุณใช้ IDE ตัวไหน IDE หลายตัวมีปลั๊กอิน VIM เพื่อให้คุณสามารถแก้ไขราวกับว่าคุณกำลังใช้ VIM
Brian R. Bondy

2
@Brian: แน่นอนว่าพวกเขาไม่ได้เลียนแบบคุณลักษณะขั้นสูงทั้งหมดใช่ไหม
Casebash

1
อาจไม่ใช่ทั้งหมด แต่สิ่งที่ฉันใช้นั้นยอดเยี่ยมสำหรับ VS มีอย่างน้อย 2 คน viemu.com และgithub.com/jaredpar/VsVim
Brian R. Bondy

2
@Brian R Bondy: ไม่มีใครเข้ามาปิดคุณสมบัติทั้งหมดของกลุ่ม พวกมันเกาพื้นผิวและไม่ทำอะไรอีกเลย
Daenyth

2
หรือคุณอาจจะมีเหตุผลและเริ่มใช้emacsแทน ;-)
Orbling

คำตอบ:


32

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

แม้ว่ามันอาจดูไม่ง่ายในตอนแรก แต่มันก็คุ้มค่ากับเวลาของคุณ แม้ว่าคุณจะไม่ได้ใช้มันเป็น IDE มาตรฐานของคุณ (โดยทั่วไปฉันใช้ Visual Studio หรือ Eclipse เป็นต้น) คุณจะพบว่าตัวเองใช้ VIM เพื่อเปิดและแก้ไขไฟล์อย่างรวดเร็วเพราะมันกลายเป็นวิธีที่เร็วกว่ารอ IDE ภาระ

ลงทุนเวลาเพื่อเรียนรู้วิธีใช้ VIM อย่างดีและคุณจะไม่มีวันเสียใจ ฉันว่ามันเปรียบได้กับการเรียนรู้ที่จะสัมผัส


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

4
+1 ในขณะที่ฉันเป็นสาวกของ emacs อาร์กิวเมนต์เดียวกันก็มีผล IDE สมัยใหม่นั้นมี "กราฟิก" มากเกินไปสำหรับโปรแกรมแก้ไขข้อความ
Orbling

22

สำหรับฉัน:globalคำสั่งคือแอพนักฆ่า มันจะรันคำสั่งเป็นกลุ่มโดยพลการในบรรทัดใด ๆ ที่ตรงกับ (หรือไม่ตรงกับ) regex

นี่คือตัวอย่างบางส่วน:

พฤติกรรมเริ่มต้นคือการแสดงรายการทุกบรรทัดที่ตรงกับ:

:g/TODO:/

จะแสดงรายการทุกบรรทัดที่มีข้อความ "TODO:"

เปลี่ยน 'มิกกี้' เป็น 'มินนี่' ในทุกบรรทัดที่มีคำว่า 'เมาส์'

:g/Mouse/ s/Mickey/Minnie/

คำสั่งสามารถมีช่วงของตัวเองดังนั้นสิ่งนี้จะลบออกจากทุกบรรทัดด้วย "TODO:" ไปยังบรรทัดว่างถัดไป:

: g / TODO: /., / ^ $ / d

ใช้: g! เพื่อดำเนินการในทุกบรรทัดที่ไม่ตรงกับ regex เช่นแทนที่ "emacs" ด้วย "vim" ยกเว้นในบรรทัดที่มีคำว่า "sucks":

:g!/sucks/ s/emacs/vim/

ลูกเล่นที่ยอดเยี่ยมพร้อมคำสั่งระดับโลก! ฉันไม่เคยคิดที่จะใช้มันอย่างนั้น
Xavier T.

Eclipse รองรับการค้นหาไฟล์ regex ไม่ว่าจะเป็นไฟล์แต่ละโครงการหรือข้ามโครงการในพื้นที่ทำงานเดียวกัน การแทนที่ Regex ยังได้รับการสนับสนุนในระดับหนึ่ง แต่ฉันเชื่อว่ากลุ่มมีความสามารถ regex ที่มีประสิทธิภาพมากขึ้น
Thomas Owens

16

ฉันพบว่าความสามารถในการลบทุกสิ่งทุกอย่างระหว่างชุดสัญลักษณ์ที่จับคู่มีประโยชน์อย่างเหลือเชื่อ ตัวอย่างเช่นค่อนข้างบ่อยฉันจะพบว่าตัวเองต้องการแทนที่สตริงในรหัส ดังนั้นdi"ในขณะที่เคอร์เซอร์อยู่ในบล็อกจะลบสตริงในขณะที่การรักษา""เหมือนเดิมและวางเคอร์เซอร์ในระหว่างตัวละครทั้งสองอ้าง da"ทำสิ่งเดียวกัน แต่ลบอักขระเครื่องหมายคำพูดด้วย


12
ดียิ่งขึ้นci"ลบและวางเคอร์เซอร์ในโหมดแทรกเพื่อให้คุณสามารถเริ่มเขียนได้ทันที
Konrad Rudolph

9

'การเติมคำหลักในโหมดแทรกเสร็จสมบูรณ์' Ctrl-P และ Ctrl-N ในโหมดแทรกเพื่อค้นหาข้อความเพื่อลองและเติมชื่อตัวแปรที่คุณกำลังพิมพ์ ฉันไม่เคยเห็นสิ่งนี้ใน IDE อื่น ๆ และฉันคิดถึงมันมาก การเติมโค้ดใน IDE นั้นไม่เหมือนกัน


2
นอกจากนี้คุณยังมีการกรอกโค้ดให้ถูกต้องหากคุณต้องการโดยใช้คำว่า omni-complete ^X^Oomni เสร็จสมบูรณ์ในโหมดแทรกหากคุณเปิดใช้งาน แต่คุณพูดถูกฉันพบว่าตัวเองใช้การใช้คำหลักให้สำเร็จมากกว่าคำว่าสมบูรณ์
Chinmay Kanchi

@Chinmay: ฉันคิดว่าคุณมีความหมายของ "เหมาะสม" ไปข้างหลัง การเติมโค้ดที่ถูกต้องจะทำให้ทุกอย่างสมบูรณ์โดยใช้หลักการของท้องที่แม้ว่าคุณจะเขียนข้อความแทนรหัสก็ตาม
ninjalj

SlickEdit มีคุณสมบัติที่คล้ายกัน และมันก็เป็นเหมือน IDE
user281377

8
ฉันไม่เห็นด้วยอย่างสมบูรณ์ IDEs สมัยใหม่ (Visual Studio, Eclipse, ... ) มีชนิดของการจบรหัสที่คู่แข่ง (และในความเป็นจริงเกินกว่า!) Ctrl-N ได้อย่างง่ายดาย หากคุณไม่ได้เห็นสิ่งนี้ใน IDE ให้ดูที่เวอร์ชันปัจจุบันอีกครั้ง และ Omni-Complete น่าเสียดายที่ทำงานไม่ถูกต้อง
Konrad Rudolph

8

คุณสมบัติอื่นที่ฉันพบว่ามีประโยชน์อย่างไม่น่าเชื่อคือความสามารถในการเปลี่ยนการเยื้อง :15,30>>เยื้องทุกบรรทัดจาก 15-30 (รวม) สองครั้งในขณะที่:15,30<<การเยื้องบรรทัดเดียวกันสองครั้ง


ในขณะที่ฉันรักคุณลักษณะนี้ IDE ทุกตัวมีการบล็อกการเยื้อง (และเป็นการอุทิศ)
Sean McMillan

ฉันคิดว่า=จะเป็นเช่นเดียวกับถ้าไม่มากที่มีประโยชน์กว่าและ<< >>
greyfade

6

คำสั่ง dd (ลบบรรทัดปัจจุบัน) ฉันใช้อันนี้มาก

นอกจากนี้ความสามารถในการพิมพ์บางอย่างเช่น 3dd และลบ 3 บรรทัดถัดไปนั้นยอดเยี่ยม ฉันไม่เคยเห็นสิ่งนี้ในเครื่องมือแก้ไขอื่น = D


Netbeans เกือบจะมีสิ่งนี้ ^ X ที่ไม่มีตัวเลือกใดจะตัดบรรทัดปัจจุบัน
Alan Pearce

@Alan: ไม่ NetBeans มี jVi :)
ดร. Hannibal Lecter

^ K ลบบรรทัดและ ^ u3 ^ k จะลบ 3 บรรทัดใน emacs shift-delete ทำแบบเดียวกันใน visual studio
Raoul

Alan: dd ยังตัดบรรทัดปัจจุบันในแง่ที่ว่าสามารถแทรกด้วย p ในภายหลัง
user281377

3
@Roul, เรารู้ว่ามีชุด emacs ของการรวมกัน 3 ปุ่มเพื่อทำซ้ำคำสั่ง vim - ยังคง, 3dd เป็นบทกวี
cbrandolino

6

cคำสั่ง ตัวอย่างเช่นหากci"ต้องการเปลี่ยนเครื่องหมายคำพูด cwเพื่อเปลี่ยนคำ เทคนิคที่มีประโยชน์มากมายกับมัน


5

.คำสั่ง มันซ้ำคำสั่งสุดท้าย


+1 ถึงสิ่งนี้และฟังก์ชันการทำงานอื่น ๆ ที่เกี่ยวข้องกับแมโครทั้งหมด
P Shved

3

Esc ! }จะเลื่อนย่อหน้าปัจจุบันออกไปที่ตัวกรองบรรทัดคำสั่งเช่นfmtหรือwcหรือwhichและส่งคืนผลลัพธ์ไปยังบรรณาธิการ


3

เข้าถึงคำสั่งอย่างรวดเร็ว CTRL + Z หรือ: wqa จะทำให้ฉันมีบรรทัดคำสั่งในเวลาน้อยกว่า 1 วินาทีโดยไม่ต้องออกจากแป้นพิมพ์


1
+1 นั่นสุดท้ายคือส่วนที่สำคัญสำหรับผลประโยชน์ทั้งหมดที่ค่อนข้างมาก: โดยที่ฉันไม่ต้องละมือออกจากแป้นพิมพ์
Orbling

... :!/bin/bashหรือ ฉันใช้:!ค่อนข้างบ่อย
greyfade

ฉันมักจะใช้:sh
David Brown

3

ที่ฉันสามารถใช้hjklเพื่อเลื่อนเคอร์เซอร์โดยไม่ต้องออกจาก homerow ของแป้นพิมพ์ ฉันมีโปรแกรมส่วนใหญ่ (เช่นโปรแกรมอ่าน PDF) ซึ่งให้คุณเปลี่ยนการโยงคีย์ตั้งค่าให้ใช้ปุ่มการเคลื่อนไหว Vim สำหรับการเลื่อนและอื่น ๆ


1

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

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

สไตล์ของฉันในการจัดการข้อความตัวอย่างรวมถึงการใช้การทำซ้ำ (บรรทัด / การเลือกหลายบรรทัด) บ่อยครั้งและการย้าย (บรรทัด / การเลือกหลายบรรทัด) ขึ้นและลงซึ่งฉันได้กำหนดทางลัดด่วนมานานแล้ว ฉันคิดถึงคุณสมบัติเหล่านั้นใน IDE ส่วนใหญ่ (แม้ว่าฉันเคยได้ยิน ReSharper สำหรับ VS มีบางอย่างที่คล้ายกัน)


1

คุณทราบหรือไม่ว่ามีความเป็นvi ปลั๊กอินสำหรับคราส ? มีค่าใช้จ่าย 15 ยูโร (20ish US $) แต่มันก็เป็นเพื่อให้คุ้มค่า ไม่ต้องddอยู่กลางเอกสารอีกต่อไปและขาดสิ่งเล็ก ๆ ที่มีประโยชน์ทั้งหมด

อาจจะเป็นหัวข้อเล็กน้อย แต่ฉันคิดว่ามันคุ้มค่าที่จะชี้ให้เห็น


0

ขึ้นอยู่กับภาษาที่คุณใช้ในการเขียนโปรแกรมติดกับ IDE หรือรับ IDE ที่มีการรีแฟคเตอร์มากที่สุดที่คุณสามารถหารับ resharper สำหรับ Visual Studio หากคุณกำลังทำ c #, intellij สำหรับ java หรือ visual assist สำหรับ visual studio กำหนดค่าการรีแฟคเตอร์ได้สูงสุดใน eclipse หรือ netbeans

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


3
มันไร้สาระมาก ใช่การปรับโครงสร้างใหม่เป็นเครื่องมือสำคัญ แต่รหัสไม่ได้เขียนเอง แก้ไขข้อความที่ดีมีส่วนช่วยให้ห่างไกลมากขึ้นในการผลิตของโปรแกรมเมอร์กว่าเครื่องมือ refactoring ดี
Chinmay Kanchi

-1

เลือกคอลัมน์ตาราง

สิ่งนี้ดูเหมือนจะไม่อยู่ใน IDEs ที่ได้รับความนิยมและหากเป็นเช่นนั้นมันก็ยังคงซ่อนอยู่อย่างดี สิ่งนี้มีประโยชน์มากสำหรับการทดสอบ regex กับคอลัมน์ในไฟล์ข้อมูล CSV


-3

IDEs ส่วนใหญ่ไม่อนุญาตให้คุณแบ่งหน้าจอ ฉันชอบฟีเจอร์นั้นใน VIM


5
IDE ส่วนใหญ่ทำไม่ได้ ฉันคิดว่าจริง ๆ แล้วทำอย่างน้อยที่สุดสิ่งที่ฉันได้ใช้
Anto

คุณยกตัวอย่างได้บ้าง
projecktzero

1
ด้ามจับหน้าจอของ IDE ส่วนใหญ่แตกต่างจาก Vim / Emacs พวกเขาทำกับแท็บมักจะ สิ่งเหล่านี้ยาก / เป็นไปไม่ได้ที่จะจัดการกับแป้นพิมพ์ (เปรียบเทียบกับเปิด 50 ไฟล์ใน Emacs เทียบกับเปิด 50 ไฟล์ใน Eclipse และคุณจะเห็น Emacs ชนะอย่างรวดเร็ว)
jsternberg

IDEs ส่วนใหญ่ที่มี splitscreen ไม่มีวิธีง่าย ๆ ในการนำทาง / ปรับ a-la<C-w>
Wayne Werner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.