การกำหนดการเยื้องในโหมด makefile?


11

ใน makefiles ของฉันฉันชอบเยื้องต่อไปนี้สำหรับสายต่อเนื่อง:

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

คำตอบ:


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

ปัญหาเดียวก็คือว่าสิ่งนี้จะไม่ทำงานหากรายการไฟล์ของคุณถูกเยื้องโดย TABs เพราะรหัสของฉันปล่อยให้ไม่มีการแก้ไข
Alex Schröder

แก้ไขการเยื้องเป็น 4 ไม่ใช่วิธีแก้ปัญหาที่ดีถ้ามีFILESและLIBSยาวและมีองค์ประกอบหนึ่งหลังจาก:=นั้นและคุณควรจัดองค์ประกอบต่อไปนี้ให้ดีขึ้นกับองค์ประกอบแรกหลังจากนั้น:=หรือไม่
CodyChan

สี่ช่องว่างคือคำถามที่ถาม
Alex Schröder

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

ทีนี้จุดสามจุดนั้นเป็นจริงฉันไม่แน่ใจว่าจะเติม ... แต่ขอบคุณสำหรับตัวชี้บางส่วน
Mekk

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.