ฉันจะกำจัดสตริง“ default” (ใช้งานล่าสุด) ในฟังก์ชั่น emacs ได้อย่างไร?


12

ฉันมีปัญหาดังต่อไปนี้: เมื่อฉันใช้ 'Cx rt' (string-rectangle) ฉันได้รับแจ้งให้ป้อนสตริงบางส่วนเพื่อแทนที่สี่เหลี่ยมผืนผ้าที่เลือก ให้บอกว่าฉันพิมพ์ ";;" (เพื่อแสดงความคิดเห็นสี่เหลี่ยมผืนผ้า) ใช้งานได้ดี แต่ครั้งต่อไปที่ฉันเรียกใช้ฟังก์ชันเดียวกันและฉันต้องการแทนที่ด้วยไม่มีอะไร (สตริงว่าง) ฉันไม่สามารถทำได้เพราะมี "สตริง" เริ่มต้น ";; ที่ฉันใช้ก่อนหน้านี้และถ้าฉันเพิ่งกด Enter คำสั่งจะใช้ที่ ";;" สตริงแทนค่าว่าง ฉันจะตั้งเป็นสตริงว่างได้อย่างไร

ปัญหาที่คล้ายกันฉันมีบางฟังก์ชั่นการค้นหา / แทนที่ โดยทั่วไปเมื่อมันจดจำสตริงล่าสุดที่ฉันใช้และตั้งค่าเป็นค่าเริ่มต้นฉันจะ "ป้อน" สตริงว่างแทนได้อย่างไร

แก้ไข:

Kill-rectangle กล่าวโดย YoungFrog แก้ปัญหาเฉพาะ แต่ฉันมีสิ่งอื่นในใจ: basicaly ในสิ่งที่เคย emacs ฟังก์ชั่นจำค่าสุดท้ายที่คุณป้อนและใช้มันเป็น "เริ่มต้น" เมื่อคุณกด Enter คุณควรจะ สามารถล้าง "ค่าเริ่มต้น" เป็นค่าเริ่มต้นจริงก่อนที่คุณจะใช้ฟังก์ชั่น นี่เป็นอีกตัวอย่าง:

ในโหมด dired หากคุณ 'Mx rgrep' ระบบจะถามคุณถึง 3 อินพุต:

1) สิ่งที่จะค้นหา: สิ่งที่คุณป้อนที่นี่จะถูกใช้เป็นค่าเริ่มต้นในครั้งต่อไปที่คุณใช้ rgrep อย่างที่ใครบางคนชี้ให้เห็นมันไม่สมเหตุสมผลเลยที่จะค้นหาสตริงว่างเปล่าดังนั้นการล้างค่า "เริ่มต้น" นี้จึงไม่จำเป็นต้องเดาเลย

2) ถัดไปมันจะถามไฟล์ที่จะค้นหา มันเป็นค่าเริ่มต้นที่แท้จริงคือไฟล์ "ทั้งหมด" หากฉันป้อน * .txt และค้นหาครั้งต่อไปเมื่อฉันใช้ rgrep ระบบจะใช้ * .txt เป็น "ค่าเริ่มต้น" ตอนนี้ฉันต้องการล้าง "default" * .txt และกลับสู่ค่าเริ่มต้นดั้งเดิม "all" เช่นเดียวกับที่ฉันต้องการล้าง ";;" "default" ในฟังก์ชั่น string-rectangle โดยเป็นสตริงว่างเปล่าที่เป็นค่าเริ่มต้นจริง

แน่นอนปัญหานี้โดยเฉพาะสำหรับไฟล์ทั้งหมดอาจแก้ไขได้ด้วยการพิมพ์ *? แต่ปัญหาทั่วไปที่อาจเกิดขึ้นยังคงมีอยู่กับคำสั่งอื่น ๆ ที่จดจำค่าที่ใช้ล่าสุด

3) ถัดไปมันจะถามหาไดเรกทอรีฐานไม่มีปัญหาที่นี่

