Lepsze wcięcia i nawigacja w kodzie źródłowym zestawu


13

Kiedy piszę kod C lub Java, jest on bardzo regularny, ale dzięki asemblerowi ( asm-mode) jest tak niezorganizowany.

Używam auto-completei yasnippet. Utworzyłem fragmenty i korzystam z nich, ale organizacja kodu i wcięcia są zdezorganizowane.

Jakie pakiety by mi pomogły:

  • łatwo wcina kod i komentarze poprawnie, dzięki czemu mogę zobaczyć, co robi każdy fragment kodu;
  • poruszać się po tej dużej masie kodu, więc mogę łatwo przeskakiwać między fragmentami kodu?

3
Spróbuj uściślić swoje pytanie. Na przykład: jak myślisz, co asm-modenależy zrobić, ale nie zrobić? (Jakich cech brakuje?)
Constantine,

2
EmacsWiki ma kilka opcji wymienionych na montaż. Ale edytuj swoje pytanie, aby bardziej szczegółowo opisało problem i to, co zrobiłeś do tej pory. „Każdy przydatny pakiet” obejmuje dużo ziemi.
Dan

Po co zamykać to pytanie? Wykonanie wcięcia działa ( asm-modezachowuje się inaczej niż wszystko inne) i skonfigurowanie przyzwoitego środowiska (przeskakiwanie, uzupełnianie kodu) jest prawidłowym koncertem.
Tu Do

1
Użytkownicy, którzy chcieli ponownie otworzyć to pytanie, zobacz tę meta dyskusję . Pomóż wyczyścić pytanie i je wyjaśnić, w przeciwnym razie istnieje niebanalna szansa, że ​​inni użytkownicy zagłosują za jego zamknięciem.
Dan

Odpowiedzi:


11

Wystarczy użyć wbudowanego asm-mode. Umożliwia podświetlanie składni dla wszystkich języków asemblera. gas-modenie robi tego i nie nadaje się do użytku ze składnią AT&T.

Jeśli chcesz ustawić wcięcie asm-mode, pamiętaj, że nie możesz używać, tab-widthale tab-stop-listokreśla spacje, które mogą wyświetlać 1 tabulator, 2 tabulatory, 3 tabulatory ...

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

Powyższy przykład oznacza, że ​​karta pięści ma 4 spacje, druga karta (obok pierwszej karty) ma 8 spacji, trzecia karta (obok drugiej karty) ma 12 spacji ... i tak dalej.

Możesz również wygenerować listę w następujący sposób:

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

number-sequencegeneruje listę liczb, zaczynając od numeru początkowego 2(pierwszy argument) aż do 60(drugi argument), każda liczba różni 2się liczbą obok niej. I pamiętaj, aby połączyć się newline-and-indentz RET, więc Emacs automatycznie dla ciebie wcina.

Jeśli chcesz skakać, użyj Ctags w następujący sposób:

ctags -e -R

-eoznacza wygenerowanie bazy danych znaczników do użycia przez Emacsa. -Roznacza rekurencyjne generowanie znaczników dla plików w podkatalogach z katalogu głównego projektu.

Następnie możesz użyć helm-etags-selectdo skakania lub innego etagsklienta w Emacsie, jeśli nie używasz Hełmu.

EDYCJA : Oto przykładowa konfiguracja:

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

Możesz także ukończyć company-completepo naciśnięciu S-TAB:

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

Możesz użyć <tab>do wyzwolenia zakończenia, ponieważ oba <tab>i M-iuruchom to samo polecenie, tab-to-tab-stopktóre wstawia spacje lub tabulatory, zależy od twojego ustawienia indent-tabs-mode. Zaletą company-modejest to, że otrzymujesz krótki opis aktualnie wyróżnionego kandydata w minibuforze, jeśli jest dostępny. Na przykład, jeśli masz taką definicję:

KeyStrokes  word    0

Gdy przesuniesz kursor do KeyStrokeskandydata, zostanie on wydrukowany word 0w minibuforze.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.