การเยื้องและการนำทางที่ดีขึ้นในซอร์สโค้ดแอสเซมบลี


13

เมื่อฉันเขียนโค้ด C หรือ Java มันเป็นเรื่องปกติมาก แต่ด้วยแอสเซมบลี ( asm-mode) มันไม่เป็นระเบียบ

ฉันใช้และauto-complete yasnippetฉันสร้างสนิปเพตและใช้มัน แต่การจัดระเบียบโค้ดและการเยื้องไม่เป็นระเบียบ

แพคเกจใดจะช่วยฉัน:

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

3
โปรดลองทำคำถามของคุณให้เจาะจงยิ่งขึ้น ตัวอย่างเช่นคุณคิดว่าasm-modeควรทำอะไร แต่ไม่ทำ (คุณลักษณะใดหายไป)
Constantine

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

ปิดคำถามนี้ทำไม การเยื้องการทำงาน ( asm-modeทำงานแตกต่างจากทุกอย่างอื่น) และการกำหนดค่าสภาพแวดล้อมที่เหมาะสม (กระโดดไปรอบ ๆ การกรอกโค้ด) เป็นคอนเสิร์ตที่ถูกต้อง
Tu Do

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

คำตอบ:


11

asm-modeเพียงแค่ใช้ในตัว มันช่วยให้คุณเน้นไวยากรณ์สำหรับภาษาประกอบใด ๆ gas-modeไม่ทำอย่างนั้นและไม่สามารถใช้ได้กับไวยากรณ์ AT&T

หากคุณต้องการตั้งค่าการเยื้องสำหรับasm-modeโปรดทราบว่าคุณไม่สามารถใช้tab-widthแต่tab-stop-listที่ระบุช่องว่างที่ 1 แท็บ 2 แท็บ 3 แท็บ ... สามารถแสดง:

(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
                      64 68 72 76 80 84 88 92 96 100 104 108 112
                      116 120))

ตัวอย่างข้างต้นหมายความว่าแท็บกำปั้นมี 4 ช่องว่างแท็บที่ 2 (ถัดจากแท็บแรก) มี 8 ช่องว่างแท็บที่ 3 (ถัดจากแท็บที่สอง) มี 12 ช่องว่าง ... และอื่น ๆ

คุณสามารถสร้างรายการเช่นนี้:

(setq tab-stop-list (number-sequence 2 60 2))

number-sequenceสร้างรายการของตัวเลขโดยมีหมายเลขเริ่มต้น2(อาร์กิวเมนต์แรก) 60จนถึง (อาร์กิวเมนต์ที่สอง) แต่ละหมายเลขจะแตกต่างกันตาม2จำนวนที่อยู่ถัดจากมัน และอย่าลืมผูกnewline-and-indentRET ดังนั้น Emacs จะเยื้องคุณโดยอัตโนมัติ

หากคุณต้องการกระโดดไปรอบ ๆ ให้ใช้ Ctags ดังนี้:

ctags -e -R

-eหมายถึงสร้างฐานข้อมูลแท็กที่จะใช้โดย Emacs -Rหมายถึงการสร้างแท็กซ้ำสำหรับไฟล์ในไดเรกทอรีย่อยจากโครงการราก

หลังจากนั้นคุณสามารถใช้helm-etags-selectเพื่อกระโดดไปรอบ ๆ หรือetagsไคลเอนต์อื่นใน Emacs หากคุณไม่ใช้ Helm

แก้ไข : นี่คือการตั้งค่าตัวอย่าง:

(require 'asm-mode)
(add-hook 'asm-mode-hook (lambda ()
                           (setq indent-tabs-mode nil) ; use spaces to indent
                           (electric-indent-mode -1) ; indentation in asm-mode is annoying
                           (setq tab-stop-list (number-sequence 2 60 2))))

(define-key asm-mode-map (kbd "<ret>") 'newline-and-indent)
(define-key asm-mode-map (kbd "M-.") 'helm-etags-select)

นอกจากนี้คุณยังสามารถมีพื้นฐานที่สมบูรณ์company-completeเมื่อกดS-TAB:

(define-key asm-mode-map (kbd "<backtab>") 'company-complete)

คุณสามารถใช้<tab>เพื่อทริกเกอร์ทำให้เสร็จได้เพราะทั้งคู่<tab>และM-iรันคำสั่งเดียวกับtab-to-tab-stopที่แทรกช่องว่างหรือแท็บขึ้นอยู่กับการตั้งค่าของindent-tabs-modeคุณ สิ่งที่ดีcompany-modeคือคุณจะได้รับคำอธิบายสั้น ๆ เกี่ยวกับผู้สมัครที่ไฮไลต์อยู่ใน minibuffer ถ้ามี ตัวอย่างเช่นหากคุณมีคำจำกัดความเช่นนี้:

KeyStrokes  word    0

เมื่อคุณเลื่อนเคอร์เซอร์ไปที่ตัวเลือกKeyStrokesมันจะพิมพ์word 0ใน minibuffer


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