เป็นกลุ่ม: วิธีการวางบล็อกข้อความที่ส่วนท้ายของหลายบรรทัด?


32

ว่าฉันมีบล็อกข้อความเช่นนี้:

// ความคิดเห็น 1
// Comment2
// ความคิดเห็น 3

และฉันต้องการผนวกแต่ละบรรทัดเหล่านี้ต่อท้ายบรรทัดที่สอดคล้องกัน 3 บรรทัด:

foo = 1;
บาร์ = 2;
baz = 3;

ดังนั้นผลลัพธ์ที่ได้คือ

foo = 1; // ความคิดเห็น 1
บาร์ = 2; // Comment2
baz = 3; // ความคิดเห็น 3

มีวิธีง่ายๆใน Vim ไหม?


@ เร็ว ๆ นี้น่าเสียดายที่ไม่มี บางครั้งความคิดเห็นเช่นคุณปรากฏในคำถามที่เป็นกลุ่ม แต่ตรวจสอบนี้: meta.stackexchange.com/q/25925/160504
sidyll

ชุมชนที่ดีกว่าสำหรับคำถามนี้คือvi.stackexchange.com
thinwybk

คำตอบ:


36

ใช้โหมดบล็อกภาพ ( Ctrl+ v) เพื่อเลือกหนึ่งชุดของเส้นแล้วทั้งyหรือdพวกเขา

จากนั้นหากคุณเลือก foo, bar, baz lines ใช้โหมด visual block อีกครั้งเพื่อเลือกคอลัมน์แรกของบรรทัดข้อคิดเห็นและจากนั้นShift+ pพวกเขาเข้าที่ (หรือถ้าคุณเลือกบรรทัดข้อคิดเห็นให้เลือกคอลัมน์สุดท้ายของ foo bar baz เส้นและpพวกเขาเข้าไปในสถานที่

การได้รับการวางตำแหน่งอาจเป็นการฝึกฝนเล็กน้อย แต่เมื่อคุณมีความสามารถพิเศษคุณจะบินได้ เมื่อคุณมีบล็อกที่เลือกคุณยังสามารถใช้Shift+ Aเพื่อผนวกเช่นช่องว่างในบล็อก (เมื่อต่อท้ายข้อความใหม่จะปรากฏเฉพาะในบรรทัดบนสุด แต่เมื่อคุณกด Esc มันจะปรากฏอย่างน่าอัศจรรย์ในทุกบรรทัดที่เลือก) . ในทำนองเดียวกันShift+ iจะทำเช่นเดียวกันที่จุดเริ่มต้นของบล็อกที่เลือกในแต่ละบรรทัด

คุณจะต้องล้างข้อมูลบรรทัดว่างในภายหลัง

นอกจากนี้ยังมีตอน vimcasts ที่ยอดเยี่ยมแสดงเทคนิคเหล่านี้ในรายละเอียดเพิ่มเติม


1
ฉันพบโซลูชันนี้ควบคู่:set ve=allไปกับการใช้งานได้หลากหลายมาก ฉันใช้ปลั๊กอิน UnconditionalPaste เป็นการส่วนตัว ( vim.org/scripts/script.php?script_id=3355 ) ตามที่เหมาะกับความต้องการของฉันดีขึ้นเล็กน้อย
Peter Rincker

1

ถ้ามันง่ายหรือไม่คุณก็บอกฉัน นำทางไปยัง// Comment 1กดddเพื่อลบ นำทางไปยังบรรทัดที่มีfoo = 1;และกดpเพื่อวางด้านล่างบรรทัด เลื่อนขึ้นไปfooอีกครั้งและกดJเพื่อเข้าร่วมแถว ธาดา


0

ต่อไปนี้จะทำสิ่งที่คุณอธิบาย:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

ขึ้นอยู่กับสิ่งที่คุณจำเป็นต้องทำจริง (ตรงข้ามกับตัวอย่าง) ในทางปฏิบัติมันอาจจะตรงไปตรงมามากขึ้นในการเลือกบล็อก "// Comment1" และอื่น ๆ block ( Ctrlv), yank ( y), ไปที่ส่วนท้ายของรหัส บล็อกและวาง

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