ลบ newline เป็นกลุ่ม


271

มีวิธีลบบรรทัดใหม่ที่ท้ายบรรทัดใน Vim หรือไม่ดังนั้นบรรทัดถัดไปจะถูกต่อท้ายบรรทัดปัจจุบันหรือไม่

ตัวอย่างเช่น:

Evaluator<T>():
    _bestPos(){
}

ฉันต้องการที่จะนำทั้งหมดนี้ในบรรทัดเดียวโดยไม่ต้องคัดลอกเส้นและวางลงในบรรทัดก่อนหน้า ดูเหมือนว่าฉันควรจะสามารถวางเคอร์เซอร์ของฉันที่ส่วนท้ายของแต่ละบรรทัดกดปุ่มและมีบรรทัดถัดไปกระโดดขึ้นไปบนเดียวกับที่เคอร์เซอร์อยู่

ผลลัพธ์สุดท้าย:

Evaluator<T>(): _bestPos(){ }

เป็นไปได้ในกลุ่ม?


ลบที่ท้ายบรรทัดในโหมดแทรกของกลุ่มที่ใช้สำหรับฉัน ไม่ได้อยู่ในทุกสถานี
Victor Sergienko

คำตอบ:


584

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


29
ตามที่ระบุไว้ในคำตอบอื่นจะหลีกเลี่ยงการเพิ่มช่องว่างซึ่งเป็นกลุ่มอาจเลือกที่จะเพิ่มเมื่อใช้gJ J
Michael Mior

5
นอกจากนี้คุณยังสามารถเลือกทุกบรรทัดที่คุณต้องการเข้าร่วมโดยใช้V(Visual Line Mode) จากนั้นกดJหรือgJ
Sbu

หากคุณต้องการคงตำแหน่งเคอร์เซอร์ไว้:joinและ:join!จะใช้การเข้าร่วมบรรทัดเพื่อรักษาตำแหน่งเคอร์เซอร์และจะไม่เก็บที่ว่างใด ๆ ไว้ที่จุดเชื่อมต่อ คุณยังสามารถ map มันชอบและnnoremap <Leader>j :joing<cr> nnoremap <Leader>gj :join!<cr>
SergioAraujo

82

อย่างแน่นอน Vim รู้จักอักขระ \ n เป็นบรรทัดใหม่ดังนั้นคุณสามารถค้นหาและแทนที่ได้ ในประเภทโหมดคำสั่ง:

:%s/\n/

1
ขอบคุณ แต่ฉันไม่ต้องการการค้นหาทั่วโลกและแทนที่
derekerdmann

16
การลบ% จะดูแลมัน จากนั้นจะเกิดขึ้นบนบรรทัดที่เคอร์เซอร์เปิดอยู่เท่านั้น หรือคุณสามารถระบุช่วงเช่น: 11,15s / \ n / (บรรทัด 11-15) หรือ:, + 7s / \ n / (บรรทัดนี้และอีกเจ็ด) หรือ: -3, s / \ n / (ก่อนหน้านี้สามบรรทัดและอันนี้) ... คุณจะได้รับความคิด
อุโมงค์

1
หรือคุณสามารถเลือกVบล็อกภาพและแทนที่มัน
Victor Sergienko

51

ในขณะที่อยู่บนเส้นบนในโหมดปกติตี+Shiftj

คุณสามารถนับจำนวน3Jล่วงหน้าได้เช่นกันดังนั้นในบรรทัดบนสุดจะรวมสายทั้งหมดเข้าด้วยกัน


34

ตามคำตอบอื่น ๆ ที่กล่าวถึง (ตัวพิมพ์ใหญ่) Jและการค้นหา + การแทนที่สำหรับ\nสามารถใช้โดยทั่วไปในการตัดอักขระบรรทัดใหม่และเชื่อมโยงบรรทัด

แต่เพื่อกำจัดอักขระขึ้นบรรทัดใหม่ในบรรทัดสุดท้ายคุณต้องทำสิ่งนี้ใน Vim:

:set noendofline binary
:w

1
คำถามเกี่ยวกับการต่อสองบรรทัดตรงกลางไฟล์คำตอบนี้จะลบบรรทัดใหม่ที่ท้ายไฟล์ซึ่งไม่ใช่สิ่งที่ฉันถาม
derekerdmann

3
สิ่งนี้ใช้ได้สำหรับฉัน ฉันพยายามกำจัดบรรทัดใหม่ที่ท้ายไฟล์บรรทัดเดียวด้วยเสียงเรียกเข้า
Locane

ทำไมถึง:set noendoflineใช้งานไม่ได้binary?
darw

32

Jลบระยะห่างชั้นนำพิเศษ (ถ้ามี) เข้าร่วมบรรทัดด้วยช่องว่างเดียว (มีข้อยกเว้นบางประการ: หลังจาก/[.!?]$/นั้นอาจแทรกช่องว่างสองช่องก่อนหน้า/^\s*)/นี้จะไม่มีการแทรกช่องว่าง)

