ตัวแปรที่ประกาศสี


11

ฉันกำลังมองหาวิธีง่ายๆในการทำให้ emacs จดจำตัวแปรที่ประกาศไว้ในฟังก์ชันเดียวใน C / C ++ โดย "ง่าย" ฉันหมายถึงไม่มีแพ็คเกจภายนอกเพียงแค่มีบรรทัด elisp ในไฟล์กำหนดค่า

Emacs การตั้งค่าเริ่มต้นของฉันชื่อตัวแปรสีเหลืองในการประกาศ แต่ให้พวกเขาสีขาวในการใช้งาน

char toto; // 'char' is green, 'toto' is yellow

toto = 42; // 'toto' is white

ฉันต้องการทำให้ทุก "toto" ของฟังก์ชั่น / ขอบเขตเดียวกันเป็นสีเหลืองเช่นกัน

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

ฉันมีแนวคิดสำหรับชื่อสมาชิกคลาส C ++ (โดยใช้รูปแบบชื่อ) ดังนั้นฉันจึงต้องการตัวแปรโลคัลตรงกับที่นี่


3
นี่อาจจะยากกว่าที่ดู nobugs.org/developer/parsingcpp
wasamasa

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

11
ฟังดูคล้ายกับcolor-identifiers-modeแพ็คเกจมาก (โพสต์สิ่งนี้เป็นความคิดเห็นเพราะคุณบอกว่าคุณไม่ต้องการพิจารณาแพ็คเกจภายนอก)
Aaron Harris

7
ทุก ๆ "แพ็คเกจภายนอก" สามารถอธิบายได้ว่า "บางบรรทัด elisp ในไฟล์กำหนดค่า" การหลีกเลี่ยงรหัสที่มีอยู่แล้วบนพื้นฐานที่มีคนให้ไว้ในรูปแบบแพคเกจนั้นไร้สาระ
phils

คุณมี Emacs เวอร์ชั่นใด?
DA Vincent

คำตอบ:


1

คุณสามารถรวบรวม regexp สำหรับโครงการตัวแปรของคุณสิ่งที่แมตช์ (หลอกรหัส regexp) [char|other|types] [a-z];และ[a-z] =*;และเพิ่มเข้าไปในรายการคำหลักอักษรล็อคสำหรับโหมดของคุณ จากคู่มือที่หน้าการปรับแต่งคำหลัก :

ตัวอย่างเช่นรหัสต่อไปนี้จะเพิ่มรูปแบบการจัดรูปแบบอักษรสองแบบสำหรับโหมด C: รูปแบบหนึ่งเพื่อจัดรูปแบบคำว่า 'FIXME' แม้ในความคิดเห็นและอีกรูปแบบหนึ่งในการจัดรูปแบบคำว่า 'และ'

 (font-lock-add-keywords 'c-mode
  '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
    ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))

ตัวอย่างนี้มีผลเฉพาะโหมด C ที่เหมาะสม ในการเพิ่มรูปแบบเดียวกันในโหมด C และโหมดทั้งหมดที่ได้จากโหมดนี้ให้ทำดังนี้:

 (add-hook 'c-mode-hook
  (lambda ()
   (font-lock-add-keywords nil
    '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
      ("\\<\\(and\\|or\\|not\\)\\>" .
       font-lock-keyword-face)))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.