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

Mekk
quelle
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)))
Alex Schröder
quelle
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)))
lila_Pfeile
quelle
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 .

Timm
quelle