Lekukan dan navigasi yang lebih baik dalam kode sumber perakitan


13

Ketika saya menulis kode C atau Java itu sangat biasa, tetapi dengan assembly ( asm-mode), itu sangat tidak teratur.

Saya menggunakan auto-completedan yasnippet. Saya membuat cuplikan dan menggunakannya, tetapi organisasi kode dan lekukan tidak terorganisir.

Paket apa yang akan membantu saya:

  • dengan mudah memasukkan kode dan komentar dengan benar, sehingga saya dapat melihat apa yang dilakukan oleh setiap bagian kode;
  • menavigasi banyak kode, sehingga saya dapat dengan mudah melompat di antara potongan kode?

3
Coba buat pertanyaan Anda lebih spesifik. Misalnya: apa yang menurut Anda asm-modeharus dilakukan, tetapi tidak? (Fitur apa yang hilang?)
Constantine

2
The EmacsWiki memiliki beberapa pilihan yang terdaftar untuk perakitan. Tapi tolong edit pertanyaan Anda untuk lebih spesifik tentang masalah dan apa yang telah Anda lakukan sejauh ini. "Paket berguna" mencakup banyak landasan.
Dan

Mengapa menutup pertanyaan ini? Membuat lekukan bekerja ( asm-modeberperilaku berbeda dengan yang lain) dan mengonfigurasi lingkungan yang layak (melompat-lompat, menyelesaikan kode) adalah konser yang valid.
Tu Do

1
Untuk pengguna yang menginginkan pertanyaan ini dibuka kembali, silakan lihat diskusi meta ini . Tolong bantu untuk membersihkan pertanyaan dan memperjelasnya, atau jika tidak ada kesempatan sepele bahwa pengguna lain akan memilih untuk menutupnya lagi.
Dan

Jawaban:


11

Cukup gunakan built-in asm-mode. Ini memberi Anda sorotan sintaks untuk bahasa assembly. gas-modetidak melakukan itu dan tidak dapat digunakan dengan sintaks AT&T.

Jika Anda ingin mengatur lekukan untuk asm-mode, perhatikan bahwa Anda tidak dapat menggunakan tab-widthtetapi tab-stop-listyang menentukan spasi yang 1 tab, 2 tab, 3 tab ... dapat menampilkan:

(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))

Contoh di atas berarti bahwa tab tinju memiliki 4 spasi, tab ke-2 (di sebelah tab pertama) memiliki 8 spasi, tab ke-3 (di sebelah tab kedua) memiliki 12 spasi ... dan seterusnya.

Anda juga dapat membuat daftar seperti ini:

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

number-sequencemenghasilkan daftar nomor, dengan nomor awal 2(argumen pertama) hingga 60(argumen kedua), setiap nomor berbeda dengan 2nomor di sebelahnya. Dan ingat untuk mengikat newline-and-indentRET, jadi Emacs secara otomatis indentasi untuk Anda.

Jika Anda ingin melompat-lompat, gunakan Ctag seperti ini:

ctags -e -R

-e berarti menghasilkan basis data tag untuk digunakan oleh Emacs. -Rberarti secara rekursif membuat tag untuk file dalam sub-direktori dari root proyek.

Setelah itu, Anda dapat menggunakan helm-etags-selectuntuk melompat-lompat atau etagsklien lain di Emacs jika Anda tidak menggunakan Helm.

EDIT : Ini adalah contoh pengaturan:

(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)

Anda juga dapat memiliki penyelesaian dasar dengan company-completesaat menekan S-TAB:

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

Anda dapat menggunakan <tab>untuk memicu penyelesaian karena keduanya <tab>dan M-imenjalankan perintah tab-to-tab-stopyang sama yang menyisipkan spasi atau tab tergantung pada pengaturan Anda indent-tabs-mode. Yang menyenangkan company-modeadalah Anda mendapatkan deskripsi singkat tentang kandidat yang saat ini disorot dalam minibuffer, jika tersedia. Misalnya, jika Anda memiliki definisi seperti ini:

KeyStrokes  word    0

Ketika Anda memindahkan kursor ke KeyStrokeskandidat, ia mencetak word 0dalam minibuffer.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.