ดังนั้นวิธีที่ฉันเห็นมันเมื่อใดก็ตามที่ emacs พยายามช่วยฉันด้วยการจดจำค่าที่ใช้ล่าสุดของฉันในบางคำสั่ง (ซึ่งฉันพบว่ามีประโยชน์มากที่สุดตลอดเวลา) ควรมีวิธีการล้างค่าที่ใช้ราวกับว่าฉันไม่เคยใช้ คำสั่งก่อน

PS ฉันยังใหม่กับ emacs และบางทีฟังก์ชั่นที่ฉันต้องการไม่จำเป็นเพราะมีวิธีแก้ปัญหาอยู่เสมอ?


1
ฉันเชื่อว่ามันยากเพราะการอ่านและการแลกเปลี่ยนค่าเริ่มต้นสำหรับสตริงว่างไม่ได้เกิดขึ้นในฟังก์ชั่นเดียวกันในกรณีส่วนใหญ่ ในกรณีเฉพาะนี้delete-rectangleเป็นตัวเลือก
politza

clear rectangleถ้าคุณตั้งใจที่จะแทรกช่องว่างในรูปสี่เหลี่ยมผืนผ้าที่เลือกคุณสามารถใช้
Kaushal Modi

หากคุณต้องการปิดกั้นความคิดเห็น / ไม่แสดงความคิดเห็นทำไมไม่ใช้comment-dwim? การป้อนสตริง "empty" สำหรับการค้นหาก็ไม่สมเหตุสมผล แต่คุณสามารถป้อนสตริงว่างสำหรับชิ้นส่วนแทนที่ได้ ฉันอยากรู้อยากเห็นตัวอย่างเพิ่มเติมที่ผู้ใช้อาจต้องการป้อนสตริงว่าง
Kaushal Modi

3
เพียงแค่มองไปที่คำอธิบายของคุณได้อย่างรวดเร็ว string-rectangleแต่ดูเหมือนว่าอาจจะมีปัญหากับการออกแบบของคำสั่ง เมื่อใดก็ตามที่สตริงว่างทำให้รู้สึกว่าเป็นข้อมูลที่เป็นไปได้ควรมีวิธีการป้อนเป็นแตกต่างจากการยอมรับค่าเริ่มต้น ดูอย่างใกล้ชิดที่ doc สำหรับคำสั่ง (และที่ซอร์สโค้ดของมันถ้าคุณพอใจกับมัน) เพื่อดูว่ามีข้อบกพร่องในการออกแบบจริงหรือไม่ หากคุณคิดว่ามีโปรดรายงาน: M-x report-emacs-bug.
Drew

สำหรับ2), คุณสามารถป้อนตัวอักษรall, ซึ่งแตกต่างจาก*: มันตรงกัน.*ด้วย
npostavs

คำตอบ:


3

อย่าใช้C-x r t( string-rectangle) ใช้C-x r k( kill-rectangle) แทน


1
ฉันตอบเฉพาะตัวอย่างที่ระบุเนื่องจาก IMO เป็นตัวพิมพ์ใหญ่ (คำถามในชื่อเรื่อง) ยอมรับว่าไม่มีคำตอบ (ทั่วไป) ถึงกระนั้นฉันต้องการพูดถึงว่าC-j(แทนRET) อาจช่วยในบางกรณีเช่นโหมด ido
YoungFrog

3

ในกรณีทั่วไปสิ่งที่คุณต้องการไม่สามารถทำได้ นี่เป็นเพราะยูทิลิตี้และโหมดต่างๆใน Emacs เก็บประวัติการอ่านเสร็จในตัวแปรต่าง ๆ ไม่ใช่ในที่เดียว คุณสามารถตั้งค่าตัวแปรประวัติเหล่านั้นด้วยตนเองnil(สำหรับC-x r tตัวอย่างของคุณ(setq string-rectangle-history nil)) แต่จะไม่ปรับขนาด นอกจากนี้ยังไม่ใช่เรื่องง่ายที่จะค้นพบชื่อของตัวแปรประวัติโดยไม่ต้องอ่านรหัส

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