用sly-el-indent获得更好的Elisp缩进

已更新,cl-loop 太好用。

跑个题,这种引用外部链接的效果到底是怎么输入的?我一直不清楚,这也是种Markdown语法吗?

单独一行链接就行 https://emacs-china.org/raw/10580/5 你可以看我怎么输入的

原来如此,使用带括号的那种输入链接的方法反而只能生成带下划线的传统链接,谢谢

你记反了,slime 才是万年沒更新的那个。

沒借口?我上周拿 VSC 写了下 Reason React 一比较发现 slime/sly 连个像样的 breakpoint 都沒有,太丟人了。

real programmer don’t use breakpoint :ghost:

终于找到给major mode补充缩进的例子可以参考了(要是有着色就更好了)!抱走~~

之前一直想给AucTeX添加pseudo-code的缩进和着色支持,苦于elisp入门(可能都不到)的水准,想找个例子模仿着改而不得,这个真是帮大忙了 :slight_smile:

这也是个很好的参考(也许直接可以用得上),代码加注释才 200 多行。

1 个赞

不支持 cl-defun/cl-defmacro ? 以下定义的参数没有像锯齿一样缩进:

(cl-defun func (&optional
                optionA
                &key
                keyA
                keyB
                &allow-other-keys
                &rest
                rest-part))

支持啊,LaTeX中竟然连if语句的缩进也没有,对cls等配置文件的高亮和缩进支持基本等于没有,开始我还以为是我设置不对,查了查好像就是没有这种功能。有人说这需要更好的TeX的parser才能做到,但是我也不清楚TeX比起其他语言有何不同,AucTeX连这种基本功能也没有。

已经修复。当时直接从cl.el抄的映射表,但是cl.el会吧cl-defun映射到defun*,然后defun*默认没有定义缩进,就出问题了。

1 个赞

又发现一个问题。

假设宏定义如下:

(cl-defmacro foo (&rest body &key path lexical &allow-other-keys)
  "DOC"
  (declare (indent defun) (debug t))
  `,@body)

调用的时候带/不带参数,缩进表现不一致:

;; 缩进2格
(foo :path "/path/to/file"
  (dosomething))

;; 缩进4格
(foo
    (dosomething))

你这个是误用了defun spec。defunspec定义在lisp-indent-defun-method里,默认是(4 &lambda &body) 也就是说第一个参数缩进4格,第二个参数按lambda-list缩进,其余参数按body缩进。除非你的宏真的是类似defun的宏,否则慎用。

这种混合keyword和forms的建议直接用(indent 0)然后写的时候参数全部另起一行写

Sly有sticker,差不多一个意思。

我要的是能获得 breakpoint 的 lexical environment,然后能在这个 environment 里面 eval code。sticker 说白了就是个 visual goodies,没提供新功能

那手动加break进debugger呢

一样沒有 lexical env eval。我说了 sticker 和手动加沒实质区別

哦,cl的debugger能eval但不是lexical

搜索了 ~/.emacs.d/elpa 下的包和 Emacs 内置的包,似乎“误用”的情况不少。

有时候参数跟函数/宏名写在一行看起来比较顺眼。