Vim: วิธีที่รวดเร็วกว่าในการเลือกบล็อคข้อความในโหมดภาพ


190

ฉันใช้ vim มานานพอสมควรและตระหนักดีว่าการเลือกบล็อกข้อความในโหมดภาพนั้นทำได้ง่ายเพียงแค่SHIFT+ Vและการย้ายปุ่มลูกศรขึ้นหรือลงทีละบรรทัดจนกระทั่งฉันไปถึงจุดสิ้นสุดของบล็อกข้อความที่ฉัน ต้องการเลือก

คำถามของฉันคือ - มีวิธีที่เร็วกว่าในโหมดภาพเพื่อเลือกบล็อกข้อความเช่นSHIFT+ Vตามด้วยการระบุหมายเลขบรรทัดที่ฉันต้องการให้การเลือกหยุดหรือไม่ ( :35ตัวอย่างเช่นโดยที่ 35 คือหมายเลขบรรทัดที่ฉันต้องการเลือก - นี่เห็นได้ชัดว่าใช้งานไม่ได้ดังนั้นคำถามของฉันคือการค้นหาว่ามีอะไรที่คล้ายกับสิ่งนี้สามารถทำได้ ... )


3
+1 คำถามที่ดีเพราะฉันพบว่าตัวเองกำลังทำสิ่งนี้บ่อยครั้ง ผมสงสัยว่าถ้าบางทีนี่อาจเป็นสถานที่ที่ไม่ได้เริ่มใช้ใช้v%หรือv/patternหรือสิ่งอื่นใด
user786653

9
วีไอพีเลือกย่อหน้าด้านในเลือกประโยคภายใน
SergioAraujo

27
V35Gจะมองเห็นเลือกจากบรรทัดปัจจุบันไปยังบรรทัด 35 V10jหรือV10kจะเลือกให้มองเห็น 10 บรรทัดถัดไปหรือก่อนหน้า
เตฟาน

1
@ สเตฟานนั่นเป็นเพียงสิ่งที่ฉันกำลังมองหา ขอบคุณ !!
shriek

nnoremap <Space> Vสำหรับสายการเลือกผมใช้ทางลัด: เมื่ออยู่ในโหมด visual line เพียงคลิกขวาด้วยเมาส์เพื่อกำหนดการเลือก (อย่างน้อยก็ใน linux มันก็เป็นเช่นนั้น) อย่างไรก็ตามมีประสิทธิภาพมากกว่าคีย์บอร์ดเท่านั้น
Mikhail V

คำตอบ:


212

นอกจากสิ่งที่คนอื่นพูดคุณยังสามารถขยายการเลือกของคุณโดยใช้การค้นหารูปแบบ

ตัวอย่างเช่นv/fooจะเลือกจากตำแหน่งปัจจุบันของคุณเป็นอินสแตนซ์ถัดไปของ "foo" หากคุณต้องการขยายไปยังอินสแตนซ์ถัดไปของ "foo" บนบรรทัดที่ 35 ตัวอย่างเพียงกดnเพื่อขยายการเลือกไปยังอินสแตนซ์ถัดไปและอื่น ๆ

ปรับปรุง

