注释符号“ ; ” 在换行自动缩进到屏幕中央,想自己设置缩进空格数或者关闭

新手问题

elisp 注释有3种:;;; ;; ;

问题在 ; 上,有时候注释较长需要换行,但是按下 enter 换行后,就会如下:

(require 'sly-el-indent)

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

注释跑到中间去了。

这个问题应该很简单,但我没有搜索到相关的解释,可能是我的搜索能力有问题, 希望大佬们不要嫌弃,能够解惑,感激不尽!

自己实现一个函数代替 lisp-comment-indent

(with-temp-buffer
  (emacs-lisp-mode)
  (list
   (progn (save-excursion (insert ";")) (lisp-comment-indent))
   (progn (save-excursion (insert ";")) (lisp-comment-indent))
   (progn (save-excursion (insert ";")) (lisp-comment-indent))))
;; => (40 nil 0)
  • 40 表示缩进到 40 (由 comment-column 指定)
  • nil 表示跟随代码缩进
  • 0 表示不缩进
1 个赞

您好!首先非常感谢您的回答, 不过有点没看懂,希望能继续请教。

请问这段代码直接放在 init.el 文件中么

其次,40 nil 0 是不是放在 insert 后面啊

还有定义函数是不是 defun with-temp-buffer

希望大佬有时间,可以讲解下,谢谢!

或者说,这是一个实现思路(原理),

需要我自己根据这个思路进行完善?

如果是的话,我现在还有很多没搞懂,

不怎么会,不过正在学习,希望以后能看懂!

你这种改完之后已经违反约定了:

3 个赞

这是一段验证代码,把你实现的函数(例如 my-lisp-comment-indent)放到里边运行,然后观察输出结果。

或者你简单修改 comment-column

  1. 0;;;; 效果一样,放在哪里就固定不动。
  2. nil;;; 效果一样,随代码缩进。
1 个赞

非常感谢!!!

刚刚试了下,验证成功。

辛苦大佬了!等我学会了也试试上面那个操作。(^-^

您好,多谢提醒!!!

lisp的注释符号虽然就是一个; 但是习惯上大家约定俗成的用法是

  • ;;;; 用在文件最开头
  • ;;; 总是放在新行最左
  • ;; 开始于新行并跟随周围代码当前缩进位置
  • ; 单个; 跟在代码之后对齐在40列,用来注释当前行

你用了一个单; 所以自动帮你放到约定的对齐位置了。如果你想要它在代码缩进位置,用双;; 注释就好了。

2 个赞

嗯,没错!感谢讲解。

主要是我英语不太好,所以偷懒没看官方教程,看来还是需要仔细看看。

但还是更喜欢空2格,不太喜欢空40,也不理解为什么要这么做,可能有我不知道的历史渊源。

你不要把单个";"放到空行,就不会自动对齐到 40 列了。

至于为什么自动对齐到 40 列,估计是为了在行尾多行注释时各行是对齐的,更好阅读。如下官方手册中的示例代码,注意最后一行的 “; a subversion.” 是在40列开始的:

(setq base-version-list                 ; There was a base
      (assoc (substring fn 0 start-vn)  ; version to which
             file-version-assoc-list))  ; this looks like
                                        ; a subversion.

只要你的单个 “;”不是在空行上,你也可以用 2个空格。

1 个赞

原来如此,看来规范挺严谨。 谢谢解惑!