หากคุณไม่ต้องการพฤติกรรมนั้นให้gJลบ newline ออกและไม่ต้องทำอะไรที่ชาญฉลาดด้วยการเว้นวรรคเลย


10

ทั้งหมดต่อไปนี้สมมติว่าเคอร์เซอร์ของคุณอยู่ในบรรทัดแรก:

ใช้การจับคู่ปกติ:

3Shift+J

ใช้คำสั่ง Ex:

:,+2j

ซึ่งเป็นตัวย่อของ

:.,.+2 join

ซึ่งสามารถป้อนได้โดยทางลัดต่อไปนี้:

3:j

คำสั่ง Ex ที่สั้นกว่า:

:j3

2
โดยไม่มีช่องว่างระหว่างพวกเขา:j!3
SergioAraujo

10
set backspace=indent,eol,start

ใน. vimrc ของคุณจะอนุญาตให้คุณใช้backspaceและdeleteเปิด\n(ขึ้นบรรทัดใหม่) ในโหมดแทรก

set whichwrap+=<,>,h,l,[,]

จะอนุญาตให้คุณลบ LF ก่อนหน้าในโหมดปกติด้วยX(เมื่ออยู่ใน col 1)


2

อาจขึ้นอยู่กับการตั้งค่าของคุณ แต่ฉันมักจะทำเช่นนี้ด้วย A<delete>

Aต่อท้ายอยู่ตรงไหนของบรรทัด มันอาจจะต้องnocompatibleโหมด :)


3
"ฉันมักจะทำสิ่งนี้กับ <delete>"ใช่นั่นคือเหตุผลที่ฉันมาที่นี่ เพื่อหาวิธีที่ดีกว่า;) จุดทั้งหมดของเสียงเรียกเข้าไม่ได้ขยับมือของคุณออกจากแถวบ้าน
Luc

2
<CURSOR>Evaluator<T>():
    _bestPos(){
}

เคอร์เซอร์ในบรรทัดแรก

ตอนนี้ในโหมดปกติทำ

shift+v
2j
shift+j

หรือ

V2jJ

: V2jJ ปกติ


1

ฉันจะกด A (ต่อท้ายบรรทัดทำให้คุณเข้าสู่โหมดแทรก) บนบรรทัดที่คุณต้องการลบบรรทัดใหม่แล้วกดลบ


น่าเศร้าที่ดูเหมือนจะไม่ได้ผลสำหรับฉัน อาจเป็นการตั้งค่า PuTTY ที่ฉันพลาดไป
derekerdmann

2
อาจจะเป็นตัวเลือก Backspace ของ vi::help 'backspace'
glenn jackman

1

ถ้าคุณไม่รังเกียจการใช้เครื่องมือเชลล์อื่น ๆ

tr -d "\n" < file >t && mv -f t file

sed -i.bak -e :a -e 'N;s/\n//;ba' file

awk '{printf "%s",$0 }' file >t && mv -f t file

7
คุณคิดอย่างนั้นเหรอ?
derekerdmann

ไม่มันไม่ใช่. ทำไมคุณถึงคิดว่า overkill? ทำภายใน Vim เป็นคู่มือ ขึ้นอยู่กับว่าคุณต้องการทำด้วยมือด้วยตนเองทุกครั้งหรือเพียงแค่ใช้งาน liners เหล่านี้เพื่อทำให้เสร็จในระยะเวลาอันสั้น Vim เป็นเครื่องมือแก้ไข และเครื่องมือใด ๆ ที่สามารถประมวลผลไฟล์นั้นเป็น "เครื่องมือแก้ไข" ปลอมแปลง
ghostdog74

5
ggVGJยังคงง่ายขึ้นเพียงแค่เปิดแฟ้มในกลุ่มและการใช้งาน
php มากเกินไป

แน่นอนว่าถ้าคุณพบว่าทำด้วยมือได้ง่ายขึ้นทุกครั้งที่คุณต้องการข้อมูลจะเปลี่ยนไป ไปข้างหน้า นอกจากนี้ให้ลองทำด้วยไฟล์ขนาดใหญ่
ghostdog74

ฉันไม่ได้ประมวลผลไฟล์จำนวนมาก ฉันแค่ทำงานกับการย่อโค้ดสองสามบรรทัด
derekerdmann

1

ปัญหาคือการคูณถ่าน 0A (\ n) ที่มองไม่เห็นอาจสะสม Supose คุณต้องการล้างข้อมูลจากบรรทัด 100 ไปยังจุดสิ้นสุด:

พิมพ์ดีด ESC และ: (ผู้บังคับบัญชาเทอร์มินัล)

:110,$s/^\n//

ในสคริปต์เป็นกลุ่ม:

execute '110,$s/^\n//'

คำอธิบาย: จาก 110 จนถึงสิ้นสุดค้นหาบรรทัดที่ขึ้นต้นด้วยบรรทัดใหม่ (ว่าง) และลบออก

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