การลบเป็นกลุ่มและวางโดยไม่มีบรรทัดใหม่


11

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

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

เมื่อฉันทำกับรหัสข้างต้นฉันได้รับ:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

ซึ่งอยู่ไกลจากผลลัพธ์ที่ฉันต้องการ ... ฉันจะระงับพฤติกรรมการขึ้นบรรทัดใหม่นี้ได้อย่างไรหรือใช้วิธีอื่นที่มีประสิทธิภาพมากขึ้นได้อย่างไร ฉันไม่คิดว่า d $ จะดีเพราะฉันไม่เพียง แต่ต้องไปที่จุดเริ่มต้นของบรรทัด แต่ถ้าฉันต้องการลบบรรทัดว่างด้วยฉันต้องลบมันในทะเบียนอื่นฉันรู้สึกว่าควรจะมีวิธีที่ง่ายกว่า! ขอบคุณ



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

โอ้ฉันเห็นสิ่งที่คุณหมายถึงตอนนี้ มันไม่ชัดเจนสำหรับฉันในสิ่งที่คุณพยายามทำให้สำเร็จ
EvergreenTree

1
0Dลบบรรทัดยกเว้นตัวแบ่งบรรทัด และกว่าที่gJจะเข้าร่วมสาย ตอนนี้คุณสามารถใส่ข้อความโดยไม่ต้องขึ้นบรรทัดใหม่และไม่มีบรรทัดว่าง
Alex Kroll

คำตอบ:


9

คุณสามารถไปที่ใดก็ได้ในบรรทัดด้านบนบรรทัดที่คุณต้องการลบจากนั้นกดJDและวางpที่จุดที่ต้องการ

  • Jเข้าร่วมสองบรรทัดและย้ายคุณเมื่อเริ่มต้นข้อความที่คุณต้องการลบ สิ่งนี้จะลบอักขระบรรทัดใหม่และการเยื้องของบรรทัดที่คุณต้องการย้าย
  • D ลบออกจากตำแหน่งเคอร์เซอร์ปัจจุบันไปยังจุดสิ้นสุดของบรรทัด แต่เก็บรักษาอักขระบรรทัดใหม่

คำแนะนำ:คุณสามารถใช้:puถ้าคุณลบด้วยDหรือดึงy$และคุณต้องการวางด้วยบรรทัดใหม่


3

ไม่ง่ายกว่า แต่มีประสิทธิภาพมากกว่าเล็กน้อยและคุณยังสามารถสร้างแผนที่โหมดปกติสำหรับทั้งสองลำดับได้:

  • yanking: ไปที่บรรทัดที่คุณต้องการย้ายจากนั้น ^D"_dd
  • การวาง: ไปที่คำที่คุณต้องการแทนที่จากนั้น viwp

2

imapคุณสามารถบรรลุสิ่งที่ทำงานค่อนข้างดีกับ เพิ่มสิ่งต่อไปนี้ในของคุณvimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

สิ่งนี้จะสร้างการแมปสำหรับการCTRL-aที่จะวางข้อความที่ถูกลบล่าสุด (กับddหรือคล้ายกัน) หากคุณต้องการแน่นอนคุณอาจใช้รหัสอื่นสำหรับการทำแผนที่

อ้างอิง:

:h i_CTRL-R
:h quote1
:h J

1

สิ่งนี้เกิดขึ้นสำหรับฉันเช่นกันไม่เคยคิดที่จะปรับให้เหมาะสมก่อน แต่การทำแผนที่นี้ใช้งานได้:

nmap dil ^d$

dilคือ "ลบในสาย" คล้ายกับdiw, di"ฯลฯ


1

วางโดยไม่มีบรรทัดใหม่

วางสิ่งนี้ลงในไฟล์. vimrc ของคุณ:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

ตัวอย่าง:

<span style="color:">danger</span>

ตอนนี้คุณสามารถพิมพ์gpเพื่อแทรก#D51B3Fหลังจากcolor:ขณะที่เคอร์เซอร์อยู่ที่:โหมดปกติ

งัดโดยไม่ขึ้นบรรทัดใหม่

ใช้คำตอบของ flukus:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

เป็นตัวย่อของสายด้านลบ นอกจากนี้ยังกำจัดเยื้องชั้นนำ


0

คุณสามารถเลือกข้อความที่คุณต้องการคัดลอกโดยการกดvแล้วจะเอามันลงในบัฟเฟอร์โดยการกดแล้ววางไว้ที่ใดก็ได้โดยy pมันไม่แทรกบรรทัดใหม่ใด ๆ


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