在makefile模式下自定义缩进?


11

在我的makefile中,我更喜欢以下缩进作为续行:

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年

Answers:


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

唯一的问题是,如果您的文件列表由TAB缩进,则此操作将不起作用,因为我的代码保持不变。
AlexSchröder2014年

将缩进固定为4不是一个好的解决方案,如果FILESLIBS很长,并且后面有一个元素:=,并且最好将后面的元素与后面的第一个元素对齐,该:=怎么办?
CodyChan 2015年

问题是四个空格。
AlexSchröder2015年

0

是。可以通过某种方式进行配置。

(对蛇的道歉。)

编写一个函数,缩进一条线,你所希望的方式,然后设置函数作为变量的值indent-line-functionmakefile-mode。就像是:

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

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

好吧,那三个点是……我不确定如何填充……但是感谢部分指针。
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打开时有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.