จะแทนที่อักขระด้วยบรรทัดใหม่ใน Emacs ได้อย่างไร


285

ฉันพยายามแทนที่ตัวละคร - พูด;- ด้วยบรรทัดใหม่ที่ใช้replace-stringและ / หรือreplace-regexpใน Emacs

ฉันได้ลองคำสั่งต่อไปนี้แล้ว:

  • M-x replace-string RET ; RET \n

    นี้จะแทนที่;มี 2 \nตัวอักษร:

  • M-x replace-regex RET ; RET \n

    ซึ่งส่งผลให้เกิดข้อผิดพลาดต่อไปนี้ (แสดงใน minibuffer):

    การใช้ `\ 'ไม่ถูกต้องในข้อความแทนที่

เกิดอะไรขึ้นกับการใช้replace-stringงานนี้ มีวิธีอื่นที่จะทำหรือไม่

ขอบคุณ

คำตอบ:


427

M-x replace-string RET ; RET C-q C-j.

  • C-qสำหรับquoted-insert,

  • C-j เป็นบรรทัดใหม่

ไชโย!


3
Cq เป็นquote-insertคำพูดตัวอักษรถัดไปจริงๆ
Joe Casadonte

2
ฉันเชื่อว่าจริง ๆ แล้วมันคือ "ยกมา" มากกว่า "อ้าง" เช่นเดียวกับใน "อ้างถึงแทรก" อย่างน้อยนั่นก็เป็นแบบที่เวอร์ชั่น 22.1
ไบรอัน Oakley

8
C-jเป็นตัวอักษร0x0aรหัสควบคุมเมื่อเทียบกับซึ่งเป็นกุญแจสำคัญที่อยู่ติดกับคำพูดของคุณและส่ง Ret en.wikipedia.org/wiki/C0_and_C1_control_codes0x0d
Jonathan Arkell

2
หมายเหตุสำหรับผู้ใช้ที่เป็นกลุ่มที่ใช้C-jในemacsในขณะที่C-mในกลุ่ม
Alpha TAN

2
@JonathanArkell นั่นคือคำอธิบายวิธีการทำงาน แต่ไม่ได้ว่าทำไม ภายในตัวแก้ไข Ret สร้าง 0x0a ดังนั้นเหตุใดจึงควรสร้าง 0x0d ในเครื่องหมายคำพูดแทรก นั่นไม่สมเหตุสมผลเลย (? เพียงเพราะรหัสที่แป้นพิมพ์ภายใน 0x0D ด้วยเหตุผลทางประวัติศาสตร์ที่สำคัญเราใช้แผนที่ทั่วทุกสถานที่ทำไมไม่ได้ที่นี่ที่มันทำให้รู้สึกดี?)
VOG

74

มีสี่วิธีที่ฉันพบว่าใส่บรรทัดใหม่ลงใน minibuffer

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 คือค่าฐานแปดของการขึ้นบรรทัดใหม่)

  4. C-x oไปที่หน้าต่างหลักแล้วขึ้นบรรทัดใหม่C-kแล้วC-x oกลับไปที่ minibuffer ดึงมันขึ้นมาC-y


10
+1 สำหรับการกล่าวถึงC-o! C-q C-jหนึ่งจังหวะสำคัญน้อยเมื่อเทียบกับ ไม่เคยคิดที่จะใช้อันนั้นมาก่อน
itsjeyd

ขอบคุณสำหรับรุ่น 4! มีประโยชน์หากคุณมีการฟื้นตัวของ Co และ Cq
Joachim W

ขอบคุณมาก. คุณช่วยอธิบายได้ไหมว่าเพราะเหตุใด Co จึงทำงานและ Cq Cj ไม่ได้
Christian Madsen

C-oไม่ย้ายจุดหลังจากแทรกบรรทัดใหม่ใน minibuffer ดังนั้นคุณยังต้องกดปุ่มลูกศรขวาเช่นกันหากคุณต้องการแทรกบางสิ่งหลังจากบรรทัดใหม่ในสตริงการแทนที่
Robin Green

ใน Emacs เวอร์ชั่น 25.2.2 ของฉันC-oจะป้อนบรรทัดใหม่ในหน้าต่างหลักเมื่อใช้การค้นหาในขณะที่C-q C-jจะป้อนบรรทัดใหม่ใน minibuffer C-oทำงานกับเคียวรี - แทนที่ได้
TC Proctor

25

อย่าลืมว่าคุณสามารถตัดและวางลงใน minibuffer ได้ตลอดเวลา

ดังนั้นคุณสามารถคัดลอกอักขระขึ้นบรรทัดใหม่ (หรือสตริงใด ๆ ) จากบัฟเฟอร์ของคุณแล้วดึงมันเมื่อได้รับพร้อมท์สำหรับข้อความแทนที่


2
มันเป็นความคิดที่ดีสำหรับตัวละครที่ฉันไม่รู้จักการผูกกุญแจ
Lei

อ่า! ง่ายมาก!
Jérémy Pouyet

8

ชัดเจนมากขึ้น:

หากต้องการแทนที่อักขระเซมิโคลอน (;) ด้วยบรรทัดใหม่ให้ทำตามขั้นตอนที่แน่นอนเหล่านี้

  1. ค้นหาเคอร์เซอร์ที่ด้านบนซ้ายของบัฟเฟอร์ที่มีข้อความที่คุณต้องการเปลี่ยน
  2. พิมพ์ mx replace-string และกด RETURN
  3. mini-buffer จะแสดงดังนี้: แทนที่สตริง (ค่าเริ่มต้น ^ ->):
  4. พิมพ์อักขระที่คุณต้องการแทนที่ ในกรณีนี้, ; และกด RETURN
  5. mini-buffer จะแสดงผลดังนี้: string; ด้วย:
  6. ตอนนี้รัน Cq Cj
  7. อินสแตนซ์ทั้งหมดของเซมิโคลอนจะถูกแทนที่ขึ้นบรรทัดใหม่ (จากตำแหน่งเคอร์เซอร์จนถึงท้ายบัฟเฟอร์จะปรากฏขึ้น)

เพิ่มบิตมากกว่าคำอธิบายเดิม


2

สลับเป็นโหมดข้อความ

M-x text-mode

ไฮไลต์บล็อกเพื่อเยื้อง

ย่อหน้า

C+M \

เปลี่ยนกลับเป็นโหมดอะไรก็ได้ ..


0

แบบอินไลน์เพียง: C-M-S-%(หากคีย์การผูกยังคงเป็นค่าเริ่มต้น) กว่า replace-string^J

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