วิธีการเลือกข้อความที่มีความยาวแตกต่างกันในแต่ละบรรทัด


10

สมมติว่าฉันมีข้อความต่อไปนี้:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"

ฉันต้องการที่จะทำการเลือกเช่นด้านล่าง:

aaa-dd-e:"aaa",
bb-x:"bb",
c-9:"c"

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

aaa-dd-e: "aaa",:
bb-x"bb",
c-9:"c"

ส่วนที่เลือกจะหยุดที่เครื่องหมายโคลอนแรกและสร้างสี่เหลี่ยมผืนผ้า


6
สิ่งที่คุณต้องการบรรลุด้วยการเลือกนั้นอาจมีอีกวิธีหนึ่ง
Arjen Dijkstra

หากคั่นด้วยอักขระคุณอาจลองจัดเรียงบล็อกใหม่ก่อนแล้วเลือกจากนั้น ดู: จัดข้อความในตัวคั่นแรกใน VIM
kenorb

คำตอบ:


6

โดยทั่วไปการเลือกจะหมายถึงการสิ้นสุดดังนั้นใน Vim ที่การเลือกนั้นไม่จำเป็นในตอนแรก

สมมติว่าคุณยังต้องการใส่เครื่องหมายอัญประกาศล้อมรอบชื่อคุณสมบัติในไฟล์ที่ไม่ใช่ JSON ของคุณเพื่อเปลี่ยนเป็นคำสั่ง JSON ที่เหมาะสม:

  1. เลือกบรรทัดที่จะแก้ไขตัวละครที่ฉลาดหรือที่ชาญฉลาดมันไม่สำคัญ
  2. :'<,'>norm I"^[f:i"( '<,'>ถูกแทรกโดยอัตโนมัติสำหรับคุณและ^[ได้มาพร้อม<C-v><Esc>)

หากคุณมีปลั๊กอินเซอร์ราวด์ที่สวยงามขั้นตอนที่ 2 จะกลายเป็น:

:'<,'>norm ^vt:S"

ด้วยการทดแทนขั้นตอนที่ 2 อาจกลายเป็น:

:'<,'>s/^\s*\([^:]*\):/"\1"

พวกคุณถูกต้องแล้วฉันพบว่าการเลือกภาพอาจไม่จำเป็น ด้วยความช่วยเหลือหรือ:g/regex/normฉันสามารถบรรลุสิ่งที่ฉันต้องการ
Aaron Shen

มีวิธีใดบ้างที่ฉันสามารถใส่ทั้งบล็อกที่เลือกไว้ในคลิปบอร์ดของระบบและวางในไฟล์อื่นได้?
Aaron Shen

แน่นอน. สมมติว่า Vim ของคุณรวบรวมด้วยการสนับสนุนคลิปบอร์ดที่คุณสามารถทำได้"+yหรือ"*yขึ้นอยู่กับคลิปบอร์ดที่คุณต้องการกำหนดเป้าหมาย มีคำถามที่เกี่ยวข้องมากมายที่นี่
romainl

14

กลุ่มสนับสนุนเฉพาะการเลือก blockwise $สี่เหลี่ยมมีข้อยกเว้นของเส้นขอบด้านขวาขรุขระเมื่อคุณกด

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


ถ้าฉันต้องการตัดบรรทัดเหล่านั้นและวางลงในบัฟเฟอร์อื่น
Aaron Shen

1

เพียงแค่โยนหมวกอีกอันลงในวงแหวนหากคุณต้องการใช้การเลือกที่มองเห็นจริงๆคุณสามารถใช้ปลั๊กอินTabularเพื่อจัดแนวโคลอนจากนั้นทำการเลือกภาพของคุณ

หากคุณนำข้อความต้นฉบับของคุณ:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"

:Tab /:\zs จะจัดเรียงทุกอย่างหลังโคลอนดังต่อไปนี้

aaa-dd-e:  "aaa",
bb-x:      "bb",
c-9:       "c"

จากนั้นคุณสามารถเลือกบล็อกภาพของคุณ

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


1

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


แต่วิธีนี้มันจะเป็นบล็อกสี่เหลี่ยมใช่ไหม ขณะที่ฉันอ่านนี่ไม่ใช่สิ่งที่ OP ต้องการ (พวกเขาพูดถึงว่าพวกเขาลองใช้โหมดบล็อกภาพ)
Martin Tournoij

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