Einrückung im Makefile-Modus anpassen?


11

In meinen Makefiles bevorzuge ich den folgenden Einzug für Fortsetzungszeilen:

FILES:=                \
    file1.cpp          \
    file2.cpp          \
    fileYetAnother.cpp

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

Im Makefile-Modus wird es jedoch folgendermaßen eingerückt (wenn Sie aufgefordert werden, die Datei oder Region erneut einzubinden):

FILES:=            \
file1.cpp          \
file2.cpp          \
fileYetAnother.cpp

LIBS:=             \
libsth1.so         \
libelsewhere.so

Ist es möglich, es irgendwie so zu konfigurieren, dass es die frühere Variante verwendet (= Fortsetzungszeilen um 4 Leerzeichen oder Tabulator einrücken)?


Was ist mit indent-according-to-modeBefehl?
Andriy Tykhonov

Antworten:


1

Aufbauend auf der Lösung von lila_arrows:

(defun my-makefile-indent-line ()
  (save-excursion
(forward-line 0)
(cond
 ;; keep TABs
 ((looking-at "\t")
  t)
 ;; indent continuation lines to 4
 ((and (not (bobp))
       (= (char-before (1- (point))) ?\\))
  (delete-horizontal-space)
  (indent-to 4))
 ;; delete all other leading whitespace
 ((looking-at "\\s-+")
  (replace-match "")))))

(add-hook 'makefile-mode-hook
      (lambda ()
    (setq-local indent-line-function 'my-makefile-indent-line)))

Das einzige Problem ist, dass dies nicht funktioniert, wenn Ihre Dateiliste von TABs eingerückt wird, da mein Code diese unberührt lässt.
Alex Schröder

Das Einrücken der Einrückung auf 4 ist keine gute Lösung. Was ist, wenn die FILESund LIBSlang sind und ein Element danach vorhanden :=ist und Sie die folgenden Elemente besser mit dem ersten Element danach ausrichten :=?
CodyChan

Vier Leerzeichen war die Frage.
Alex Schröder

0

Ja. Es ist irgendwie möglich, es zu konfigurieren.

(Mit Entschuldigung für den Snark.)

Schreiben Sie eine Funktion, die eine Zeile wie gewünscht einrückt, und legen Sie diese Funktion als Wert für die Variable indent-line-functionfür fest makefile-mode. Etwas wie:

(defun my-makefile-indent-line ()
  ...)

(add-hook 'makefile-mode-hook (lambda () (setq-local indent-line-function 'my-makefile-indent-line)))

Nun, diese 3 Punkte sind etw. Ich bin mir nicht sicher, wie ich sie füllen soll ... Aber danke für den Teilzeiger.
Mekk

0

Falls Sie verwenden aggressive-indent-mode, hat es mir geholfen, makefile-modeauf die Liste von aggressive-indent-excluded-modes:

(global-aggressive-indent-mode)
(add-to-list 'aggressive-indent-excluded-modes 'makefile-mode)

Beachten Sie, dass dies nur bei eingeschaltetem global-aggressive-indent-modeGerät funktioniert .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.