Tùy chỉnh thụt lề trong chế độ makefile?


11

Trong tệp tạo tệp của tôi, tôi thích cách thụt dòng sau cho các dòng tiếp tục:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

Tuy nhiên, chế độ makefile thụt lề theo cách sau (khi được yêu cầu giới thiệu lại tệp hoặc vùng):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

Có thể định cấu hình bằng cách nào đó để sử dụng biến thể cũ (= dòng tiếp tục thụt lề theo 4 khoảng trắng hoặc tab) không?


Còn indent-according-to-modelệnh thì sao?
Andriy Tykhonov

Câu trả lời:


1

Xây dựng trên giải pháp của 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)))

Vấn đề duy nhất là điều này sẽ không hoạt động nếu danh sách tệp của bạn bị TAB thụt lề, bởi vì mã của tôi khiến cho những thứ đó không bị ảnh hưởng.
Alex Schröder

sửa lỗi thụt đầu dòng thành 4 không phải là một giải pháp tốt, điều gì xảy ra nếu FILESLIBSdài, và có một yếu tố sau :=, và tốt hơn hết bạn nên căn chỉnh các yếu tố sau với yếu tố đầu tiên sau :=?
CodyChan

Bốn không gian là những gì câu hỏi yêu cầu.
Alex Schröder

0

Đúng. Có thể cấu hình nó, bằng cách nào đó.

(Với lời xin lỗi cho tiếng sủa.)

Viết hàm thụt dòng theo cách bạn muốn, sau đó đặt hàm đó làm giá trị của biến indent-line-functioncho makefile-mode. Cái gì đó như:

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

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

Chà, 3 dấu chấm đó là sth Tôi không biết phải điền như thế nào ... Nhưng cảm ơn vì con trỏ một phần.
Mekk

0

Trong trường hợp bạn đang sử dụng aggressive-indent-mode, nó giúp tôi đưa makefile-modevào danh sách aggressive-indent-excluded-modes:

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

Lưu ý rằng điều này chỉ hoạt động với global-aggressive-indent-modebật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.