ฉันไม่ได้ทำบ่อย แต่ฉันรู้ว่าบางคนใช้เครื่องหมายอย่างกว้างขวางเพื่อเลือกภาพ ตัวอย่างเช่นถ้าฉันอยู่บนบรรทัดที่ 5 และฉันต้องการเลือกไปที่บรรทัดที่ 35 ฉันอาจกดmaเพื่อทำเครื่องหมายaที่บรรทัดที่ 5 จากนั้น:35ย้ายไปที่บรรทัดที่ 35 Shift+ vเพื่อเข้าสู่โหมดภาพ linewise และในที่สุดก็`aเลือกกลับไปทำเครื่องหมายa.


21
หากคุณต้องการรวมรูปแบบที่คุณสามารถv/foo/eใช้ได้ eย่อมาจาก "จบ" ของรูปแบบการจับคู่
Peter Rincker

6
และคุณสามารถแก้ไขจากบรรทัดนั้นด้วยออฟเซ็ต: V / foo / + 5 หรือ V / foo / -5 (ฉันใช้โหมดภาพ linewise เหมือนผู้แต่ง)
bheeshmar

คุณจะทำอย่างไรถ้าคุณต้องการเลือกช่วงของข้อความที่ตรงกับการค้นหาของคุณ เช่น: ค้นหาและเลือก (ทั้งคำ) คำค้นหาของคุณ?
Daniel Park

5
@DanielPark v i wในการเลือกคำว่าปัจจุบันการใช้งาน หากคุณต้องการที่จะเลือกในปัจจุบันที่อยู่ติดกันไม่ใช่ช่องว่างการใช้งาน+v i Shift wความแตกต่างก็คือเมื่อเครื่องหมายรูปหมวกอยู่ที่นี่MyCla|ss.Methodคำสั่งผสมแรกจะเลือกMyClassและที่สองจะเลือกทุกสิ่ง
Jay

1
ขอบคุณ พบว่าการใช้ยังv i w sช่วยให้คุณสามารถดำเนินการ "แทนที่" ได้อย่างมีประสิทธิภาพ
Daniel Park

113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G บรรลุสิ่งที่คุณต้องการ


89

เสียงเรียกเข้าเป็นภาษา เพื่อให้เข้าใจ Vim จริง ๆ คุณต้องรู้ภาษา คำสั่งหลายคำกริยาและกลุ่มยังมีวัตถุและคำบุพบท

V100G
V100gg

ซึ่งหมายความว่า "เลือกบรรทัดปัจจุบันจนถึงและรวมบรรทัด 100"

วัตถุข้อความเป็นที่ที่มีพลังมาก พวกเขาแนะนำวัตถุมากขึ้นด้วยคำบุพบท

Vap

ซึ่งหมายความว่า "เลือกรอบย่อหน้าปัจจุบัน" ซึ่งเป็นการเลือกย่อหน้าปัจจุบันและบรรทัดว่างที่ตามมา

V2ap

ซึ่งหมายความว่า "เลือกรอบย่อหน้าปัจจุบันและย่อหน้าถัดไป"

}V-2ap

ซึ่งหมายความว่า "ไปที่จุดสิ้นสุดของย่อหน้าปัจจุบันแล้วเลือกและย่อหน้าก่อนหน้า"

การเข้าใจ Vim เป็นภาษาจะช่วยให้คุณได้รับไมล์สะสมที่ดีที่สุด

หลังจากที่คุณเลือกลงแล้วคุณสามารถรวมกับคำสั่งอื่น ๆ :

Vapd

ด้วยคำสั่งด้านบนคุณสามารถเลือกย่อหน้าและลบออกได้ เปลี่ยนda เป็น a yเพื่อคัดลอกหรือ a cเพื่อเปลี่ยนหรือเป็น a pเพื่อวาง

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


} V-2ap การใช้ -2 นั้นฉลาดจริงๆ
Ambareesh

40

v35G จะเลือกทุกอย่างตั้งแต่เคอร์เซอร์จนถึงบรรทัด 35

vทำให้คุณอยู่ในโหมดเลือก35ระบุหมายเลขบรรทัดที่คุณต้องการGไป

คุณสามารถใช้v}ซึ่งจะเลือกทุกอย่างจนถึงจุดเริ่มต้นของย่อหน้าถัดไป


16

สำหรับการเลือกจำนวนบรรทัด:

shift + v 9j - เลือก 10 บรรทัด


2
สำหรับช่วงขนาดเล็กสิ่งนี้ดีโดยเฉพาะเมื่อจับคู่กับ:set rnu
Peter Rincker

9

Shift+V n j หรือ Shift+V n k

เลือกนี้สายปัจจุบันและต่อไป / ก่อนหน้าnเส้น ฉันคิดว่ามันมีประโยชน์มาก


นี่เป็นวิธีง่ายๆที่ฉันกำลังมองหา ขอบคุณ
Arsal


6

v%

จะเลือกทั้งบล็อก

เล่นกับ:

v}, vp, vsฯลฯ

ดูความช่วยเหลือ:

:help text-objects

ซึ่งแสดงวิธีต่าง ๆ ในการเลือกตัวอักษรคำประโยคย่อหน้าบล็อกและอื่น ๆ



4

คุณสามารถกดvi}เพื่อเลือกบล็อกที่ล้อมรอบด้วย{}เครื่องหมายวงเล็บที่ซึ่งเคอร์เซอร์ของคุณอยู่ในขณะนี้

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


3

คุณสามารถใช้หมายเลขก่อนหน้าเพื่อดำเนินการซ้ำได้เสมอ:

  • ในโหมดภาพให้พิมพ์35และเคอร์เซอร์จะเลื่อนลง 35 ครั้งเลือก 35 บรรทัดถัดไป
  • ในโหมดปกติ:
    • ลบ 35 บรรทัด 35dd
    • วาง 35 ครั้ง 35p
    • เลิกทำการเปลี่ยนแปลง 35 รายการ 35u
    • เป็นต้น

3

ง่ายเพียงแค่กด Shift v line number gg

ตัวอย่าง: บรรทัดปัจจุบันของคุณถึงบรรทัดที่ 41 เพียงกด Shift v 41 gg


1

} หมายถึงเลื่อนเคอร์เซอร์ไปที่ย่อหน้าถัดไป ใช้v}เพื่อเลือกทั้งย่อหน้า


0

สำหรับการเลือกทั้งหมดในภาพ: พิมพ์ Esc เพื่อให้แน่ใจว่าเล็กน้อยอยู่ในโหมดปกติ

:0 

พิมพ์ ENTER เพื่อไปที่จุดเริ่มต้นของไฟล์

vG

คุณสามารถใช้ggในโหมดปกติเพื่อไปยังบรรทัดแรกได้เช่นกัน
huangzonghao

0

มันอาจมีประโยชน์ในการรู้:

เพื่อที่จะเลือกจำนวนบรรทัดที่เท่ากันเช่นการใช้งาน1v คุณควรทำการดัดแปลงบางอย่างเพื่อให้สามารถใช้งานได้1v, บล็อกหรือ linewise

วันนี้ฉันเห็นเคล็ดลับที่น่าทึ่งนี้จากที่นี่ :

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

คุณยังสามารถรีเซ็ตขอบเขตของบล็อกแบบเห็นภาพได้เช่นกัน:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point

0

ฉันใช้สิ่งนี้ด้วยการพับในโหมดการเยื้อง:

v เปิดโหมดภาพได้ทุกที่ในบล็อก

zaza toogle มันสองครั้ง

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