makefileモードでインデントをカスタマイズしますか?


11

私のメイクファイルでは、継続行に次のインデントを使用します。

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

それでも、makefileモードは次の方法でインデントします(ファイルまたは領域を再インデントするように要求された場合):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

以前のバリアントを使用するように構成することは可能ですか(=継続行を4つのスペースまたはタブでインデントする)?


何についてのindent-according-to-modeコマンド?
Andriy Tykhonov 2014年

回答:


1

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

唯一の問題は、ファイルリストがタブでインデントされている場合、これが機能しないことです。これは、私のコードでは変更されないためです。
アレックス・シュレーダー

インデントを4に修正することは良い解決策ではありません。FILESLIBSが長く、の後:=に1つの要素があり、次の要素を最初の要素の後に配置した方がよい場合は:=どうでしょうか?
CodyChan 2015

4つのスペースが質問の答えです。
AlexSchröder15年

0

はい。なんとかして設定することが可能です。

(スネークをお詫びします。)

インデント行あなたが望む方法は、変数の値として、その機能を設定することを機能書くindent-line-functionためにmakefile-mode。何かのようなもの:

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

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

さて、これらの3つのドットはどのように塗りつぶすかわかりませんsthです...しかし、部分的なポインターに感謝します。
Mekk 2014年

0

を使用している場合aggressive-indent-mode、それが私をmakefile-modeリストに載せるのに役立ちましたaggressive-indent-excluded-modes

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

これはglobal-aggressive-indent-modeオンになっている場合にのみ機能することに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.