求助: Elisp 下语法补全/格式化兼容 use-package 的语法

案例1: 这里是不是可以推荐变量名来补全?

案例2, 当使用 elisp-autofmt 并使用 native 的方式来格式化当前 buffer 时, use-package 作为一个 macro, 其跟随的包名会跑到第二行. 这样我认为不是规范的 use-package 写法 (见上图 28 行白色的 orderless 字样). 有什么方法来避免其自动格式化吗?

不需要什么auto format (elisp 代码用 pp 一下不就行了

pp 只会更丑

(pp
 '(use-package spacemacs-buffer
    :custom (abc . d)
    :init
    (defconst tecomacs-title "[T E C O M A C S]")
    (defconst tecomacs-startup-lists
      '((bookmarks . 3) (recents  . 5)))))
(use-package spacemacs-buffer :custom
  (abc . d)
  :init
  (defconst tecomacs-title "[T E C O M A C S]")
  (defconst tecomacs-startup-lists
    '((bookmarks . 3)
      (recents . 5))))

都丑,我选择手动 indent

使用 evil,一般都只使用 自动 indent (也就是 gg=G). 自动 indent 不会给你改变 line 的结构,只会改变每一行 line 前面的空格/tab数。

看来目前最好的方案也只有手动 indent 了吗哈哈 (捂脸

我用这个包,不怎么关心过 indent

1 个赞

看起来很好用, 谢谢推荐. 不过我有些担心这个插件对性能的要求? 请问你用起来有感觉卡顿、性能下降吗?

我用了几年了,没遇到过性能问题。我只在 elisp-mode 和 lisp-mode 开启这个包。你自己试试看吧

1 个赞

如果只是 indent 话,参考如下配置:

;; Indent Region or Buffer
(use-package GPE-indent
  :ensure nil
  :commands (indent-region-or-buffer)
  :bind (("C-M-\\" . indent-region-or-buffer))
  :init
  (defun indent-buffer()
    "To indent the buffer."
    (interactive)
    (indent-region (point-min) (point-max)))

  (defun indent-region-or-buffer()
    "To indent the region or buffer."
    (interactive)
    (save-excursion
      (if (region-active-p)
          (progn
            (indent-region (region-beginning) (region-end))
            (message "Indent selected region."))
        (progn
          (indent-buffer)
          (message "Indent buffer."))))))

平时在拷贝,或者整体代码需要调整的时候,缩进比较麻烦些,这段代码就派上用场 ~

1 个赞