วิธีลบสองสาม n ตัวแรกของทุกบรรทัด?


15

ฉันเพิ่งถาม:

จะเพิ่มคำนำหน้าให้กับทุกบรรทัดได้อย่างไร

ดังนั้นไปจากรหัสด้านล่าง:

I said Hello
I said There
I said I am some code

ไปที่รหัสเช่น:

Hello
There
I am some code

ตอนนี้ฉันจะลบจำนวนอักขระจากบรรทัดได้อย่างไร


IMHO เหมือนกับคำถามก่อนหน้าของคุณ
A_P

คำตอบ:


28

มันง่ายยิ่งขึ้น! อีกครั้งใช้คำสั่งสี่เหลี่ยมผืนผ้า ย้ายไปที่มุมหนึ่งของสี่เหลี่ยมที่คุณต้องการลบกดC-SPCเพื่อตั้งเครื่องหมาย ย้ายไปที่มุมอื่นของสี่เหลี่ยมแล้วกดC-x r d( delete-rectangle) ตัวอย่างเช่นย้ายไปที่บรรทัดแรกที่คุณต้องการดำเนินการกดC-aหรือhomeเพื่อไปที่จุดเริ่มต้นของบรรทัดเลื่อนลงไปที่บรรทัดสุดท้ายที่คุณต้องการที่จะดำเนินการเพื่อย้ายไปที่มุมขวาล่างแล้วลบC-u number C-fC-x r d

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

คุณสามารถใช้C-x r kเพื่อฆ่าสี่เหลี่ยมซึ่งช่วยให้คุณงัด ( C-x r y) ในภายหลัง (เลื่อนไปที่มุมซ้ายบนของสถานที่ที่คุณต้องการแทรก)

นอกจากนี้คุณยังสามารถใช้C-x r t( string-rectangle) และป้อนสตริงว่าง

คำสั่ง Rectangle ขึ้นอยู่กับตำแหน่งของคอลัมน์ หากคุณต้องการลบอักขระ n ตัวแทนที่จะเป็นคอลัมน์ n (ซึ่งสร้างความแตกต่างด้วยอักขระหลายคอลัมน์เช่นแท็บ) คุณสามารถใช้การแทนที่นิพจน์ทั่วไป : แทนที่^.\{42\}โดยไม่มีอะไรเลยเพื่อลบ 42 ตัวอักษรแรกของทุกบรรทัด


3
แทนที่จะพยายามจำคำสั่งสี่เหลี่ยมผืนผ้าทั้งหมดคุณสามารถใช้ Cx spc แทน C-spc ซึ่งเปลี่ยนภูมิภาคของคุณให้เป็นรูปสี่เหลี่ยมผืนผ้าและทุกอย่างใช้งานได้
Malabarba

1
@ Malabarba เฉพาะตั้งแต่ Emacs 24 (เขียนสิ่งนี้บนเครื่องที่มี Emacs 23. พวกเขายังอยู่ใกล้มาก ๆ )
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

2
แสดงความเสียใจของฉัน ... :-(
Malabarba

สิ่งนี้ใช้ได้กับฉันใน GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK + เวอร์ชัน 2.24.21) ของ 2013-10-25 บน allspice, แก้ไขโดย Debian
davidrmcharles

4

ความเป็นไปได้อีกอย่าง: ฉันชอบใช้เคอร์เซอร์หลายตัวสำหรับงานเช่นนี้ มีให้ในpackage.elMELPA มันกลายเป็นส่วนที่ขาดไม่ได้ของ emacs ของฉัน ฉันจะเลือกI said(และอาจรวมถึงการแบ่งบรรทัดก่อนหน้านี้) ใช้M-x mc/mark-all-like-thisและเป็นทางของฉัน หากคุณต้องการการควบคุมที่ละเอียดมากขึ้นคุณสามารถใช้หรือmc/mark-next-like-thismc/mark-next-lines

ปุ่มลัดของฉัน:

(use-package multiple-cursors
  :bind (("C->"   . mc/mark-next-like-this)
         ("C-M->" . mc/mark-all-like-this-dwim)))

Emacs บังคับ! ตอน: http://emacsrocks.com/e13.html


3

หากคุณcua-modeเปิดใช้งานแล้ว:

  • C-a เพื่อเลื่อนไปยังจุดเริ่มต้นของบรรทัด
  • C-RET เพื่อเริ่มสี่เหลี่ยมผืนผ้า
  • จากนั้นย้ายด้วยปุ่มลูกศรหรือคำสั่งย้าย emacs เช่น C-f
  • DEL เพื่อลบการเลือก

ฉันชอบcua-modeวิธีการทำงานมากกว่าสี่เหลี่ยมจัตุรัสมาตรฐานของ Emacs ซึ่งเทียบเท่า:

  • C-a เพื่อเลื่อนไปยังจุดเริ่มต้นของบรรทัด
  • C-SPC เพื่อเริ่มสี่เหลี่ยมผืนผ้า
  • จากนั้นย้ายด้วยปุ่มลูกศรหรือคำสั่งย้าย emacs เช่น C-f
  • C-x r d เพื่อลบการเลือก

cua-modeบันทึกสามกดปุ่มเมื่อเทียบกับมาตรฐาน Emacs สี่เหลี่ยมผืนผ้า


3

เพื่อความสมบูรณ์: การลบอักขระ 3 ตัวแรกจากแต่ละบรรทัด (เป็นทางการ: จากจุดบนหรือในพื้นที่) สามารถทำได้โดยการแทนที่ regexp ^...(หรือโดยทั่วไป:) ^.\{3\}ด้วยสตริงว่าง

คำอธิบาย: ใน regexen, ^หมายถึง "จุดเริ่มต้นของสาย" .หมายถึง "ตัวอักษรใด ๆ" และ\{n\}หมายถึง " nซ้ำของสิ่งที่มาก่อน"

สิ่งนี้มีประโยชน์เพิ่มเติมของการเป็นแบบโต้ตอบ (ยกเว้นกดเพียงครั้งเดียว!ซึ่งจะquery-regexp-replaceแทนที่ทุกอย่างนับจากนี้ไปโดยไม่มีคำถามเพิ่มเติม)


1
ทำไมต้องลงคะแนน?
mbork

0

และอีกหนึ่งความเป็นไปได้:

F3C-aC-3C-dC-nF4

บันทึกแมโครแป้นพิมพ์โดยทั่วไปแล้ว "ย้ายไปที่จุดเริ่มต้นของบรรทัดลบอักขระสามตัวและย้ายไปที่บรรทัดถัดไป" จากนั้นคุณสามารถเล่นซ้ำจนกว่าจะสิ้นสุดของบัฟเฟอร์โดยC-uF4หรือC-xC-krนำไปใช้กับบรรทัดในภูมิภาค นี่มีข้อเสียเดียว: มันจะแตกเมื่อบรรทัดใดก็ตามมีน้อยกว่า 3 อักขระ


-1

หากเป็นเพียงบรรทัดเดียวที่คุณสามารถ zap-to-char กับ Mz โดยสันนิษฐานว่าอักขระนั้นไม่ซ้ำระหว่างจุดและบรรทัดที่คุณต้องการลบสูงสุด สำหรับบางกรณีการดำเนินการนี้จะเร็วกว่าการสร้างภูมิภาค

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