วิธีการขัดจังหวะ emacs เมื่อ control-g ไม่ทำงานในไฟล์ขนาดใหญ่มาก?


16

ฉันพบปัญหา O (n ^ 2) หรือพฤติกรรมแย่ลงเมื่อดูไฟล์ที่มีขนาดใหญ่มาก (เช่น 128MB) ใน Emacs และข้ามไปยังจุดสิ้นสุดของไฟล์ ฉันคิดว่าอาจต้องทำด้วยอัลกอริธึมการระบายสีเพื่อกำหนดสีของข้อความตามบริบท หากฉันพิมพ์ control-g (คีย์บอร์ดออกจาก) การดำเนินการจะไม่ได้รับผลกระทบ ฉันต้องการวิธีกู้คืนเซสชัน emacs ของฉันโดยไม่ฆ่ามัน ฉันพยายามส่ง SIGINT แต่ emacs เพิ่งออกมา มีสัญญาณใดบ้างที่ฉันสามารถส่งหรือวิธีอื่น ๆ (อาจเป็นในตัวดีบั๊กเกอร์) เพื่อบังคับให้การกระทำใด ๆ ที่กำลังดำเนินอยู่เพื่อยอมแพ้และกลับมาควบคุมฉัน


ผมไม่ทราบวิธีที่จะทำให้ตัวอักษรล็อค Interruptible แต่คุณอาจพบว่าบางสิ่งบางอย่างของการใช้งานในหน้า Emacs วิกิพีเดียนี้ในการเร่งการล็อคตัวอักษร
Aaron Miller

5
คุณลองกดปุ่มหลบหนี 3 ครั้งหรือไม่?
yPhil

ใช่ฉันคิดว่ารหัสล็อคตัวอักษรของคุณเองอาจเป็นความผิดพลาดที่นี่ ตรวจสอบfont-lock-keywordsregexps ของคุณอย่างรอบคอบเพื่อพยายามค้นหาปัญหา
ดึง

1
EMACS: แปดเมกะไบต์และสลับเปลี่ยนอย่างต่อเนื่อง :-)
user829755

2
การกดปุ่มหลบหนีสามครั้งไม่ทำอะไรเลยสำหรับฉัน
WilliamKF

คำตอบ:


9

ฉันสงสัยว่ามันเป็นโหมดล็อคแบบอักษร นั่นอาจเป็นเพียงส่วนใกล้สิ่งที่มองเห็นได้ อาจเป็นการคัดลอกข้อมูลในหน่วยความจำ

sigusr1

sigusr2

เหตุการณ์เหล่านี้จะเกิดขึ้นเมื่อกระบวนการ Emacs รับสัญญาณและSIGUSR1 SIGUSR2พวกมันไม่มีข้อมูลเพิ่มเติมเพราะสัญญาณไม่มีข้อมูลเพิ่มเติม สามารถมีประโยชน์สำหรับการดีบัก (ดูข้อผิดพลาดการดีบัก )

แหล่งที่มา: GNU Emacs Lisp คู่มืออ้างอิง: Misc Events

ฉันไม่รู้ว่ามันจะทำอะไร (หรือ emacs รุ่นใดที่คุณกำลังใช้งานอยู่) แต่คุณสามารถลองใช้สัญญาณที่ไม่มีการทำลายแบบ PROBABLY (USR1 หรือ USR2)

$ kill -USR1 pid

หรือคุณอาจจะไปนอนและดูว่ามันฟื้น


ฉันสงสัยว่าซีพียูและดิสก์ของคุณยุ่งแค่ไหน นั่นอาจบอกคุณเล็กน้อยเกี่ยวกับสิ่งที่ทำ .. และคุณอาจเรียกใช้ emacs อีกชุดและ "kill -USR1 pid" ใหม่เพื่อดูว่าเกิดอะไรขึ้นก่อนที่คุณจะทำสิ่งที่คุณสนใจ
9mjb

3
ว้าวการส่งkill -USR2ไปยังemacs-mac นั้นเหมาะกับฉันในสถานการณ์ที่คล้ายกัน - โหลดไฟล์ขนาดใหญ่ในโหมด js2 และเริ่มการค้นหา USR2 ออกจาก isearch และป้อนตัวดีบั๊ก ดีกว่าการฆ่ากระบวนการ!
วิลเลียม

ฉันไม่เห็นด้วยกับข้อสงสัยของคุณ การฆ่าทำงานสำหรับฉัน มันทำให้ฉันไปที่ดีบั๊กเกอร์และฟอนต์ล็อคเริ่มต้น - ฟอนต์ - ภูมิภาคคือที่ที่มันติดอยู่
Brian C.

2

ฉันไม่รู้จักการจัดการสัญญาณใด ๆ ที่ emacs ทำ แต่คุณสามารถใช้ Emacs Server ได้โดยใส่server-startไฟล์ ~ / .emacs ของคุณเพื่อให้คุณสามารถทำ RPC บนอินสแตนซ์ที่ทำงานอยู่ของ emacs

จากนั้นเมื่อคุณต้องการที่จะฆ่า emacs emacsclient -e '(save-buffers-kill-emacs t)'และเขียนคุณสามารถโทรจากเปลือกของคุณ

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