แสดงจุดเริ่มต้นของขอบเขตเมื่ออยู่นอกหน้าจอ


12

ฉันต้องการแสดงส่วนเปิดของขอบเขตเมื่อสิ่งนี้ออกจากหน้าจอ

ตัวอย่าง:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

สิ่งนี้สามารถทำงานได้กับภาษาการเขียนโปรแกรมจำนวนมาก แต่ฉันคิดว่า C ++ เป็นหลัก

เพื่อชี้แจงเพิ่มเติมอีกเล็กน้อยและสำหรับผู้ที่รู้จัก VS ฉันต้องการคุณลักษณะที่คล้ายกันกับสิ่งที่มีอยู่ใน Visual Studio เช่นการวางเคอร์เซอร์ที่ส่วนท้ายของขอบเขตแสดงจุดเริ่มต้นของขอบเขตที่ด้านบนของบัฟเฟอร์การแก้ไข

สถานที่นี้มีอยู่แล้วบ้างไหม?


ฉันอยากรู้อยากเห็นคำตอบของฉันช่วยได้ไหม
Tu Do

@TuDo ใช่! ฉันเพิ่งมีเวลาได้ดู ฉันมีความหมายอยู่แล้วและเพิ่งเปิดใช้โหมดความหมายระดับโลกซึ่งทำงานได้อย่างดี ขอบคุณ ปัญหาของฉันตอนนี้คือสีไม่ทำให้ส่วนหัวอ่านได้ ..
log0

คำตอบ:


14

หากคุณกำลังเขียน C / C ++ / Java / Emacs Lisp / Python ดังนั้นsemantic-sticky-func-modeจะทำสิ่งที่คุณต้องการ

หมายเหตุ : สิ่งนี้ดูเหมือนว่าจะทำงานกับ CEDET จาก Git ไม่ใช่ CEDET ในปัจจุบันใน Emacs 24.4 วิธีรับ Emacs จาก Git:

git clone http://git.code.sf.net/p/cedet/git cedet

และโหลด CEDET ก่อนเหนือสิ่งอื่นใดในไฟล์ init ของคุณ:

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

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

มันแสดงฟังก์ชั่นอินเตอร์เฟซเต็มรูปแบบ (ประเภทกลับชื่อฟังก์ชั่นและพารามิเตอร์) ไม่เพียง แต่ชื่อฟังก์ชั่น

หากต้องการเปิดใช้งานให้ใส่รหัสนี้ในไฟล์ init ของคุณ:

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

UPDATE : หนึ่งในปัญหาที่เกิดขึ้นในปัจจุบันsemantic-stickyfunc-modeคือมันไม่ได้แสดงพารามิเตอร์ทั้งหมดที่กระจัดกระจายในหลายบรรทัด เพื่อแก้ปัญหานี้ผมสร้างแพคเกจstickyfunc-เพิ่มประสิทธิภาพ

ตัวอย่าง :

นี่คือตัวอย่างใน C:

ความหมายเหนียว-func โหมด-C

นี่คือตัวอย่างใน Emacs Lisp:

ความหมายเหนียว-func โหมด Elisp

UPDATE : หรือคุณสามารถใช้หางเสือความหมายหรือ imenu เมื่อคุณอยู่ในฟังก์ชั่นและเรียกใช้คำสั่งเคอร์เซอร์จะถูกวางไว้ที่ฟังก์ชั่นในรายการดังนั้นคุณจึงสามารถเห็นฟังก์ชั่นอินเทอร์เฟซเต็มรูปแบบได้เสมอ การสาธิต:

  • ก่อนอื่นฉันใช้helm-semantic-or-imenuเพื่อย้ายไปยังฟังก์ชั่นhelm-define-key-with-subkeysและจุดย้ายที่นั่น

  • จากนั้นฉันจะเริ่มต้นhelm-semantic-or-imenuอีกครั้งและhelm-define-key-with-subkeysถูกเลือกไว้ล่วงหน้า

  • จากนั้นฉันย้ายจุดไปยังตัวแปร helm-map และดำเนินการhelm-semantic-or-imenuอีกครั้งในสองฟังก์ชั่น: helm-next-source และ helm-source-source คราวนี้แทนที่จะแสดงแท็กความหมายปัจจุบันที่ฉันใช้งาน (ซึ่งคือแผนที่หางเสือ) มันแสดงแท็กอีกสองแท็กในบัฟเฟอร์ความหมายของ Helm Semantic นี่เป็นเพราะฉันให้อาร์กิวเมนต์คำนำหน้าก่อนที่จะเรียกใช้คำสั่ง

นอกจากนี้การสาธิตนี้อยู่ใน Emacs Lisp ใช้งานได้กับ C / C ++ เช่นกันและมีความยืดหยุ่นมากขึ้นถ้าคุณมีส่วนต่อประสานฟังก์ชันที่ยาวมาก

หางเสือความหมายหรือ imenu


คุณได้สิ่งนี้มาเพื่อ Lisp (โดยเฉพาะ Elisp) อย่างไร? ผมประเมินรหัสของคุณในแต่ฉันไม่ได้รับพฤติกรรมที่คุณอธิบายเมื่อฉันเรียกเช่นemacs -Q org.el
itsjeyd

ฉันอัพเดตคำตอบแล้ว คุณควรลองด้วย Semantic จาก bzr
Tu Do

1
ปิดหัวข้อทั้งหมด ขอบคุณที่แนะนำฉันไปที่โหมด Nyan การเข้ารหัสของฉันจะไม่เหมือนเดิมอีกต่อไป
purple_arrows

6

คุณสามารถเปิดได้which-function-modeโดยทำ

M-x which-function-mode RET

หากต้องการทำให้การตั้งค่าเป็นแบบถาวรให้เพิ่ม

(which-function-mode 1)

ไปที่ไฟล์ init ของคุณ

จากเอกสารประกอบ:

แสดงการสลับโหมดโหมดของฟังก์ชั่นปัจจุบัน (โหมดฟังก์ชั่นใด) [ ... ]

โหมด Function ใดเป็นโหมดรองส่วนกลาง เมื่อเปิดใช้งานชื่อฟังก์ชั่นปัจจุบันจะปรากฏขึ้นอย่างต่อเนื่องในบรรทัดโหมดในโหมดหลักบางโหมด

หมายเหตุ : ชื่อนี้ไม่ได้แนะนำจริงๆ แต่สามารถใช้งานได้เฉพาะกับ "ฟังก์ชั่น" แต่สำหรับขอบเขตประเภทอื่นเช่นกัน ยกตัวอย่างเช่นในorg-mode, which-function-modeแสดงหัวข้อของทรีย่อยในปัจจุบัน


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